Aide pour configuration d'un macro sur excel

Fermé
thib1212_ Messages postés 3 Date d'inscription vendredi 10 septembre 2021 Statut Membre Dernière intervention 13 septembre 2021 - 13 sept. 2021 à 12:03
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 19 sept. 2021 à 16:25
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
13 sept. 2021 à 15:07
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 vendredi 10 septembre 2021 Statut Membre Dernière intervention 13 septembre 2021
13 sept. 2021 à 19:36
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
14 sept. 2021 à 08:27
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 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
19 sept. 2021 à 12:17
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 14 sept. 2021 à 08:56
bonjour,

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



0
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
19 sept. 2021 à 08:39
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
19 sept. 2021 à 09:21
Je viens réessayer et ca marche
KInkaWERch2_liste-cets.xlsm
0
Merci,
Le voila : https://www.cjoint.com/c/KItkup2Vm22
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié le 19 sept. 2021 à 16:27
SURTOUT NE REGARDE PAS CE QUE LES BÉNÉVOLES TE PROPOSENT A 9 H 21

Adieu

0