Mettre une boucle dans un programme VBA

bonojour à tous,

voila j ai un petit soucis, vu que je suis nouveau en VBA , j'essaye de mettre une boucle dans mon programme VBA pour que le meme programme se refait pour toutes les cellules de la colonne sachant qu'il ca environ 400 LIGNES , mais j ai pas su le faire si quelqu'un peux m'aider SVP.

Private Sub CommandButton1_Click()

Dim Processus As String, Resultat As String, prochain As String

Cluster = Range("B3")

Processus = Range("P3")

Resultat = Range("U3")

Processusterminé = Range("V3")

If Cluster = "SUPER" And Processus = "Processus Surstock" And Resultat = "Surstock non confirmé" And Processusterminé = "Non" Then

prochain = "CG-STOCK w.azizi@ "

ElseIf Cluster = "SUPER" And Processus = "Processus Surstock " And Resultat = "Surstock confirmé" And Processusterminé = "Non" Then

prochain = "m.allabi@"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment + " And Resultat = "Article non présent dans l'assortiment" And Processusterminé = "Non" Then

prochain = "Cat Man a.hajnassar@"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment +" And Resultat = "Article dans l'assortiment" And Processusterminé = "Non" Then

prochain = "CG Commercial h.elhessni@labelvie.ma"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment - " And Resultat = "Article non présent dans l'assortiment" And Processusterminé = "Non" Then

prochain = "CG Commercial h.elhessni@"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment -" And Resultat = "Article dans l'assortiment" And Processusterminé = "Non" Then

prochain = "Cat Man a.hajnassar@"

End If

Range("Y3") = prochain

End Sub

bonjour,

une proposition (non testée)

Private Sub CommandButton1_Click()

Dim Processus As String, Resultat As String, prochain As String
for i=3 to 402
Cluster = Range("B" & i)
Processus = Range("P" & i)
Resultat = Range("U" & i)
Processusterminé = Range("V" & i)

If Cluster = "SUPER" And Processus = "Processus Surstock" And Resultat = "Surstock non confirmé" And Processusterminé = "Non" Then
prochain = "CG-STOCK w.azizi@ "

ElseIf Cluster = "SUPER" And Processus = "Processus Surstock " And Resultat = "Surstock confirmé" And Processusterminé = "Non" Then
prochain = "m.allabi@"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment + " And Resultat = "Article non présent dans l'assortiment" And Processusterminé = "Non" Then
prochain = "Cat Man a.hajnassar@"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment +" And Resultat = "Article dans l'assortiment" And Processusterminé = "Non" Then
prochain = "CG Commercial h.elhessni@labelvie.ma"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment - " And Resultat = "Article non présent dans l'assortiment" And Processusterminé = "Non" Then
prochain = "CG Commercial h.elhessni@"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment -" And Resultat = "Article dans l'assortiment" And Processusterminé = "Non" Then
prochain = "Cat Man a.hajnassar@"

End If

Range("Y" & i) = prochain
next i
End Sub
h2so4 a écrit :

bonjour,

une proposition (non testée)

Je me suis permis de modifier le code de h2so4:

1) il y avait un problème avec les guillemets dans une des chaînes

2) vu que la condition Processusterminé = "Non" était la même pour les différents cas, je l'ai sortie en avant pour accélérer un peu le code.

Cela donne ceci:

Private Sub CommandButton1_Click()

Dim Processus As String, Resultat As String, prochain As String
For i = 3 To 402
Cluster = Range("B" & i)
Processus = Range("P" & i)
Resultat = Range("U" & i)
Processusterminé = Range("V" & i)

