Aide pour configuration d'un macro sur excel

thib1212_ Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
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


Configuration: Windows / Chrome 93.0.4577.63
A voir également:

8 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Bonjour,

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à
0
thib1212_ Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
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 ?
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Oui 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
0
thib1212_ > cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention  
 
Bonjour,
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 ?
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
bonjour,

Se déclenche quand tu changes une selection dans la colonne G



0
thib1212_
 
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 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour,
4 jours après mon envoi, je n'ai plus le classeur...

Donc,
renvoie ton classeur avec la macro
et pas dans 4 jours !!!
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Je viens réessayer et ca marche
KInkaWERch2_liste-cets.xlsm
0
thib1212_
 
Merci,
Le voila : https://www.cjoint.com/c/KItkup2Vm22
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
SURTOUT NE REGARDE PAS CE QUE LES BÉNÉVOLES TE PROPOSENT A 9 H 21

Adieu

0