Aide pour configuration d'un macro sur excel
Bonjour,
J'ai besoin de configurer une grille excel pour mon entreprise. Pour cela, je dois mettre en place un macro pour que (voir le fichier joint) :
- lorsque le statut dans la colonne G de la feuille 1 passe en "Accepté"
- la ligne est copié dans la feuille 2
Bien évidemment il faudrait que les lignes se collent les unes en dessous des autres afin de ne pas effacer les précédentes.
Quelqu'un aurait-il configurer cela ?
Le document est : https://www.cjoint.com/c/KInkaWERch2
J'ai besoin de configurer une grille excel pour mon entreprise. Pour cela, je dois mettre en place un macro pour que (voir le fichier joint) :
- lorsque le statut dans la colonne G de la feuille 1 passe en "Accepté"
- la ligne est copié dans la feuille 2
Bien évidemment il faudrait que les lignes se collent les unes en dessous des autres afin de ne pas effacer les précédentes.
Quelqu'un aurait-il configurer cela ?
Le document est : https://www.cjoint.com/c/KInkaWERch2
Configuration: Windows / Chrome 93.0.4577.63
8 réponses
-
ContributeurBonjour,
Pour faire une boucle:
https://www.developpez.net/forums/d605223/logiciels/microsoft-office/excel/contribuez/boucles-parcourir-colonne-ligne-plage-donnees-2-methodes/
pour trouver la dernière ligne remplie:
https://excel-malin.com/tutoriels/vba-tutoriels/vba-trouver-la-derniere-cellule-utilisee/
pour copier une plage:
https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.copy
ce qui donne cette macro, a mettre dans un module et à associer à un bouton ou un raccourci clavier:Option Explicit 'https://www.developpez.net/forums/d605223/logiciels/microsoft-office/excel/contribuez/boucles-parcourir-colonne-ligne-plage-donnees-2-methodes/ 'https://excel-malin.com/tutoriels/vba-tutoriels/vba-trouver-la-derniere-cellule-utilisee/ 'https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.copy Sub For_X_to_Next_Ligne() Dim FL1 As Worksheet, NoCol As Integer Dim NoLig As Long, Var As Variant Dim DerniereLigneUtilisee As Long Set FL1 = Worksheets("Liste de commande") NoCol = 7 'lecture de la colonne G For NoLig = 2 To Split(FL1.UsedRange.Address, "$")(4) Var = FL1.Cells(NoLig, NoCol) If Var = "Accepté" Then DerniereLigneUtilisee = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1 'où X est la colonne donnée FL1.Range("A" & NoLig & ":H" & NoLig).Copy _ Destination:=Worksheets("Feuil1").Range("A" & DerniereLigneUtilisee) End If Next Set FL1 = Nothing End Sub
Voilà
-
Bonjour,
Merci pour votre aide, ca marche très bien !
Par contre, est-il obligé d'associer cette macro à un bouton ? Cela peut-il se faire automatiquement ?-
ContributeurOui en déclenchant la macro à l'activation de la feuille1
Se mettre sur la feuille 1 et faire Alt F11 pour accéder à son module:
mettre ce code:
Option Explicit Private Sub Worksheet_Activate() For_X_to_Next_Ligne End Sub
mais il va falloir corriger la macro, car si on n'efface pas les anciennes saisies cela va s'accumuler!
on efface donc :
Option Explicit 'https://www.developpez.net/forums/d605223/logiciels/microsoft-office/excel/contribuez/boucles-parcourir-colonne-ligne-plage-donnees-2-methodes/ 'https://excel-malin.com/tutoriels/vba-tutoriels/vba-trouver-la-derniere-cellule-utilisee/ 'https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.copy Sub For_X_to_Next_Ligne() Dim FL1 As Worksheet, NoCol As Integer Dim NoLig As Long, Var As Variant Dim DerniereLigneUtilisee As Long Set FL1 = Worksheets("Liste de commande") NoCol = 7 'lecture de la colonne G DerniereLigneUtilisee = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1 'où X est la colonne donnée Range("A2:H" & DerniereLigneUtilisee).ClearContents 'on efface For NoLig = 2 To Split(FL1.UsedRange.Address, "$")(4) Var = FL1.Cells(NoLig, NoCol) If Var = "Accepté" Then DerniereLigneUtilisee = Worksheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1 'où X est la colonne donnée FL1.Range("A" & NoLig & ":H" & NoLig).Copy _ Destination:=Worksheets("Feuil1").Range("A" & DerniereLigneUtilisee) End If Next Set FL1 = Nothing End Sub
voilà prêt à l'emploi!
@+ Le Pivert -
@cs_Le PivertBonjour,
Je viens de voir qu'il y a une erreur sur la macro, en effet quand la fonction "accepté" est renseigné, toutes les lignes de la feuille 1 sont copiés. Or, il faudrait que seulement la ligne concerné soit copié et non celle d'avant (car sinon on les retrouve plusieurs fois dans la feuille 2).
Que faut-il changer ?
-
-
-
Bonjour,
Il y a une erreur sur la macro, en effet quand la fonction "accepté" est renseigné, toutes les lignes de la feuille 1 sont copiés. Or, il faudrait que seulement la ligne concerné soit copié et non celle d'avant (car sinon on les retrouve plusieurs fois dans la feuille 2).
Que faut-il changer ? -
ContributeurBonjour,
4 jours après mon envoi, je n'ai plus le classeur...
Donc,
renvoie ton classeur avec la macro
et pas dans 4 jours !!!
-
ContributeurJe viens réessayer et ca marche
KInkaWERch2_liste-cets.xlsm
-
Merci,
Le voila : https://www.cjoint.com/c/KItkup2Vm22 -
ContributeurSURTOUT NE REGARDE PAS CE QUE LES BÉNÉVOLES TE PROPOSENT A 9 H 21
Adieu