If Processusterminé = "Non" Then
        If Cluster = "SUPER" And Processus = "Processus Surstock" And Resultat = "Surstock non confirmé" Then
        prochain = "CG-STOCK w.azizi@ "

        ElseIf Cluster = "SUPER" And Processus = "Processus Surstock " And Resultat = "Surstock confirmé" Then
        prochain = "m.allabi@"

        ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment + " And Resultat = "Article non présent dans l'assortiment" Then
        prochain = "Cat Man a.hajnassar@"

        ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment +" And Resultat = "Article dans l'assortiment" Then
        prochain = "CG Commercial <!-- e --><a href=""mailto:h.elhessni@labelvie.ma"">h.elhessni@labelvie.ma</a><!-- e -->"

        ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment - " And Resultat = "Article non présent dans l'assortiment" Then
        prochain = "CG Commercial h.elhessni@"

        ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment -" And Resultat = "Article dans l'assortiment" Then
        prochain = "Cat Man a.hajnassar@"

        End If
Else
End If
Range("Y" & i) = prochain
Next i
End Sub

et ATTENTION: vérifie dans ton fichier --> "Processus Assortiment - " n'est pas le même que "Processus Assortiment -" comme c'est dans ton code d'origine!

bonjour à tous je vous remercie pour vos réponses.

Excel-Malin ta modification est mieux sauf que j ai trouvé un petit problème au niveau du processus terminé , par ce que moi dans le programme je le lui demande de choisir que ceux qui ont le processus non terminé, sauf que lui il traite même ceux qui sont terminé.

je vous prie de m'aider encore une fois SVP, je vous envoie le fichier excel pour mieux comprendre.


j ai oublié je vous envoyé le programme

Private Sub CommandButton1_Click()

Dim Processus As String, Resultat As String, Processusterminé As String, prochain As String

For i = 2 To 74

Processusterminé = Range("V" & i)

Cluster = Range("B" & i)

Processus = Range("P" & i)

Resultat = Range("U" & i)

If Processusterminé = "Non" Then

If Cluster = "SUPER" And Processus = "Processus Surstock Labelvie" And Resultat = "Surstock non confirmé" Then

prochain = "CG-STOCK w.azizi@labelvie.ma"

ElseIf Cluster = "SUPER" And Processus = "Processus Surstock Labelvie" And Resultat = "Surstock confirmé" Then

prochain = "RESP/MARCH m.allabi@labelvie.ma"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment + Labelvie" And Resultat = "Article non présent dans l'assortiment" Then

prochain = "Cat Man a.hajnassar@labelvie.ma"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment + Labelvie" And Resultat = "Article dans l'assortiment" Then

prochain = "CG Commercial h.elhessni@labelvie.ma"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment - Labelvie" And Resultat = "Article non présent dans l'assortiment" Then

prochain = "CG Commercial h.elhessni@labelvie.ma"

ElseIf Cluster = "SUPER" And Processus = "Processus Assortiment - Labelvie" And Resultat = "Article dans l'assortiment" Then

prochain = "Cat Man a.hajnassar@labelvie.ma"

ElseIf Cluster = "HYPER" And Processus = "Processus Surstock Labelvie" And Resultat = "Surstock non confirmé" Then

prochain = "CG-STOCK w.azizi@labelvie.ma"

ElseIf Cluster = "HYPER" And Processus = "Processus Surstock Labelvie" And Resultat = "Surstock confirmé" Then

prochain = "RESP/MARCH m.allabi@labelvie.ma"

ElseIf Cluster = "HYPER" And Processus = "Processus Assortiment + Labelvie" And Resultat = "Article non présent dans l'assortiment" Then

prochain = "Cat Man a.hajnassar@labelvie.ma"

ElseIf Cluster = "HYPER" And Processus = "Processus Assortiment + Labelvie" And Resultat = "Article dans l'assortiment" Then

prochain = "CG Commercial h.elhessni@labelvie.ma"

ElseIf Cluster = "HYPER" And Processus = "Processus Assortiment - Labelvie" And Resultat = "Article non présent dans l'assortiment" Then

prochain = "CG Commercial h.elhessni@labelvie.ma"

ElseIf Cluster = "HYPER" And Processus = "Processus Assortiment - Labelvie" And Resultat = "Article dans l'assortiment" Then

prochain = "Cat Man a.hajnassar@labelvie.ma"

End If

Else

End If

Range("Y" & i) = prochain

Next i

End Sub

Bonjour,

