Répéter une macro ligne après ligne

Valentin94

XLDnaute Nouveau
Bonjour,

J'ai une macro qui vient copier et coller des cellules, en fonction du texte de la cellule active. J'aimerai pouvoir activer cette macro automatiquement sur toutes les cellules non vide de la colonne (ici colonne V ou 22). Cela m'évitera d'appuyer sur un bouton pour activer la macro cellule par cellule.

VB:
    ActiveCell.Select
    Selection.Copy
    Dim CODE As String
    CODE = ActiveCell.Value
     
    Sheets("BIBLEGO").Select
    Columns("V:V").Select
    Selection.Find(What:=CODE, After:=ActiveCell, LookIn:= _
        xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext _
        , MatchCase:=False, SearchFormat:=False).Activate
   
    Range(ActiveCell, ActiveCell.Offset(0, 30)).Select
    Selection.Copy
   
    Sheets("Sous-détails").Select
    ActiveCell.Activate
    ActiveSheet.Paste Link:=True
    ActiveCell.Select

Merci par avance pour votre aide,

Valentin,
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Valentin et bienvenu, bonjour le forum,

Si j'ai bien compris, car ton avec ton code on n'est pas sûr de l'onglet de départ, le code ci-dessous devrait convenir. Sinon tu adapteras :

VB:
Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim R As Range 'déclare la variable R (Recherche)

Set OS = Worksheets("BIBLEGO") 'définit l'onglet source OS
Set OD = Worksheets("Sous-détails") 'définit l'onglet destination OD
DL = OD.Cells(Application.Rows.Count, "V").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne V de l'onglet source
For I = 1 To DL 'boucle sur toutes les lignes I de 1 a DL
    Set R = Nothing 'vide la variable R
    If OD.Cells(I, "V").Value <> "" Then 'condition 1 : si la cellule ligne I colonne V de l'onglet destination OD n'est pas vide
        'définit la recherche R (recherche la valeur exacte de la cellule de la boucle dans la colonne V de l'onglet source)
        Set R = OS.Columns(22).Find(OD.Cells(I, "V").Value, , xlValues, xlWhole)
        If Not R Is Nothing Then 'condition 2 : si au moins une occurreence est trouvée
            R.Resize(1, 31).Copy OD.Cells(I, "V") 'copie la cellule de la première occurrence trouvé redimensionnée et la colle dans la cellule de la boucle
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

La variable DL sert juste pour la boucle For I = 1 to DL. Elle évite de boucler sur des lignes inutiles puisqu'elle définit quelle est la dernière ligne utilisée dans la colonne V de l'onglet source. Normalement tu n'as pas besoin de l'utiliser ailleurs que là où elle se trouve...
 

Discussions similaires

Statistiques des forums

Discussions
315 091
Messages
2 116 111
Membres
112 662
dernier inscrit
lou75