Boucle de condition
Résolu
Jono
-
Jono92600 Messages postés 76 Date d'inscription Statut Membre Dernière intervention -
Jono92600 Messages postés 76 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
C'est ma première fois sur ce site, j'espère y trouvé ma réponse.
Depuis plus de 3 jours, je bloque sur une condition.
J'ai un tableau Excel, j'aimerai mettre plusieurs conditions sur une ligne entière choisie par un Combobox.
La condition est :
si la ligne 1 = "" alors
ligne 3 = "Blabla"
si ligne ligne 1 <> "" alors
on passe à la ligne 2
si ligne 2 = "" alors
ligne 3 = "bbbbb"
sinon on passe à la ligne 4
si la ligne 5 = "" alors
ligne 7 = "Blabla"
si ligne ligne 5 <> "" alors
on passe à la ligne 6
si ligne 6 = "" alors
ligne 7 = "bbbbb"
En vous remerciant de votre réponse.
Merci.
C'est ma première fois sur ce site, j'espère y trouvé ma réponse.
Depuis plus de 3 jours, je bloque sur une condition.
J'ai un tableau Excel, j'aimerai mettre plusieurs conditions sur une ligne entière choisie par un Combobox.
La condition est :
si la ligne 1 = "" alors
ligne 3 = "Blabla"
si ligne ligne 1 <> "" alors
on passe à la ligne 2
si ligne 2 = "" alors
ligne 3 = "bbbbb"
sinon on passe à la ligne 4
si la ligne 5 = "" alors
ligne 7 = "Blabla"
si ligne ligne 5 <> "" alors
on passe à la ligne 6
si ligne 6 = "" alors
ligne 7 = "bbbbb"
En vous remerciant de votre réponse.
Merci.
15 réponses
beaucoup de blabla et rien de précis ni de vraiment clair.
Tu espères vraiment une réponse !!!!!!!!!
Tu espères vraiment une réponse !!!!!!!!!
Bonjour,
Pour te répondre Bahbah.
J'aimerai pouvoir mettre une condition sur mon tableau Excel. J'ai plusieurs colonnes (A,B,C,D,E et F).
Si la 1ere ligne de la colonne A est vide alors sur cette même ligne de la colonne G = Toto
Si la 1ere ligne de la colonne A est remplie alors on passe à la colonne B de la même ligne
Si la 1ere ligne de la colonne B est vide alors sur cette même ligne de la colonne G = Paul
Si la 1ere ligne de la colonne B est remplie alors on passe à la colonne C de la même ligne
Si la 1ere ligne de la colonne C est vide alors sur cette même ligne de la colonne G = Piere
Si la 1ere ligne de la colonne C est remplie alors on passe à la colonne D de la même ligne
Si la 1ere ligne de la colonne D est vide alors sur cette même ligne de la colonne G = Andre
Si la 1ere ligne de la colonne D est remplie alors on passe à la colonne E de la même ligne
Si la 1ere ligne de la colonne E est vide alors sur cette même ligne de la colonne G = Bobo
Si la 1ere ligne de la colonne E est remplie alors on passe à la colonne F de la même ligne
Si la 1ere ligne de la colonne F est vide alors sur cette même ligne de la colonne G = JoJo
Si la 1ere ligne de la colonne F est remplie alors sur cette même ligne de la colonne G = Terminer
En vous remerciant d'avance de votre réponse.
Cdt
Pour te répondre Bahbah.
J'aimerai pouvoir mettre une condition sur mon tableau Excel. J'ai plusieurs colonnes (A,B,C,D,E et F).
Si la 1ere ligne de la colonne A est vide alors sur cette même ligne de la colonne G = Toto
Si la 1ere ligne de la colonne A est remplie alors on passe à la colonne B de la même ligne
Si la 1ere ligne de la colonne B est vide alors sur cette même ligne de la colonne G = Paul
Si la 1ere ligne de la colonne B est remplie alors on passe à la colonne C de la même ligne
Si la 1ere ligne de la colonne C est vide alors sur cette même ligne de la colonne G = Piere
Si la 1ere ligne de la colonne C est remplie alors on passe à la colonne D de la même ligne
Si la 1ere ligne de la colonne D est vide alors sur cette même ligne de la colonne G = Andre
Si la 1ere ligne de la colonne D est remplie alors on passe à la colonne E de la même ligne
Si la 1ere ligne de la colonne E est vide alors sur cette même ligne de la colonne G = Bobo
Si la 1ere ligne de la colonne E est remplie alors on passe à la colonne F de la même ligne
Si la 1ere ligne de la colonne F est vide alors sur cette même ligne de la colonne G = JoJo
Si la 1ere ligne de la colonne F est remplie alors sur cette même ligne de la colonne G = Terminer
En vous remerciant d'avance de votre réponse.
Cdt
Bonjour,
Sauf incompréhension de ma part, il ne s'agit pas d'une "boucle de conditions", mais bel et bien de tests If, ElseIf, ElseIf...
Essaye quelque chose comme :
Sauf incompréhension de ma part, il ne s'agit pas d'une "boucle de conditions", mais bel et bien de tests If, ElseIf, ElseIf...
Essaye quelque chose comme :
If Range("A1") = "" Then Range("G1") = "Toto" ElseIf Range("B1") = "" Then Range("G1") = "Paul" ElseIf Range("C1") = "" Then Range("G1") = "Piere" '..... ElseIf Range("F1") = "" Then Range("G1") = "Jojo" Else Range("G1") = "Terminer" End If
Alors, il faut boucler sur toutes les lignes :
Ou, si tu as beaucoup de lignes concernées, passer par une variable tableau.
Dim i As Long For i = 1 To 100 If Range("A" & i) = "" Then Range("G" & i) = "Toto" ElseIf Range("B" & i) = "" Then Range("G" & i) = "Paul" ElseIf Range("C" & i) = "" Then Range("G" & i) = "Piere" '..... ElseIf Range("F" & i) = "" Then Range("G" & i) = "Jojo" Else Range("G" & i) = "Terminer" End If Next
Ou, si tu as beaucoup de lignes concernées, passer par une variable tableau.
j'ai exactement fait le même code sa fonctionne mais, quand je lance la macro ma colonne G prend en compte les lignes vides. Ce tableau se remplira au fur et à mesure dans le temps. Donc, l'idéal pour moi est d'appliquer le code que sur les colonnes et lignes remplis.
Merci.
Mon code adapté a mon tableau :
Dim i As Long
For i = 1 To 100
If Range("E3" & i) = "" Then
Range("AD3" & i) = "Date d'envoie d'offre"
ElseIf Range("F3" & i) = "" Then
Range("AD3" & i) = "Il faut envoyer l'offre"
ElseIf Range("H3" & i) = "" Then
Range("AD3" & i) = "Attente de l'AAO"
ElseIf Range("I3" & i) = "" Then
Range("AD3" & i) = "Attente de m'AAO"
ElseIf Range("K3" & i) = "" Then
Range("AD3" & i) = "AAO reçu"
ElseIf Range("L3" & i) = "" Then
Range("AD3" & i) = "Essais planifiés"
ElseIf Range("N3" & i) = "" Then
Range("AD3" & i) = "Essais en cours"
ElseIf Range("O3" & i) = "" Then
Range("AD3" & i) = "Fin des essais"
ElseIf Range("Q3" & i) = "" Then
Range("AD3" & i) = "Il faut envoyer le rapport intermédiare"
ElseIf Range("R3" & i) = "" Then
Range("AD3" & i) = "Il faut envoyer le rapport intermédiare"
ElseIf Range("T3" & i) = "" Then
Range("AD3" & i) = "Il faut envoyer le rapport final"
ElseIf Range("U3" & i) = "" Then
Range("AD3" & i) = "Rapport final à envoyer"
Else
Range("AD3" & i) = "Rapport final envoyé"
End If
La colonne "AD" représente mon résultat
Merci de votre aide.
Merci.
Mon code adapté a mon tableau :
Dim i As Long
For i = 1 To 100
If Range("E3" & i) = "" Then
Range("AD3" & i) = "Date d'envoie d'offre"
ElseIf Range("F3" & i) = "" Then
Range("AD3" & i) = "Il faut envoyer l'offre"
ElseIf Range("H3" & i) = "" Then
Range("AD3" & i) = "Attente de l'AAO"
ElseIf Range("I3" & i) = "" Then
Range("AD3" & i) = "Attente de m'AAO"
ElseIf Range("K3" & i) = "" Then
Range("AD3" & i) = "AAO reçu"
ElseIf Range("L3" & i) = "" Then
Range("AD3" & i) = "Essais planifiés"
ElseIf Range("N3" & i) = "" Then
Range("AD3" & i) = "Essais en cours"
ElseIf Range("O3" & i) = "" Then
Range("AD3" & i) = "Fin des essais"
ElseIf Range("Q3" & i) = "" Then
Range("AD3" & i) = "Il faut envoyer le rapport intermédiare"
ElseIf Range("R3" & i) = "" Then
Range("AD3" & i) = "Il faut envoyer le rapport intermédiare"
ElseIf Range("T3" & i) = "" Then
Range("AD3" & i) = "Il faut envoyer le rapport final"
ElseIf Range("U3" & i) = "" Then
Range("AD3" & i) = "Rapport final à envoyer"
Else
Range("AD3" & i) = "Rapport final envoyé"
End If
La colonne "AD" représente mon résultat
Merci de votre aide.
Pour être plus compréhensible, je vais partir de votre exemple.
Dans ce dode :
Dim i As Long
For i = 1 To 100
If Range("A" & i) = "" Then
Range("G" & i) = "Toto"
ElseIf Range("B" & i) = "" Then
Range("G" & i) = "Paul"
ElseIf Range("C" & i) = "" Then
Range("G" & i) = "Piere"
'.....
ElseIf Range("F" & i) = "" Then
Range("G" & i) = "Jojo"
Else
Range("G" & i) = "Terminer"
End If
Next
Quand j'applique le code sur mon tableau, dans la colonne "G" toutes les lignes de cette colonne sont remplies.
Je veux que le code s'applique sur la colonne "G" mais qu'avec les lignes remplies dan le tableau.
J'espère être compris cette fois :) .
C'est dommage qu'on ne puisse pas mettre des Pj.
Merci.
Dans ce dode :
Dim i As Long
For i = 1 To 100
If Range("A" & i) = "" Then
Range("G" & i) = "Toto"
ElseIf Range("B" & i) = "" Then
Range("G" & i) = "Paul"
ElseIf Range("C" & i) = "" Then
Range("G" & i) = "Piere"
'.....
ElseIf Range("F" & i) = "" Then
Range("G" & i) = "Jojo"
Else
Range("G" & i) = "Terminer"
End If
Next
Quand j'applique le code sur mon tableau, dans la colonne "G" toutes les lignes de cette colonne sont remplies.
Je veux que le code s'applique sur la colonne "G" mais qu'avec les lignes remplies dan le tableau.
J'espère être compris cette fois :) .
C'est dommage qu'on ne puisse pas mettre des Pj.
Merci.
J'espère être compris cette fois :)
Non, pas davantage.
Non, pas davantage.
Pour joindre un fichier sur les forums de ccm il faut : |
---|
> se rendre sur le site : https://www.cjoint.com/
> cliquer sur "Parcourir" > rechercher le fichier > cliquer sur "Ouvrir" > cliquer sur "Créer le lien Cjoint" > copier le lien > revenir ici le coller dans une réponse |
Quand j'applique votre code ma colonne "AD" n'est pas bien renseigné, il y a des lignes qui sont sautées.
Je veux que le code s’exécute uniquement sur les lignes remplis. par exemple de la ligne 3 à la dernière ligne renseignée (exemple ligne 8).
Mais que à l'avenir quand je vais rajouter une nouvelle ligne, le code s’exécute sur cette nouvelle ligne aussi.
Je veux que le code s’exécute uniquement sur les lignes remplis. par exemple de la ligne 3 à la dernière ligne renseignée (exemple ligne 8).
Mais que à l'avenir quand je vais rajouter une nouvelle ligne, le code s’exécute sur cette nouvelle ligne aussi.
Bon.
Alors...
N'ajoutes pas de chiffre. Range("AD" & i) pour i de 3 à 8 va te donner successivement :
Range("AD3")
Range("AD4")
Range("AD5)
Range("AD6")
Range("AD7")
Range("AD8")
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Alors...
Dim PremLig As Long Dim DL As Long Dim i As Long 'dernière ligne colonne A DL = Range("A" & Rows.Count).End(xlUp).Row 'première ligne à traiter : PremLig = 3 'Boucle : For i = PremLig To DL If Range("E" & i) = "" Then Range("AD" & i) = "Date d'envoi d'offre" ElseIf Range("F" & i) = "" Then Range("AD" & i) = "Il faut envoyer l'offre" ElseIf Range("H" & i) = "" Then Range("AD" & i) = "Attente de l'AAO" ElseIf Range("I" & i) = "" Then Range("AD" & i) = "Attente de l'AAO" ElseIf Range("K" & i) = "" Then Range("AD" & i) = "AAO reçu" ElseIf Range("L" & i) = "" Then Range("AD" & i) = "Essais planifiés" ElseIf Range("N" & i) = "" Then Range("AD" & i) = "Essais en cours" ElseIf Range("O" & i) = "" Then Range("AD" & i) = "Fin des essais" ElseIf Range("Q" & i) = "" Then Range("AD" & i) = "Il faut envoyer le rapport intermédiaire" ElseIf Range("R" & i) = "" Then Range("AD" & i) = "Il faut envoyer le rapport intermédiaire" ElseIf Range("T" & i) = "" Then Range("AD" & i) = "Il faut envoyer le rapport final" ElseIf Range("U" & i) = "" Then Range("AD" & i) = "Rapport final à envoyer" Else Range("AD" & i) = "Rapport final envoyé" End If Next i
N'ajoutes pas de chiffre. Range("AD" & i) pour i de 3 à 8 va te donner successivement :
Range("AD3")
Range("AD4")
Range("AD5)
Range("AD6")
Range("AD7")
Range("AD8")
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
C'est parfait le code fonctionne à merveille. Je vous en suis très très reconnaissant.
C'est supers.
Merci beacoup.
C'est supers.
Merci beacoup.
Bonjour,
Voici une autre méthode :
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Voici une autre méthode :
Sub conditionV2() Dim PremLig As Long, DL As Long, i As Long, j As Long Dim Cols As Variant, Texte As Variant 'dernière ligne colonne A DL = Range("A" & Rows.Count).End(xlUp).Row 'première ligne à traiter : PremLig = 3 'array des colonnes à traiter Cols = Array("E", "F", "H", "I", "K", "L", "N", "O", "Q", "R", "T", "U") 'texte à saisir selon colonne Texte = Array("Date d'envoi d'offre", "Il faut envoyer l'offre", _ "Attente de l'AAO", "Attente de l'AAO", "AAO reçu", _ "Essais planifiés", "Essais en cours", "Fin des essais", _ "Il faut envoyer le rapport intermédiaire", _ "Il faut envoyer le rapport intermédiaire", _ "Il faut envoyer le rapport final", "Rapport final à envoyer", _ "Rapport final envoyé") 'Boucle : For i = PremLig To DL 'double boucle For j = LBound(Cols) To UBound(Cols) If Range(Cols(j) & i) = "" Then Range("AD" & i) = Texte(j): Exit For Next j If Range("AD" & i) = "" Then Range("AD" & i) = Texte(UBound(Texte)) Next i End Sub
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Bonjour,
Ou encore, si et seulement si les colonnes E, F, H, I, K, L, N, O, Q, R, T et U sont complétées systématiquement dans cet ordre.
Ou encore, si et seulement si les colonnes E, F, H, I, K, L, N, O, Q, R, T et U sont complétées systématiquement dans cet ordre.
Sub Macro_1() Dim Texte, NBVal As Integer, PL As Integer, DL As Long, L As Long 'première ligne à traiter : PL = 3 'dernière ligne colonne A DL = Range("A" & Rows.Count).End(xlUp).Row Texte = Array("Date d'envoi d'offre", "Il faut envoyer l'offre", _ "Attente de l'AAO", "Attente de l'AAO", "AAO reçu", _ "Essais planifiés", "Essais en cours", "Fin des essais", _ "Il faut envoyer le rapport intermédiaire", _ "Il faut envoyer le rapport intermédiaire", _ "Il faut envoyer le rapport final", "Rapport final à envoyer", _ "Rapport final envoyé") For L = PL To DL Range("AD" & L) = Texte(WorksheetFunction.CountA(Intersect(Rows(L), Range("E:F,H:I,K:L,N:O,Q:R,T:U")))) Next L End Sub
J'ai réussi a le mettre sur un site.
https://www.transfernow.net/?utm_source=catupload&utm_medium=download
https://www.transfernow.net/?utm_source=catupload&utm_medium=download
Par ordre :
UserForm Accueil.
Changer
par
Le reste est OK
UserForm Accueil.
Changer
aa = Feuil4.Range("D3:D10000")
par
aa = Feuil4.Range("D3:D" & Feuil4.Range("D" & Rows.Count).End(xlUp).Row)
Le reste est OK
Userform Resultats :
Lorsque tu places en début de procédure :
remet sa valeur à True en fin de procédure avant le End Sub :
Private Sub VALIDER_Click() :
remplace :
par :
supprime la ligne inutile :
Lors du transfert de date d'un textbox dans la feuille, il ne faut pas utiliser Format (cf ce sujet par exemple). Tu risques d'avoir des inversions jour-mois. Utilise CDate :
remplace donc :
par :
idem pour :
Lorsque tu places en début de procédure :
Application.ScreenUpdating = False
remet sa valeur à True en fin de procédure avant le End Sub :
Application.ScreenUpdating = True
Private Sub VALIDER_Click() :
remplace :
If Trim(Me.ComboBox1) = "" Or Trim(Me.ComboBox1) = "" Then
par :
If Trim(Me.ComboBox1) = "" Then
supprime la ligne inutile :
no_ligne = Range("A3")
Lors du transfert de date d'un textbox dans la feuille, il ne faut pas utiliser Format (cf ce sujet par exemple). Tu risques d'avoir des inversions jour-mois. Utilise CDate :
remplace donc :
Cells(no_ligne, 5) = Format(TextBox6.Value, "mm/dd/yyyy")
par :
Cells(no_ligne, 5) = CDate(TextBox6.Value)
idem pour :
Cells(no_ligne, 6) = Format(TextBox7.Value, "mm/dd/yyyy")
Userform SplashScreen :
Remplace ta procédure Private Sub UserForm_Activate() par ce code :
Et d'ailleurs, il est ou ton Label4, je ne le vois pas...
Remplace ta procédure Private Sub UserForm_Activate() par ce code :
Private Sub UserForm_Activate() Dim Cpt As Byte Do Application.Wait (Now + TimeValue("00:00:01")) With SplashScreen .Label4.Caption = SplashScreen.Label4.Caption + "." .Repaint End With Cpt = Cpt + 1 Loop While Cpt < 3 Application.Wait (Now + TimeValue("00:00:01")) Unload SplashScreen Accueil.Show End Sub
Et d'ailleurs, il est ou ton Label4, je ne le vois pas...
Userform1 :
Si ça fonctionne bien, je ne vois pas de grossière erreur.
Sauf :
ta variable Début ne sert à rien.
Il faut typer tes variables :
deviendrait :
Si ça fonctionne bien, je ne vois pas de grossière erreur.
Sauf :
ta variable Début ne sert à rien.
Il faut typer tes variables :
Dim début, nLigneTxt, n, f
deviendrait :
Dim début As Long, nLigneTxt As Long, n As Long, f As Worksheet
J'ai fais toute les modifications.
Si, je veux que dans les TextBox de mon Userform1 n'accepte que des dates, comment je fais ?
Si, je veux que dans les TextBox de mon Userform1 n'accepte que des dates, comment je fais ?
Car le but est de faire un calcule entre la date prévue et la date de réalisation.
Si la date prévue est > Aujourd'hui et la la date de réaliser est vide alors
Je mais dans la colonne AJ "A FAIRE" avec la couleur orange.
Si Date prévue < Aujourd'hui et Réaliser est vide alors
Je mais dans la colonne AJ "EN RETARD" avec la couleur rouge.
Si Date prévue <> Aujourd'hui et Réaliser est vide alors
Je mais dans la colonne AJ "FAIT" avec la couleur vert.
Est-ce que c'est possible ?
Si j'arrive à avoir sa, je rajouterais une colonne dans mon Userform1.
SVP
Si la date prévue est > Aujourd'hui et la la date de réaliser est vide alors
Je mais dans la colonne AJ "A FAIRE" avec la couleur orange.
Si Date prévue < Aujourd'hui et Réaliser est vide alors
Je mais dans la colonne AJ "EN RETARD" avec la couleur rouge.
Si Date prévue <> Aujourd'hui et Réaliser est vide alors
Je mais dans la colonne AJ "FAIT" avec la couleur vert.
Est-ce que c'est possible ?
Si j'arrive à avoir sa, je rajouterais une colonne dans mon Userform1.
SVP
Bonjour,
Pour les dates, il s'agit d'un autre sujet.
Il convient donc de créer une nouvelle discussion sur le forum.
Mais avant cela, je te recommande cette lecture.
Pour les dates, il s'agit d'un autre sujet.
Il convient donc de créer une nouvelle discussion sur le forum.
Mais avant cela, je te recommande cette lecture.