Boucle dans un if?

Tokki Messages postés 18 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 8 juin 2011 - 31 mai 2011 à 11:24
Tokki Messages postés 18 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 8 juin 2011 - 31 mai 2011 à 14:49
Bonjour tous le monde,

j'aimerais savoir si il y a la possibilité de mettre une boucle dans une condition if en VBA?
Du genre :

if for j=3 to Range("D65536").End(xlUp).Row
Cells(j, 7) = cboChoixDates.Value next j Then


Merci d'avance pour les réponses :)

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
31 mai 2011 à 11:30
Bonjour,

Que voudrait bien pouvoir dire selon toi "If For ..." ???
Bon . Explique le but à atteindre et on essaiera de te guider avec une syntaxe "orthodoxe"
Je devine qu'elle devrait correspondre à une boucle For ... Next dans laquelle tu insères une expression conditionnelle, genre :

For i = 1 to 3
  If  .... (expression)... then
    ...(Instructions)
  end if
next


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Tokki Messages postés 18 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 8 juin 2011
31 mai 2011 à 11:42
Non, j'aimerais que dans le If on incrémente j, p'tet qu'avec plus de code tu vas voir se que je veux dire, mais il y a peut être une autre solution(surement><)

For i = 3 To Sheets("Modules Spécialisés").Range("D65536").End(xlUp).Row
  'Pour les modules Spécialisés
  If Sheets("Modules Spécialisés").Cells(i, 1) = Sheets("Formulaire Utilisateur").cboPPP.Value _
  And Sheets("Modules Spécialisés").Cells(i, 2) = Sheets("Formulaire Utilisateur").cboNomModAjout.Value _
  Then
    Sheets("Modules Spécialisés").Cells(i, 4).Value = _
    Sheets("Formulaire Utilisateur").txtDatesAjout.Value
    
    Sheets("Modules Spécialisés").Cells(i, 3).Value = _
    Sheets("Formulaire Utilisateur").txtConsAjout.Value
    
    Sheets("Modules Spécialisés").Cells(i, 5).Value = _
    Sheets("Formulaire Utilisateur").txtSalleAjout.Value

'remplace les espaces de la colones dates par des retour a la ligne
Sheets("Modules Spécialisés").Columns(4).Replace " ", Chr(10)
  'Pour les modules Transversaux
  ElseIf Sheets("Modules Transversaux").Cells(i, 1) = _
  Sheets("Formulaire Utilisateur").cboPPP.Value And Sheets("Modules Transversaux").Cells(i, 2) = _
  Sheets("Formulaire Utilisateur").cboNomModAjout.Value And _

'ici j'aimerais faire une boucle sur j 
Sheets("Modules Transversaux").Cells(j, 7) = _
  Sheets("Formulaire Utilisateur").cboChoixDates.Value 
'et la fermer la

Then
  
    Sheets("Modules Transversaux").Cells(i, 4).Value = _
    Sheets("Formulaire Utilisateur").txtDatesAjout.Value
    
    Sheets("Modules Transversaux").Cells(i, 3).Value = _
    Sheets("Formulaire Utilisateur").txtConsAjout.Value
    
    Sheets("Modules Transversaux").Cells(i, 5).Value = _
    Sheets("Formulaire Utilisateur").txtSalleAjout.Value

'remplace les espaces de la colones dates par des retour a la ligne
Sheets("Modules Transversaux").Columns(4).Replace " ", Chr(10)
  End If
Next i


Je sais pas si t'as compris, mais je vois pas comment expliquer ca et je suis a court d'idées :\ donc si tu peux me guider ^^
Je demande si on peut mettre la boucle dans la condition du if mais si tu vois une autre solution mieux je veux bien^^
0
cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
31 mai 2011 à 12:08
Salut,

comme ucfoutu j'ai la même interprétation de ta demande.
Et je pense que personne ne pourra tirer un quelconque sens de l'exemple que tu mets dans ton premier message (cf. "un truc du genre"). if quoi ? On voit bien la boucle (de 3 à n), mais aucune notion de condition. Qu'imagines-tu que pourrait renvoyer ta boucle for comme critère de condition ?
0
Tokki Messages postés 18 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 8 juin 2011
31 mai 2011 à 12:25
En fait j'aimerais que tant que le programme ne trouve pas la bonne ligne il continue de chercher, je m'y prends surement très mal mais bon><

Je m'explique, J'ai une page excel avec un tableau qui contient des noms et des dates.

