VBA Word Problème de Bloc If

Résolu
Colquico7duSoir Messages postés 12 Date d'inscription samedi 10 septembre 2011 Statut Membre Dernière intervention 29 septembre 2011 - 16 sept. 2011 à 18:15
Colquico7duSoir Messages postés 12 Date d'inscription samedi 10 septembre 2011 Statut Membre Dernière intervention 29 septembre 2011 - 17 sept. 2011 à 16:52
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

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
17 sept. 2011 à 14:34
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
3
marion8316 Messages postés 75 Date d'inscription mercredi 17 août 2011 Statut Membre Dernière intervention 27 septembre 2011 1
16 sept. 2011 à 18:47
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
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
16 sept. 2011 à 18:49
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
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
16 sept. 2011 à 18:50
Oui j avais pas vu le Exit For
0

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

Posez votre question
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
16 sept. 2011 à 18:53
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
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
16 sept. 2011 à 18:54
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
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
16 sept. 2011 à 18:57
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 sept. 2011 à 19:18
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
0
Colquico7duSoir Messages postés 12 Date d'inscription samedi 10 septembre 2011 Statut Membre Dernière intervention 29 septembre 2011
17 sept. 2011 à 08:48
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
0
cs_GG72 Messages postés 94 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 30 octobre 2011
17 sept. 2011 à 10:19
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.
0
Colquico7duSoir Messages postés 12 Date d'inscription samedi 10 septembre 2011 Statut Membre Dernière intervention 29 septembre 2011
17 sept. 2011 à 10:59
Encore mille mercis.
Bon week_end
0
Colquico7duSoir Messages postés 12 Date d'inscription samedi 10 septembre 2011 Statut Membre Dernière intervention 29 septembre 2011
17 sept. 2011 à 16:52
C'est tout à fait vrai.
Merci+++
Bon WE.
Bien à toi
0
Rejoignez-nous