Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Deux macros dans une seule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

phil92350

XLDnaute Nouveau
Bonjour à tous,

Voila, j'ai la macro suivantes qui fonctionne très bien

Sub EN_COURS()
Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
Set Ma_Plage = Worksheets("PROJET").Range("A5:U230") 'Compteur: A5 1° ligne U230 derniere ligne
nbr = nbr + 5 + Application.WorksheetFunction.CountA(Ma_Plage) ' rajout des 5° lignes commence l'opération à la 8 émé ligne ?

For i = 5 To nbr 'De 5° à 230° ligne
If Cells(i, 23) = 100 Then ' Controle de la cellule colonne V Si= à 100 je continue
Range("A" & i & ":S" & i).Copy ' copy la ligne des colonnes A à S
Sheets("EN COURS").Select ' sélectionne la feuille "EN COURS"
Range("A230").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues ' Va à la cellule A230 puis remonte à la dernire cellule vide - A
'pour commencer à la deuxieme colonne
Application.CutCopyMode = False ' copie que les valeurs
Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
Range("A" & i & ":S" & i).Select 'Sélectionne la ligne des colonnes A à s
Selection.ClearContents ' efface

End If
Next
End Sub


Mais à la suite de celle-ci j'aimerai faire le même calcul avec des variables différentes comme cela
If Cells(i, 22) et Sheets("ABANDON").Select

Donc voici ma macro au final :

Sub EN_COURS()
Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
Set Ma_Plage = Worksheets("PROJET").Range("A5:U230") 'Compteur: A5 1° ligne U230 derniere ligne
nbr = nbr + 5 + Application.WorksheetFunction.CountA(Ma_Plage) ' rajout des 5° lignes commence l'opération à la 8 émé ligne ?

For i = 5 To nbr 'De 5° à 230° ligne
If Cells(i, 23) = 100 Then ' Controle de la cellule colonne w Si= à 100 je continue
Range("A" & i & ":S" & i).Copy ' copy la ligne des colonnes A à S
Sheets("EN COURS").Select ' sélectionne la feuille "EN COURS"
Range("A230").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues ' Va à la cellule A230 puis remonte à la dernire cellule vide - A
'pour commencer à la deuxieme colonne
Application.CutCopyMode = False ' copie que les valeurs
Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
Range("A" & i & ":S" & i).Select 'Sélectionne la ligne des colonnes A à s
Selection.ClearContents ' efface

For i = 5 To nbr 'De 5° à 230° ligne
If Cells(i, 22) = 50 Then ' Controle de la cellule colonne V Si= à 50 je continue
Range("A" & i & ":S" & i).Copy ' copy la ligne des colonnes A à S
Sheets("ABANDON").Select ' sélectionne la feuille "EN COURS"
Range("A230").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues ' Va à la cellule A230 puis remonte à la dernire cellule vide - A
'pour commencer à la deuxieme colonne
Application.CutCopyMode = False ' copie que les valeurs
Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
Range("A" & i & ":S" & i).Select 'Sélectionne la ligne des colonnes A à s
Selection.ClearContents ' efface



End If
Next
End Sub

Et en exécutant ma macro, j'ai des erreurs de compilation et ce n'est pas de ma compétence malheureusement.

Merci à tous ceux qui voudront m'aider

Bonne soirée à tous

Phil
 
Re : Deux macros dans une seule

bonjour

tu as oublié un end if et un next
 
Re : Deux macros dans une seule

