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 = Retour

Comment 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... P

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 For

Re,

J'ai pas voulu mettre le fichier car c'est une grosse usine à gaz mais pour le coup tu réponds exactement à ce que je cherchais. Ce sont les : qui me manquaient. j'avais essayé avec And, avec une virgule ou un point virgule mais pas le double point... Du coup ce dernier sert de et dans la fonction ? J'ai rien trouvé de particulier sur ça dans mes cours donc je suis un peu paumé.

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 If
Re,

Haaa 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 If

Grand 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 If

ceci devrait pourtant fonctionner, . Ceci me parait tout à fait correct.

Rechercher des sujets similaires à "then each exit resultats"