code adapté à tester

Private Sub CommandButton1_Click()

    Dim Processus As String, Resultat As String, prochain As String
    For i = 2 To 74
        cluster = Range("B" & i)
        Processus = Range("P" & i)
        Resultat = Range("U" & i)
        Processusterminé = Range("V" & i)
        prochain = ""
        If Processusterminé = "Non" And cluster = "SUPER" Then

            If Processus Like "Processus Surstock*" Then
                If Resultat = "Surstock non confirmé" Then
                    prochain = "CG-STOCK w.azizi@ "
                ElseIf Resultat = "Surstock confirmé" Then
                    prochain = "m.allabi@"
                End If

            ElseIf Processus Like "Processus Assortiment +* " Then
                If Resultat = "Article non présent dans l'assortiment" Then
                    prochain = "Cat Man a.hajnassar@"

                ElseIf Resultat = "Article dans l'assortiment" Then
                    prochain = "CG Commercial <!-- e --><a href=""mailto:h.elhessni@labelvie.ma"">h.elhessni@labelvie.ma</a><!-- e -->"
                End If

            ElseIf Processus Like "Processus Assortiment -*" Then
                If Resultat = "Article non présent dans l'assortiment" Then
                    prochain = "CG Commercial h.elhessni@"

                ElseIf Resultat = "Article dans l'assortiment" Then
                    prochain = "Cat Man a.hajnassar@"
                End If

            End If
            Range("Y" & i) = prochain
        End If
    Next i
End Sub

BONJOUR ,

voila j'ai mis les deux programme dans deux feuilles différentes la première ne me traite pas le oui et non

la deuxième feuille me traite les oui et non mais il rate quelque lignes comme ceux de l'assortiment.

je vous remercie d'avance:) (vous trouverez le fichier en pièce jointe)

Bonjour,

as-tu tenu compte de la remarque d'excel-malin concernant l'assortiment ? je suppose que ceci est la cause des problèmes que tu rencontres.

et ATTENTION: vérifie dans ton fichier --> "Processus Assortiment - " n'est pas le même que "Processus Assortiment -" comme c'est dans ton code d'origine!

oui j'ai parfaitement pris en considération la remarque mais toujours rien ,

d'ailleurs ton code me traite le oui et non mais pas les processus assortiment.

essaie ceci et merci pour tes remerciements.

Sub CommandButton1_Click()

    Dim Processus As String, Resultat As String, prochain As String
    dl = 74
    Range("P2:P" & dl).Replace "+", "+"
    Range("P2:P" & dl).Replace "-", "-"

    For i = 2 To dl
        cluster = Range("B" & i)
        Processus = Range("P" & i)
        Resultat = Range("U" & i)
        Processusterminé = Range("V" & i)
        prochain = ""
        If Processusterminé = "Non" And cluster = "SUPER" Then

            If Processus Like "Processus Surstock*" Then
                If Resultat = "Surstock non confirmé" Then
                    prochain = "CG-STOCK w.azizi@ "
                ElseIf Resultat = "Surstock confirmé" Then
                    prochain = "m.allabi@"
                End If

            ElseIf Processus Like "Processus Assortiment +*" Then
                If Resultat = "Article non présent dans l'assortiment" Then
                    prochain = "Cat Man a.hajnassar@"

                ElseIf Resultat = "Article dans l'assortiment" Then
                    prochain = "CG Commercial <!-- e --><a href=""mailto:h.elhessni@labelvie.ma"">h.elhessni@labelvie.ma</a><!-- e -->"
                End If

            ElseIf Processus Like "Processus Assortiment -*" Then
                If Resultat = "Article non présent dans l'assortiment" Then
                    prochain = "CG Commercial h.elhessni@"

                ElseIf Resultat = "Article dans l'assortiment" Then
                    prochain = "Cat Man a.hajnassar@"
                End If

            End If
            Range("Y" & i) = prochain
        End If
    Next i
End Sub

OHHH c'est bon ça a marché , je vous remercie infiniment pour votre aide .

BONJOUR,

