Aide pour configuration d'un macro sur excel

thib1212_ -  
michel_m Messages postés 18903 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

8 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  2. thib1212_
     
    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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
      1. thib1212_ > cs_Le Pivert Messages postés 8437 Statut Contributeur
         
        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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour,

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



    0
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Je viens réessayer et ca marche
    KInkaWERch2_liste-cets.xlsm
    0
  8. thib1212_
     
    Merci,
    Le voila : https://www.cjoint.com/c/KItkup2Vm22
    0
  9. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    SURTOUT NE REGARDE PAS CE QUE LES BÉNÉVOLES TE PROPOSENT A 9 H 21

    Adieu

    0