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

Configuration: Windows / Chrome 93.0.4577.63

8 réponses

  1. Contributeur
    SURTOUT NE REGARDE PAS CE QUE LES BÉNÉVOLES TE PROPOSENT A 9 H 21

    Adieu

    0
    1. Merci,
      Le voila : https://www.cjoint.com/c/KItkup2Vm22
      0
      1. Contributeur
        Je viens réessayer et ca marche
        KInkaWERch2_liste-cets.xlsm
        0
        1. Contributeur
          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
          1. 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
            1. Contributeur
              bonjour,

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



              0
              1. 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
                1. Contributeur
                  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
                2. @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 ?
                  0
              2. Contributeur
                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