Comprendre
Bonjour à tous,
Je travaille depuis peu avec les Macros.
J'utilise ce petit programme trouvé ici que j'ai un peu adapté mais je ne saisie pas toujours comment cela fonctionne.
J'ai donc annoté une partie de la Macro mais j'aimerais si cela est possible que vous m'aidiez à finir de l'expliquer.
Si j'arrive à comprendre comment cela fonctionne je pense pouvoir continuer à progresser.
Merci
Sub copier() ‘ Lance la procédure
Dim G As Worksheet ' ‘ déclare la variable G onglet Général
Dim L As Worksheet ' déclare la variable L onglet Listing
On Error Resume Next ‘ Permet de continuer la procédure et passe directement à la ligne suivante, en cas d'erreur.
Dim Cel As Range, C As Range ‘ declare le variable range
Dim LigneAjout As Long ‘ declare la variable afin d ‘ajouter une ligne
Application.ScreenUpdating = False’ Ne pas actualiser l’affichage, permet de réduire le temps d’exécution
Set G = Sheets("Général") La feuille est un Objet: la variable doit donc être précédée de l'instruction Set lors de l'attibution. 'Manipulation de l'objet
Set L = Sheets("Listing")
LigneAjout = L.Range("A" & Rows.Count).End(xlUp).Row + 1
For Each Cel In G.Range("A17:A" & G.Range("A" & Rows.Count).End(xlUp).Row)
Set C = L.Columns(1).Find(Cel, , xlValues, xlWhole)
If Not C Is Nothing And Cel.Value <> "" Then’ ne copie pas les cellules vide
Cel.Resize(, 16).Copy
L.Range("A" & C.Row).PasteSpecial (xlPasteValues)
Else
Cel.Resize(, 16).Copy
L.Range("A" & LigneAjout).PasteSpecial (xlPasteValues)
LigneAjout = LigneAjout + 1
End If
Next Cel
Application.CutCopyMode = False
Set C = Nothing: Set G = Nothing: Set L = Nothing
End Sub
Bonjour,
j'ai ajouté en majuscule des commentaires (attention à mettre des " ' " pour commenter et rien d'autre
Option Explicit
Sub copier() ' Lance la procédure
Dim G As Worksheet ' ' déclare la variable G onglet Général
Dim L As Worksheet ' déclare la variable L onglet Listing
On Error Resume Next ' Permet de continuer la procédure et passe directement à la ligne suivante, en cas d'erreur.
Dim Cel As Range, C As Range ' declare le variable range
Dim LigneAjout As Long ' declare la variable afin d ‘ajouter une ligne
Application.ScreenUpdating = False ' Ne pas actualiser l’affichage, permet de réduire le temps d’exécution
Set G = Sheets("Général") ' La feuille est un Objet: la variable doit donc être précédée de l'instruction Set lors de l'attibution. 'Manipulation de l'objet
Set L = Sheets("Listing")
LigneAjout = L.Range("A" & Rows.Count).End(xlUp).Row + 1 ' ON COPIE A PARTIR DE LA PREMIERE LIGNE NON VIDE DE LA COLONNE A
For Each Cel In G.Range("A17:A" & G.Range("A" & Rows.Count).End(xlUp).Row) ' BOUCLE POUR CHAQUE CELLULE ENTRE A17 ET Axx
Set C = L.Columns(1).Find(Cel, , xlValues, xlWhole)
If Not C Is Nothing And Cel.Value <> "" Then ' ne copie pas les cellules vides
Cel.Resize(, 16).Copy ' COPIE CE QUI EST EN COLONNE A et L'ENSEMBLE DES CELLULES JUSQU'A 16 COLONNES PLUS A DROITE
L.Range("A" & C.Row).PasteSpecial (xlPasteValues) ' COPIE LA VALEUR SANS FORMAT/FORMULE EN ONGLET "LISTING"
Else
Cel.Resize(, 16).Copy
L.Range("A" & LigneAjout).PasteSpecial (xlPasteValues) ' LA COPIE SE FAIT EN COLONNE A
LigneAjout = LigneAjout + 1 ' INCREMENTE LA DERNIERE LIGNE OU IL FAUDRA COPIER
End If
Next Cel
Application.CutCopyMode = False
Set C = Nothing: Set G = Nothing: Set L = Nothing
End Sub