Problème de boucle

Bonjour,

Problème de débutant : j'ai deux onglets, avec une colonne de valeurs commune. Si j'ai dans la feuil2 une valeur qui n'est pas dans la feuil1, je veux la rajouter dans la Feuil1 en fin de liste.

Sauf que ça ne marche pas : le code boucle bien sur la condition, mais ne colle que la dernière valeur trouvée ... J'ai oublié un truc, ça doit être tout simple, mais je ne trouve pas... help, plz ?

Résultat espéré : avoir les 10 articles dans la feuil1

-> version simplifiée de mon fichier ci-joint

Le code :

image
8test-macro-gp.xlsm (17.04 Ko)

Bonjour,

Il faut incrémenter premierelignevide à chaque fois que le test If est positif :

Sub Copier_coller_boucle()

'Objectif : Pour chaque ligne avec la mention "Absent" dans la Feuil2, rajouter le code article manquant dans la Feuil1

        Dim j As Long
        Dim premierelignevide As Long

        premierelignevide = Cells(Rows.Count, 1).End(xlUp).Row

        For j = 4 To 20

            If Sheets("Feuil2").Cells(j, 3) = "Absent" Then
                premierelignevide = premierelignevide + 1
                Sheets("Feuil2").Cells(j, 1).Copy
                Sheets("Feuil1").Cells(premierelignevide, 1).PasteSpecial

            End If

        Next j

End Sub

Nickel.

Merci pour la réponse rapide !

Attention également, car, si on lance la procédure depuis la feuil2 ta macro ne fonctionnera pas.

En effet, l'instruction

premierelignevide = Cells(Rows.Count, 1).End(xlUp).Row

fonctionne sur la feuille active lors du lancement de ta macro.

Donc, il te faut indiquer le nom de la feuille pour vraiment récupérer la bonne ligne :

Sub Copier_coller_boucle()

'Objectif : Pour chaque ligne avec la mention "Absent" dans la Feuil2, rajouter le code article manquant dans la Feuil1

        Dim j As Long
        Dim premierelignevide As Long

        With Sheets("Feuil2") 'ICI
            premierelignevide = .Cells(Rows.Count, 1).End(xlUp).Row
        End With

        For j = 4 To 20

            If Sheets("Feuil2").Cells(j, 3) = "Absent" Then
                premierelignevide = premierelignevide + 1
                Sheets("Feuil2").Cells(j, 1).Copy
                Sheets("Feuil1").Cells(premierelignevide, 1).PasteSpecial

            End If

        Next j

End Sub

Merci pour la précision.

Je lance la formule depuis le Worbook, sur mon fichier d'origine, et ça donne ceci :

image

ça fonctionne bien ^^

Raison de plus pour préciser la feuille...

Bonjour Cyrano , bienvenue sur XLP , bonjour pijaku ,

Uniquement pour le f u n, une autre manière de faire qui ne va s’intéresser qu'aux valeurs (on laisse tomber la mise en forme source). Pour être plus rapide, on passe par des tableaux en mémoire vive. VBA traite ce genre de tableau très rapidement. Les interactions (en lecture et en écriture) avec les feuilles de calcul sont aussi réduites et se font "en bloc" et non pas cellule par cellule.

J'ai supposé qu'il ne devait pas avoir de doublon en colonne A de la feuille "Synthèse". Après le traitement, on élimine les lignes qui sont en doublon en colonne A. Ainsi même si on relance une deuxième fois (ou plus), le traitement ne rajoutera pas une seconde fois les mêmes absents.

Le code est dans module1. le code est un peu commenté. il est toujours possible de me demander des explication.

Bonjour Mafraise,

Pardon pour la réponse tardive, c'est tombé pile sur la fermeture annuelle de l'usine ^^'

-> je vais potasser ça dès que possible, merci pour l'info !

Rechercher des sujets similaires à "probleme boucle"