VBA Word Problème de Bloc If [Résolu]

Signaler
Messages postés
12
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
29 septembre 2011
-
Messages postés
12
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
29 septembre 2011
-
Bonjour à tous,
Je suis Niveau 0- en VBA et si quelqu'un pouvait me tuyauter? Ca serait très sympa.
Voilà ce que j'essaye de faire:
Il m?intéresse de savoir si, dans la directory du fichier courant (directory faite de dossiers et de sous-dossiers dont le nombre est variable et n'importe pas), il y a tel ou tel répertoire de référence (RefDossier). Je voudrais récupérer le nom de ce répertoire de référence pour l'utiliser dans une macro.
Admettons qu'il y 4 RefDossier seulement (une directory ne contient que l'un ou l'autre de ces 4 répertoires)

Voilà la macro que j'ai conçue et qui ne fonctionne pas ! Erreur : pas de bloc If. Je dois commettre une faute très, très grossière. Voire plus!

Sub Essaidossier ()
'
Dim Chemin
Dim RefDossier(3) As String
RefDossier(0) = "Maison"
RefDossier(1) = "Jardin"
RefDossier(2) = "Rue"
RefDossier(3) = "Décoration"

Dim RepertRef As String
Chemin = ActiveDocument.Path

Dim i As Integer
For i 0 To i 3
If InStr(Chemin, RefDossier(i)) > 0 Then RepertRef = RefDossiers(i)
Else
Next i
End If
Exit For

MsgBox (RepertRef)
End Sub
Merci beaucoup pour votre réponse à cette question qui est la toute première peut-être d'une + ou - longue série. VBA, ce n'est pas facile!

12 réponses

Messages postés
14785
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 avril 2021
154
Bonjour,

Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés.

---------------------------------------------------------------------
Mon site
Messages postés
75
Date d'inscription
mercredi 17 août 2011
Statut
Membre
Dernière intervention
27 septembre 2011
2
Bonsoir,

Le 'Exit For' doit être placé dans la boucle du For.
Je suppose que si le répertoire est trouvé il faut sortir du For.

For i 0 To i 3
If InStr(Chemin, RefDossier(i)) > 0 Then RepertRef = RefDossiers(i)
Exit For
Else
Next i

End If

Didier
Messages postés
94
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
30 octobre 2011

Bonjour

Dans ton code, Next i n'est pas bien placé.
Dim i As Integer 
For i 0 To i 3 
If InStr(Chemin, RefDossier(i)) > 0 Then RepertRef = RefDossiers(i) 
Else 
Next i 
End If 
Exit For


Il faut le placer après End if.

Pour t'aider pense à utiliser la tabulation comme ceci:
Dim i As Integer 
For i 0 To i 3 
  If InStr(Chemin, RefDossier(i)) > 0 Then RepertRef = RefDossiers(i) 
  Else 
  End If 
Next i
Exit For
Messages postés
94
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
30 octobre 2011

Oui j avais pas vu le Exit For
Messages postés
14785
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 avril 2021
154
Bonjour,

Quand tu poste un code, pense à lire le point 2 de ma signature.

Sinon, ton code :
Dim i As Integer
For i 0 To i 3
    If InStr(Chemin, RefDossier(i)) > 0 Then RepertRef = RefDossiers(i)
    Else
Next i
    End If
    Exit For


Ton problème est un problème de syntaxe de base :
- On ne ferme les bloc que dans le même sens d'ouverture
- If (Condition) Then 'Tu as oublié le Then
- Le For, c'est For Variable=Source To Destination

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
94
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
30 octobre 2011

Donc code correct:
Dim i As Integer 
For i 0 To i 3 
  If InStr(Chemin, RefDossier(i)) > 0 Then RepertRef = RefDossiers(i) 
    Exit For  'ici   
  Else 
    Exit For  'ou ici
  End If 
Next i
Messages postés
94
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
30 octobre 2011

En espérant avoir supprimé toutes les erreurs cette fois ci

Dim i As Integer 
For i = 0 To 3 
  If InStr(Chemin, RefDossier(i)) > 0 Then 
    RepertRef = RefDossiers(i) 
    Exit For  'ici   
  Else 
    Exit For  'ou ici
  End If 
Next i
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
235
Bonjour,
1) Quelle est la nécessité de ce Else Exit For ? Il est même contreproductif !
2) je ne comprends d'ailleurs même pas la nécessité de passer par un tableau alors que la fonction Dir ferait seule merveille dans ce cas ! (ou alors quelque chose m'a échappé)



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
12
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
29 septembre 2011

Merci beaucoup à GG72,ucfoutu et NHenry.

L'utilisation
de Dir ne permet pas plus d'extraire l'un des noms de répertoires qui m'intéressent.

Effectivement,
Else
Exit For
aboutit à l'affichage d'une boîte de message vide.
J'ai supprimé ces 2 lignes et c'est parfait.
Le code est donc:

Sub Essaidossier ()
'
Dim Chemin
Dim RefDossier(3) As String
RefDossier(0) = "Maison"
RefDossier(1) = "Jardin"
RefDossier(2) = "Rue"
RefDossier(3) = "Décoration"

Dim RepertRef As String
Chemin = ActiveDocument.Path
Dim i As Integer
For i = 0 To 3
If InStr(Chemin, RefDossier(i)) > 0 Then
RepertRef = RefDossiers(i)
Exit For 'ici
End If
Next i

MsgBox (RepertRef)

End sub

Merci encore
Messages postés
94
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
30 octobre 2011

Bonjour,

aboutit à l'affichage d'une boîte de message vide.


Si tu veux éviter celà, il faut placer MsgBox (RepertRef) à l'intérieur de If ... End If, juste avant Exit For.

Et pour aller plus loin, tu peux remplacer:
RepertRef = RefDossiers(i) 
MsgBox (RepertRef)

par:
MsgBox (RefDossiers(i))

et supprimer:
Dim RepertRef As String


Cordialement.
Messages postés
12
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
29 septembre 2011

Encore mille mercis.
Bon week_end
Messages postés
12
Date d'inscription
samedi 10 septembre 2011
Statut
Membre
Dernière intervention
29 septembre 2011

C'est tout à fait vrai.
Merci+++
Bon WE.
Bien à toi