VB:
Sub EN_COURS()
 Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
 Set Ma_Plage = Worksheets("PROJET").Range("A5:U230") 'Compteur: A5 1° ligne U230 derniere ligne
 nbr = nbr + 5 + Application.WorksheetFunction.CountA(Ma_Plage) ' rajout des 5° lignes commence l'opération à la 8 émé ligne ?

 
 For isheet = 1 To 2
 
  If isheet = 1 Then
     sheetRef = "EN COURS"
  Else
     sheetRef = "ABANDON"
  End If
 For i = 5 To nbr 'De 5° à 230° ligne
    If Cells(i, 23) = 100 Then ' Controle de la cellule colonne w Si= à 100 je continue
       'Range("A" & i & ":S" & i).Copy ' copy la ligne des colonnes A à S
       Range("A" & i & ":S" & i).Copy Destination:=Sheets(sheetRef).Range("A230").End(xlUp)(2) ' à moins qu'il n'y est des formules ou du formatage indésirable, cette méthode peut faire aussi
       'Sheets("EN COURS").Select ' sélectionne la feuille "EN COURS"
       'Range("A230").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues ' Va à la cellule A230 puis remonte à la dernire cellule vide - A
       'pour commencer à la deuxieme colonne
       Application.CutCopyMode = False ' copie que les valeurs
       'Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
       'Range("A" & i & ":S" & i).Select 'Sélectionne la ligne des colonnes A à s
       'Selection.ClearContents ' efface
       Range("A" & i & ":S" & i).ClearContents
    End If
 Next i
 Next isheet
 End Sub
 
Dernière édition:
Re : Deux macros dans une seule

Bonjour Phil,

Avec un bout de fichier ça irait mieux pour tester et comprendre ce que tu veux faire. Néanmoins, je crois que ton erreur de compilation est causée parce qu'il manque un "NEXT" juste avant ton 2e FOR et il te manque aussi un END IF.
Assure-toi toujours d'associer FOR avec NEXT et IF avec END IF
Autre truc, "indente" ton code de façon à ce qu'il soit plus lisible

VB:
Sub EN_COURS()
 Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
 Set Ma_Plage = Worksheets("PROJET").Range("A5:U230") 'Compteur: A5 1° ligne U230 derniere ligne
 nbr = nbr + 5 + Application.WorksheetFunction.CountA(Ma_Plage) ' rajout des 5° lignes commence l'opération à la 8 émé ligne ?

For i = 5 To nbr 'De 5° à 230° ligne
    If Cells(i, 23) = 100 Then ' Controle de la cellule colonne w Si= à 100 je continue
        Range("A" & i & ":S" & i).Copy ' copy la ligne des colonnes A à S
        Sheets("EN COURS").Select ' sélectionne la feuille "EN COURS"
        Range("A230").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues ' Va à la cellule A230 puis remonte à la dernire cellule vide - A
        'pour commencer à la deuxieme colonne
        Application.CutCopyMode = False ' copie que les valeurs
        Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
        Range("A" & i & ":S" & i).Select 'Sélectionne la ligne des colonnes A à s
        Selection.ClearContents ' efface
    End If
Next

For i = 5 To nbr 'De 5° à 230° ligne
     If Cells(i, 22) = 50 Then ' Controle de la cellule colonne V Si= à 50 je continue
        Range("A" & i & ":S" & i).Copy ' copy la ligne des colonnes A à S
        Sheets("ABANDON").Select ' sélectionne la feuille "EN COURS"
        Range("A230").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues ' Va à la cellule A230 puis remonte à la dernire cellule vide - A
        'pour commencer à la deuxieme colonne
        Application.CutCopyMode = False ' copie que les valeurs
        Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
        Range("A" & i & ":S" & i).Select 'Sélectionne la ligne des colonnes A à s
        Selection.ClearContents ' efface
     End If
 Next
 End Sub

Dernier commentaire : tu peux éviter les SELECT pour rendre ton code plus rapide.
Exemple, remplace :

Code:
        Sheets("PROJET").Select ' sélectionne la feuille "PROJET"
        Range("A" & i & ":S" & i).Select 'Sélectionne la ligne des colonnes A à s
        Selection.ClearContents ' efface

par

Code:
Sheets("PROJET").Range("A" & i & ":S" & i).ClearContents ' efface

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
15
Affichages
791
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…