Pour un nom il peut y avoir plusieurs dates, elles sont dans des cellules différentes Genre
En D3,D4 on peut trouver 2 dates qui appartiennent a une seule personne je les ai identifié Par un code (Date 1, Date 2)
Et ca pour chaques dates.
Cette personne est en B3,B4 qui sont fusionnées

J'aimerais qu'a partir d'un formulaire qui est sur une autre page on puisse atteindre une date en fonction du code que j'ai donné avant(date 1 ou date 2) qui est enregistré dans une liste déroulante

Pour le moment ca marche mais que pour date 1.
le programme qui fait ca se situe dans mon 2ème post.

Voila la partie du code qui me pause problème:

ElseIf Sheets("Modules Transversaux").Cells(i, 1) = _
  Sheets("Formulaire Utilisateur").cboPPP.Value And Sheets("Modules Transversaux").Cells(i, 2) = _
  Sheets("Formulaire Utilisateur").cboNomModAjout.Value And _

'ici j'aimerais faire une boucle sur j 
Sheets("Modules Transversaux").Cells(j, 7) = _
  Sheets("Formulaire Utilisateur").cboChoixDates.Value 
'et la fermer la
Then


J'éspère avoir bien expliqué mon problème :s c'est pas évident :\
Et j'éspère que vous aurez une solution a mon problème :s
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
31 mai 2011 à 12:37
Je sais pas si t'as compris, mais je vois pas comment expliquer ca et je suis a court d'idées :\ donc si tu peux me guider ^^

1) première condition pour développer : avoir les idées claires et les exprimer clairempent (désolé de te le rappeler)
2) n'attends pas de nous que nous dépensions notre temps à tenter de savoir ce que tu cherches à faire à travers un code "jeté" ainsi à l'analyse ! Exprime ce que tu veux, en français (facile) ou en algo (comme tu veux, mais pas comme tu le fais ... nous ne sommes pas là pour ça !)
A vce stade et compte tenu de certains aspects que je viens de dénoncer, je vais TRES VOLONTAIREMENT m'arrêter à ce que tu as dit ici :
j'aimerais que tant que le programme ne trouve pas la bonne ligne il continue de chercher

sans même lire le reste.
Et me contenter de répondre ceci :
Une boucle For ... Next peut être quittée par un Exit For. A toi de comprendre. Jed te laisse ici, en ce qui me concerne, car tout cela reste très élémentaire.
Utilise donc ton aide en ligne, s'il te plait.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
4u4me4us Messages postés 780 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
31 mai 2011 à 13:10
Si j'ai bien compris ce que tu demandes change ton code de la façon suivante
i = 3 
while Sheets("Modules Spécialisés").Range("D65536").End(xlUp).Row <> ""
  'Pour les modules Spécialisés
  If Sheets("Modules Spécialisés").Cells(i, 1) = Sheets("Formulaire Utilisateur").cboPPP.Value _
  And Sheets("Modules Spécialisés").Cells(i, 2) = Sheets("Formulaire Utilisateur").cboNomModAjout.Value _
  Then
    Sheets("Modules Spécialisés").Cells(i, 4).Value = _
    Sheets("Formulaire Utilisateur").txtDatesAjout.Value
    
    Sheets("Modules Spécialisés").Cells(i, 3).Value = _
    Sheets("Formulaire Utilisateur").txtConsAjout.Value
    
    Sheets("Modules Spécialisés").Cells(i, 5).Value = _
    Sheets("Formulaire Utilisateur").txtSalleAjout.Value

'remplace les espaces de la colones dates par des retour a la ligne
Sheets("Modules Spécialisés").Columns(4).Replace " ", Chr(10)
  'Pour les modules Transversaux
  ElseIf Sheets("Modules Transversaux").Cells(i, 1) = _
  Sheets("Formulaire Utilisateur").cboPPP.Value And Sheets("Modules Transversaux").Cells(i, 2) = _
  Sheets("Formulaire Utilisateur").cboNomModAjout.Value And _

'ici j'aimerais faire une boucle sur j 
Sheets("Modules Transversaux").Cells(j, 7) = _
  Sheets("Formulaire Utilisateur").cboChoixDates.Value 
'et la fermer la

Then
  
    Sheets("Modules Transversaux").Cells(i, 4).Value = _
    Sheets("Formulaire Utilisateur").txtDatesAjout.Value
    
    Sheets("Modules Transversaux").Cells(i, 3).Value = _
    Sheets("Formulaire Utilisateur").txtConsAjout.Value
    
    Sheets("Modules Transversaux").Cells(i, 5).Value = _
    Sheets("Formulaire Utilisateur").txtSalleAjout.Value

