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 pas de " ` "

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

Merci patrick1957.

Rechercher des sujets similaires à "comprendre"