Création d'une boucle avec plusieus conditions

Bonjour à toutes et à tous,

Nouveau sur ce forum, qui me semble répondre a beaucoup de problématique Excel..., je me permets de vous posez un petit problème que je n'arrive pas à transcrire dans une macro Excel.

Voici le détail de ma problématique avec un fichier d'exemple en pièce jointe :

Je souhaite réaliser une macro Excel afin de mettre en forme une séquence de données en fonction de 2 critères dans une nouvelle feuille du classeur.

Feuille 1 : En colonne A la séquence de données et en colonne B le critère.

Feuille 2 : En colonne A la correspondance pour les critères.

Feuille 3 : le résultat attendu.

En bref, je souhaite lire la feuille 1 (séquence) de ligne en ligne et à chaque fois que le trouve le critère I

- alors on recopie le contenu de la cellule de la colonne A(séquence) dans la colonne A dans la feuille 3 (résultat) et on copy le contenu de la cellule A1 de la feuille 2 (mdt) en colonne B dans la feuille 3 (résultat).

A chaque fois que le trouve le critère D

- alors on recopie le contenu de la cellule de la colonne A(séquence) dans la colonne A dans la feuille 3 (résultat) à la suite de la précédente et on copy le contenu de la colonne A de la feuille 2 (mdt) en colonne B dans la feuille 3 (résultat).

En résumé :

Si I alors : data1 100

Si D alors : data1 100

data1 110

data1 120

J'espère bien me faire comprendre.

Merci pour vos retours.

14projet-vba.xlsx (9.28 Ko)

Bonjour,

Essaye ce code :

Sub test()
    k = 1
    For i = 1 To Feuil1.Range("A" & Rows.Count).End(xlUp).Row
        If Feuil1.Range("B" & i) = "D" Then
            For j = 1 To Feuil2.Range("A" & Rows.Count).End(xlUp).Row
                Feuil3.Range("A" & k) = Feuil1.Range("A" & i)
                Feuil3.Range("B" & k) = Feuil2.Range("A" & j)
                k = k + 1
            Next j
        Else
                Feuil3.Range("A" & k) = Feuil1.Range("A" & i)
                Feuil3.Range("B" & k) = Feuil2.Range("A1")
                k = k + 1
        End If
    Next i
End Sub

Bonjour,

un énorme merci pour ton retour rapide sur le sujet, cela fonctionne super bien.

Une dernière petite question, dans la recherche de la plage de la feuille 1 :

For i = 1 To Feuil1.Range("A" & Rows.Count).End(xlUp).Row

j'ai des formules de calcul dans les cellules (A1 à A1000), comment sélectionner uniquement celles qui contiennes du texte de A1 à A8 dans mon exemple ?

Merci encore.

Re,

Essaye comme ça :

Sub test()
    k = 1
    For i = 1 To Feuil1.Range("A" & Rows.Count).End(xlUp).Row
        If Not Feuil1.Range("A" & i).HasFormula Then
            If Feuil1.Range("B" & i) = "D" Then
                For j = 1 To Feuil2.Range("A" & Rows.Count).End(xlUp).Row
                    Feuil3.Range("A" & k) = Feuil1.Range("A" & i)
                    Feuil3.Range("B" & k) = Feuil2.Range("A" & j)
                    k = k + 1
                Next j
            Else
                    Feuil3.Range("A" & k) = Feuil1.Range("A" & i)
                    Feuil3.Range("B" & k) = Feuil2.Range("A1")
                    k = k + 1
            End If
        End If
    Next i
End Sub

Merci pour ton retour,

mais cela ne fonctionne pas, je mets en pièce jointe le fichier Excel mis à jour avec les formules de calcul qui sont en fait en colonne A et B...

Désolé.

Merci encore.

10projet-vba-2.xlsm (17.78 Ko)

Re,

Reformule ta demande car je ne comprends plus rien.

En fait dans la dernier fichier joint, que j'ai ajouter précédemment

quand on exécute la macro test, celle ci ajoute autant de ligne avec le critère 100 que le nombres de cellules qui contient une formule de calcul (colonne B dans la feuille resultat) ...

Est plus clair ?

Merci.

11projet-vba-2.xlsm (17.78 Ko)
YDX a écrit :

For i = 1 To Feuil1.Range("A" & Rows.Count).End(xlUp).Row

j'ai des formules de calcul dans les cellules (A1 à A1000), comment sélectionner uniquement celles qui contiennes du texte de A1 à A8 dans mon exemple ?

Vu la citation c'est le contraire que tu demandais. Enfin la précision de la demande est importante.

Pour cela, tu prends le code que j'ai proposé précédemment, et sur la 3ème ligne tu enlèves le mot "Not"

If Feuil1.Range("A" & i).HasFormula Then

Merci pour tes multiples retours Raja,

Je ne comprends pas pourquoi dans le fichier que je te donne en exemple cela fonctionne mail quand je le reporte sur mon fichier final, cela ne fonctionne pas.

Si tu peux y jeter un coup d'œil, cela serait sympa.

Fichier final en pièce jointe.

Encore merci.

11sequence-ot.xlsm (90.61 Ko)

Re,

C'est normal. Dans la feuille "Séquence", il y a 999 lignes qui contiennent la formule. Donc, la macro ne s'arrête pas au bout de 9 lignes et elle continue. D'où, il faut ajouter une autre condition comme sur le code suivant pour que le programme ne fait rien en cas de vide dans les cellule de la première colonne :

If seq.Range("A" & i).HasFormula And seq.Range("A" & i) <> "" Then

Donc, double conditions (formule dans la cellule et non vide) s'imposent.

Merci beaucoup pour le temps passé.

Rechercher des sujets similaires à "creation boucle plusieus conditions"