Ce serait un excellent exercice en effet.
Sub test()
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
Dim destination As Range 'déclaration d'une variable qui servira de destination pour la copie de donnée
Worksheets("test").UsedRange.Clear 'On vide complètement la feuille de destination
Set destination = Worksheets("test").Range("A1") 'Initialisation de la variable destination sur A1 de la feuille test
Sheets("Carto 11-2012").Range("A1:I2").Copy destination 'Copie de l'entête A1:I2
Set destination = destination.Offset(2, 0) 'Déplacement de la cellule destination 2 lignes plus bas
With Sheets("Carto 11-2012") '"With" permet d'économiser un peu d'écriture, toute les commande commancant par "." se référeront automatiquement à Sheets("Carto 11-2012") à l'intérieur du with
For Each cel In .Range("g3:g" & .Range("g" & .Rows.Count).End(xlUp).Row) 'on boucle sur toutes les cellules de G3 à la dernière cellule occupée de la colonne G
If cel.MergeCells Then 'si la cellule est fusionnée
If source Is Nothing Then ' si la source n'est pas initialisé
'petite parenthèse, si on lit une variable objet non initialisée alors le soft plante
'N.B. en relisant mon code je remarque qu'on pourrait facilement améliorer qqch ici ...
Set source = cel.MergeArea.EntireRow 'alors on l'initialise avec l'ensemble des lignes fusionnées
Else 'si elle est déjà initialisée
Set source = Union(source, cel.MergeArea.EntireRow) 'alors on rajoute les lignes fusionnées à la source
End If ' fin de si
ElseIf cel.Value >= 80 Then 'si le contenu de cel est plus grand ou égal à 80
If source Is Nothing Then 'si la source n'est pas initialisé
Set source = cel.EntireRow 'alors on l'initialise avec l'ensemble des lignes fusionnées
Else 'si elle est déjà initialisée
Set source = Union(source, cel.EntireRow) 'alors on rajoute les lignes fusionnées à la source
End If ' fin de si
End If 'fin de si
Next 'prochain élément de la boucle for each (y a rien à comprendre c'est la synthaxe d'une boucle for ... next)
End With ' fin du with
source.Copy destination 'et hop on copie d'un coup toutes les cellule qu'on n'a mis dans source
'N.B. il serait possible de copier ligne à ligne sans utilisé le union, mais le moins souvent on écrit dans une feuille, le plus vite va la macro
Worksheets("Carto 11-2012").Activate 'On active la feuille Carto (optionnel)
Worksheets("Carto 11-2012").Range("A1").Select 'Et on sélectionne la case A1 (la aussi optionnel)
Sub test()
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("test").UsedRange.Clear 'On vide complètement la feuille de destination
Set source = Sheets("Carto 11-2012").Range("A1:I2").EntireRow 'Initialisation de source avec l'entête de la feuille source
With Sheets("Carto 11-2012") '"With" permet d'économiser un peu d'écriture, toute les commande commancant par "." se référeront automatiquement à Sheets("Carto 11-2012") à l'intérieur du with
For Each cel In .Range("g3:g" & .Range("g" & .Rows.Count).End(xlUp).Row) 'on boucle sur toutes les cellules de G3 à la dernière cellule occupée de la colonne G
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 >= 80 Then 'si le contenu de cel est plus grand ou égal à 80
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 for each (y a rien à comprendre c'est la synthaxe d'une boucle for ... next)
End With ' fin du with
source.Copy Worksheets("test").Range("A1") 'et hop on copie d'un coup toutes les cellule qu'on n'a mis dans source
Worksheets("Carto 11-2012").Activate 'On active la feuille Carto (optionnel)
Worksheets("Carto 11-2012").Range("A1").Select 'Et on sélectionne la case A1 (la aussi optionnel)
End Sub