Keny84120
Nouveau membre
Bonjour à tous,
-néo-fit dans la programmation en Visual basic, je cherche a écrire une macro pour excel qui:
Recopier les 3 première ligne d'en tête de la page "Suivi des écarts" sur la page "Rapport des écarts";
puis dans la page "Suivi des écarts"
si "X" dans la colonne "I" (à partir de la ligne 4) recopier la ligne à la suite (donc à partir de la ligne 4) dans la page "Rapport des écarts";
si "Ø" dans la colonne "I" (à partir de la ligne 4) ne rien faire
end
-J'ai trouvé un sujet similaire et j'ai essayer d'adapter à mon fichier:
Sub Report_des_écart()
'
' Report_des_écart Macro
'
' Touche de raccourci du clavier: Ctrl+r
'
Dim cel As Range 'déclaration d'une variable pour la boucle de type range
Dim source As Range 'déclaration d'une variable qui servira de source pour la copie de donnée
Worksheets("Rapport des écarts").UsedRange.Clear 'On vide complètement la feuille de destination
Set source = Sheets("Suivi des écarts").Range("A1:J3").EntireRow 'Initialisation de source avec l'entête de la feuille source
With Sheets("Suivi des écarts") 'toute les commande commancant par "." se référeront automatiquement à Sheets("Suivi des écarts") à l'intérieur du with
For Each cel In .Range("I4:I" & .Range("I" & .Rows.Count).End(xlUp).Row) 'on boucle sur toutes les cellules de I4 à la dernière cellule occupée de la colonne I
If cel.MergeCells Then 'si la cellule est fusionnée
Set source = Union(source, cel.MergeArea.EntireRow) 'on rajoute les lignes fusionnées à la source
ElseIf cel.Value = X Then 'si le contenu de cel est égal à "X"
Set source = Union(source, cel.EntireRow) 'alors on rajoute les lignes fusionnées à la source
End If 'fin de si
Next 'prochain élément de la boucle
End With ' fin du with
source.Copy Worksheets("Rapport des écarts").Range("A1") 'on copie d'un coup toutes les cellule qu'on n'a mis dans source
Worksheets("Rapport des écarts").Activate 'On active la feuille "Rapport des écarts" (optionnel)
Worksheets("Rapport des écarts").Range("A1").Select 'Et on sélectionne la case A1 (la aussi optionnel)
End Sub
-quand j'utilise cette macro ça ne fonctionne pas, par contre si je remplace le X par 1 et du coup je rentre 1 dans la colonne I ça fonctionne, comment faire pour utilisé le "X"?
-de temps en temps la macro bloque sur :
source.Copy Worksheets("Rapport des écarts").Range("A1") 'on copie d'un coup toutes les cellule qu'on n'a mis dans source
mais je sais pas pourquoi?
Merci par avance à tous ceux que prendront le temps de me lire
PS: j'avais préparé un fichier pour test mais le format .xlsx ne passe pas si vous savez pourquoi je joindrais volontiers le fichier test
-néo-fit dans la programmation en Visual basic, je cherche a écrire une macro pour excel qui:
Recopier les 3 première ligne d'en tête de la page "Suivi des écarts" sur la page "Rapport des écarts";
puis dans la page "Suivi des écarts"
si "X" dans la colonne "I" (à partir de la ligne 4) recopier la ligne à la suite (donc à partir de la ligne 4) dans la page "Rapport des écarts";
si "Ø" dans la colonne "I" (à partir de la ligne 4) ne rien faire
end
-J'ai trouvé un sujet similaire et j'ai essayer d'adapter à mon fichier:
Sub Report_des_écart()
'
' Report_des_écart Macro
'
' Touche de raccourci du clavier: Ctrl+r
'
Dim cel As Range 'déclaration d'une variable pour la boucle de type range
Dim source As Range 'déclaration d'une variable qui servira de source pour la copie de donnée
Worksheets("Rapport des écarts").UsedRange.Clear 'On vide complètement la feuille de destination
Set source = Sheets("Suivi des écarts").Range("A1:J3").EntireRow 'Initialisation de source avec l'entête de la feuille source
With Sheets("Suivi des écarts") 'toute les commande commancant par "." se référeront automatiquement à Sheets("Suivi des écarts") à l'intérieur du with
For Each cel In .Range("I4:I" & .Range("I" & .Rows.Count).End(xlUp).Row) 'on boucle sur toutes les cellules de I4 à la dernière cellule occupée de la colonne I
If cel.MergeCells Then 'si la cellule est fusionnée
Set source = Union(source, cel.MergeArea.EntireRow) 'on rajoute les lignes fusionnées à la source
ElseIf cel.Value = X Then 'si le contenu de cel est égal à "X"
Set source = Union(source, cel.EntireRow) 'alors on rajoute les lignes fusionnées à la source
End If 'fin de si
Next 'prochain élément de la boucle
End With ' fin du with
source.Copy Worksheets("Rapport des écarts").Range("A1") 'on copie d'un coup toutes les cellule qu'on n'a mis dans source
Worksheets("Rapport des écarts").Activate 'On active la feuille "Rapport des écarts" (optionnel)
Worksheets("Rapport des écarts").Range("A1").Select 'Et on sélectionne la case A1 (la aussi optionnel)
End Sub
-quand j'utilise cette macro ça ne fonctionne pas, par contre si je remplace le X par 1 et du coup je rentre 1 dans la colonne I ça fonctionne, comment faire pour utilisé le "X"?
-de temps en temps la macro bloque sur :
source.Copy Worksheets("Rapport des écarts").Range("A1") 'on copie d'un coup toutes les cellule qu'on n'a mis dans source
mais je sais pas pourquoi?
Merci par avance à tous ceux que prendront le temps de me lire
PS: j'avais préparé un fichier pour test mais le format .xlsx ne passe pas si vous savez pourquoi je joindrais volontiers le fichier test