SVP j'ai eu un petit soucis avec le bouton que j'ai programmé , je ne sais pas pourquoi il n’exécute pas le programme , sachant qu'il y a deux jours il marchait à merveille , voila le fichier en pièce jointe si vous pouvez m'aider , merci .

Je viens de regarder - dans ton code, tu dois changer la place où tu inscris la valeur "prochain" dans la sheet. Et "annuler la valeur de "prochain" pour l'itération suivante... DONC...

Change (ceci sont les 6 dernières lignes de ton code):

           End If
            Range("U" & i) = prochain
        End If
    Next i

End Sub

en:

           End If
        End If
            Range("U" & i) = prochain
            prochain = ""
    Next i

End Sub

et cela va fonctionner. J'ai testé...

Merci ça marche

simoron a écrit :

Merci ça marche

Tant mieux

Bonne utilisation...

Excel-Malin a écrit :

Je viens de regarder - dans ton code, tu dois changer la place où tu inscris la valeur "prochain" dans la sheet. Et "annuler la valeur de "prochain" pour l'itération suivante... DONC...

Change (ceci sont les 6 dernières lignes de ton code):

           End If
            Range("U" & i) = prochain
        End If
    Next i

End Sub

en:

           End If
        End If
            Range("U" & i) = prochain
            prochain = ""
    Next i

End Sub

et cela va fonctionner. J'ai testé...

bonjour,

je ne pense pas que ceci soit le problème car cette instruction prochain = "" qui tu as ajoutée se trouve déjà dans le programme au début de la boucle dans le code que j'ai proposé.

Quant à moi je soupçonne un problème de mauvaise feuille sélectionnée liée à l'ajout du bouton.

h2so4 a écrit :

bonjour,

je ne pense pas que ceci soit le problème car cette instruction prochain = "" qui tu as ajoutée se trouve déjà dans le programme au début de la boucle dans le code que j'ai proposé.

Quant à moi je soupçonne un problème de mauvaise feuille sélectionnée liée à l'ajout du bouton.

Je n'ai pas tout regardé tout le code depuis le début mais quand j'ai fait le test, le problème était:

Range("U" & i) = prochain un "if" trop tôt. Je l'ai donc déplacé au bon endroit et ensuite, j'ai vu que la valeur de "prochain" n'étais pas remise à zéro pour l'itération suivante. Donc j'ai ajouté prochain = ""

J'ai testé, cela a fonctioné donc je l'ai posté. (soit dit au passant, je n'ai pas remarqué de problème avec le code du bouton - à la fin, j'ai pu tout lancer avec le bouton et celoa a fonctionné)

Je sais que ce n'est probablement pas la solution la plus académique qui soit mais AMHO dans ce type de petite macro à usage unique, le pragmatisme a sa place... J'aurais choisi une autre méthode dans un projet de 5.000 lignes de code.

Excel-Malin a écrit :

Je n'ai pas tout regardé tout le code depuis le début mais quand j'ai fait le test, le problème était:

Range("U" & i) = prochain un "if" trop tôt. Je l'ai donc déplacé au bon endroit et ensuite, j'ai vu que la valeur de "prochain" n'étais pas remise à zéro pour l'itération suivante. Donc j'ai ajouté prochain = ""

Dans ce cas merci à toi d'avoir corrigé mon erreur

et merci à vous deux de m avoir aider , par la même occasion excel-malin au cas ou j'ai 5000 lignes je ferais appel a votre aide encore une fois haha

La plupart des gens, quand on mentionne VBA, pensent à des macros de quelques dizaines voire centaines de lignesde code.

MAIS...

Je viens de terminer un projet en VBA qui a 6.600 lignes de code

Et il y a mieux!

Avec mon colègue, on a crée tout le système de gestion de pricing, offres et propositions de contrats d'une grande banque... Excel + Outlook + Access, tout entre-connecté, tout en VBA.

Pour un total de 60.000 lignes de code... Et, croyez-le ou pas, cela fonctionne!

Rechercher des sujets similaires à "mettre boucle programme vba"