IF/Then dans un For Each / Exit For - Plusieurs résultats
Bonjour à tous,
J'ai un soucis dans un code qui recherche des noms de sous-dossiers pour y récupérer des informations:
J'ai trois noms de sous-dossier possibles:
1 - Réponse 1 - xx-xx-xxxx / 1 - Réponse 1 - 20-12-2022 / 1 - Décliné - 20-12-2022
Le but est de faire en premier check des dossiers qui ont une date et récupérer cette date. Jusque là pas de soucis. Puis on m'a demandé en second d'ajouter un "décliné", et la je cherche a récupérer la date + le fait qu'il soit décliné. J'ai donc fait mon Right(SousDossier.Name, 10) qui récupère la date et je voulais ajouter un And avec un ValeurTest qui me permet dans un autre Sub d'aller mettre un "Décliné" dans une case mais cela ne fonctionne pas.
J'ai essayé aussi de les mettre sur deux lignes différentes mais avec le Exit for cela me créé une erreur disant qu'il y a un next sans for...
For Each SousDossier In DossierSource.SubFolders
If Right(SousDossier.Name, 10) = "xx-xx-xxxx" Then Exit For
If Left(SousDossier.Name, 13) = T6_Révision + 1 & " - Réponse " & T6_Révision + 1 Then Retour = Right(SousDossier.Name, 10): Exit For
If Left(SousDossier.Name, 11) = T6_Révision + 1 & " - Décliné" Then ValeurTest = 2 And Retour = Right(SousDossier.Name, 10): Exit For
Next SousDossier
Parcourir_Dossiers_Devis = RetourComment puis-je procéder pour récupérer les deux résultats tout en gardant le Exit for ?
Merci.
bonjour,
Si j'ai bien compris tu souhaites que ta fonction retour renvoie 2 informations différentes.
alors
une possibilité est de mettre ces 2 infos dans la réponse et les séparer par un caractère spécial ou par leur position. puis ensuite exploiter cette réponse en séparant les infos en fonction de la position ou du caractère spécial.
retour="xx-xx-xxxx,réponse" et on exploite le retour date=split(retour,",")(0):repdec=split(retour,",)(1)
un autre possibilité est d'utiliser une variable array
dim réponse(1): réponse(0)="xx-xx-xxxx":réponse(1)="Décliné": retour=réponse et on exploite le retour date=retour(0): repdec=retour(1)
2 possibilités parmi d'autres.
Hello,
Merci pour ton aide mais clairement j'avoue ne strictement rien comprendre à ton code...
Pour moi le "retour" ne renvoi qu'une information -> la date qui représente les 10 caractères en partant de la droite.
En gros dans mon code je dis:
- Si le dossier termine par xx-xx-xxxx je quitte la fonction For Each, sinon:
- Si le dossier commence par "1 - Réponse 1" alors je viens récupérer la date (10 derniers caractères en partant de la droite) et je quitte la fonction For Each
et j'aimerai ajouter un sinon:
- Si le dossier commence par "1 - Décliné" alors je viens récupérer la date (10 derniers caractères en partant de la droite) et j'attribue le nombre 2 a ma variable ValeurTest puis je quitte la fonction For Each.
Cette variable ValeurTest = 2 me permet dans un autre Sub de remplir une case "décliné" avec une mise en forme.
bonjour,
désolé pour ces explications trop abstraites.
de plus n'ayant pas ton fichier ni ton code complet, je dois faire des suppositions... j'avoue que ton "valeur test" m'avait échappé, dans ce cas
If Left(SousDossier.Name, 11) = T6_Révision + 1 & " - Décliné" Then ValeurTest = 2:Retour = Right(SousDossier.Name, 10): Exit ForRe,
J'ai pas voulu mettre le fichier car c'est une grosse usine à gaz
Merci beaucoup ça fonctionne nickel
re,
Du coup ce dernier sert de et dans la fonction
non il s'agit du séparateur d'instructions sur une même ligne (que tu utilisais déjà pour mettre Exit For comme 2ème instruction après "retour=...".
Sur plusieurs lignes, ton code ressemblerait à ceci
If Left(SousDossier.Name, 11) = T6_Révision + 1 & " - Décliné" Then
ValeurTest = 2
Retour = Right(SousDossier.Name, 10)
Exit For
End IfHaaa ok, désolé je ne suis pas encore calé dans toutes ces différentes formulations, je fais plutôt dans le classique avec du ligne par ligne, le :Exit For j'ai dû le trouver quelque pas pour le réutiliser, je comprends donc pourquoi cela ne fonctionnait pas quand j'écrivais:
If Left(SousDossier.Name, 11) = T6_Révision + 1 & " - Décliné" Then
ValeurTest = 2
Retour = Right(SousDossier.Name, 10): Exit For
End IfGrand merci pour tes explication claires, et désolé de t'avoir dérangé pour quelque chose d'aussi bête... :(
re,
je comprends donc pourquoi cela ne fonctionnait pas quand j'écrivais:
If Left(SousDossier.Name, 11) = T6_Révision + 1 & " - Décliné" Then
ValeurTest = 2
Retour = Right(SousDossier.Name, 10): Exit For
End Ifceci devrait pourtant fonctionner,