'remplace les espaces de la colones dates par des retour a la ligne
Sheets("Modules Transversaux").Columns(4).Replace " ", Chr(10)
  End If
i = i +1
wend

while Sheets("Modules Spécialisés").Range("D65536").End(xlUp).Row <> "" Je ne sais pas si c juste.

Soit Sheets("Modules Spécialisés").Range("D65536").End(xlUp).Row retourne un string donc c juste
ou Sheets("Modules Spécialisés").Range("D65536").End(xlUp).Row retourne un true ou false donc
while not Sheets("Modules Spécialisés").Range("D65536").End(xlUp).Row

Bref il faut que tu corrige le while en fonction de la valeur de retour de Sheets("Modules Spécialisés").Range("D65536").End(xlUp).Row et tout devrais fonctionner.
0
Tokki Messages postés 18 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 8 juin 2011
31 mai 2011 à 14:49
Désolé pour mes idées un peu en désordre ucfoutu mais c'est toujours ca avec moi, je vois de quoi je parle dans ma tete, mais après c'est pas facile de tout ressortir clairement.
Et deuxièmement je sais que c'est un problème basique mais je me suis bloqué dessus c'est pour ca que j'ai demandé de l'aide..
Mon problème n'étais pas la, j'ai contourné tout ca et au final je vois bien que j'allais dans la mauvaise direction(dur de tout voir clairement le matin><).

Merci 4u4me4us pour ta réponse, mais ta solution ne fonctionnait pas.

Donc voila mon code si sa peut servir a quelqu'un un jour.

Dim i As Integer
Dim j As Integer
Dim a As Integer

'test sur le formulaire d'ajout d'un module
If Sheets("Formulaire Utilisateur").cboPPP.Value = "" Then
  MsgBox ("Séléctionner le PPP")
ElseIf Sheets("Formulaire Utilisateur").cboNomModAjout.Value = "" Then
   MsgBox ("Séléctionner le Module")
ElseIf Sheets("Formulaire Utilisateur").txtDatesAjout.Value = "" Then
  MsgBox ("Veuillez entrez la/les date(s) du module")
ElseIf Sheets("Formulaire Utilisateur").txtConsAjout.Value = "" Then
  MsgBox ("Veuillez entrez le nom du conseiller du module")
ElseIf Sheets("Formulaire Utilisateur").txtSalleAjout.Value = "" Then
  MsgBox ("Veuillez entrez le nom de la salle")
End If

a = 1
'si tout se passe bien enregistre les données tapés dans l'ajout de module
'en fonction du PPP choisi
For i = 3 To Sheets("Modules Spécialisés").Range("D65536").End(xlUp).Row
  'Pour les modules Spécialisés
    If Sheets("Modules Spécialisés").Cells(i, 1) = Sheets("Formulaire Utilisateur").cboPPP.Value _
    And Sheets("Modules Spécialisés").Cells(i, 2) = Sheets("Formulaire Utilisateur").cboNomModAjout.Value _
    Then
        Sheets("Modules Spécialisés").Cells(i, 4).Value = _
        Sheets("Formulaire Utilisateur").txtDatesAjout.Value
        Sheets("Modules Spécialisés").Cells(i, 3).Value = _
        Sheets("Formulaire Utilisateur").txtConsAjout.Value
        Sheets("Modules Spécialisés").Cells(i, 5).Value = _
        Sheets("Formulaire Utilisateur").txtSalleAjout.Value
   
  'Pour les modules Transversaux
    ElseIf Sheets("Modules Transversaux").Cells(i, 1) = Sheets("Formulaire Utilisateur").cboPPP.Value _
    And Sheets("Modules Transversaux").Cells(i, 2) = Sheets("Formulaire Utilisateur").cboNomModAjout.Value _
    Then
        Select Case Sheets("Formulaire Utilisateur").cboChoixDates.Value
            'Pour Date 1
            Case "Date " & a
                i = i
            'Pour Date 2
            Case "Date " & a + 1
                i = i + 1
            'Pour Date 3
            Case "Date " & a + 2
                i = i + 2
        End Select
        
        Sheets("Modules Transversaux").Cells(i, 4).Value = _
        Sheets("Formulaire Utilisateur").txtDatesAjout.Value
        Sheets("Modules Transversaux").Cells(i, 3).Value = _
        Sheets("Formulaire Utilisateur").txtConsAjout.Value
        Sheets("Modules Transversaux").Cells(i, 5).Value = _
        Sheets("Formulaire Utilisateur").txtSalleAjout.Value
    
    End If
Next i


Et merci d'avoir passer du temps pour moi.

Bonne journée a vous
0
Rejoignez-nous