Probleme VBA avec une fonction
Bonjour à tous,
voilà, j'ai créé une petite fonction qui me permet de tester les fichiers associé à mon document Excel.
Elle test si le Pathname est vide ou indique un FALSE, si un indicateur PSW est bien contenu dans le nom du fichier, et surtout et là le bas blesse, si leDir(Pathname) est vide ou existant: c'est alors que systématiquement il déclare mon Dir() inexistant alors que le fichier existe bien.
Quelqu'un voit t'il une erreur dans mon code?
Merci d'avance de votre aide.
Function testParametresFichiers(chemin, PSW)
Dim test1, test2, test3 As Byte
'Test présence d'un document"
If chemin = "" Or chemin = False Then
MsgBox "Veuillez sélectionner un fichier pour : " & PSW, vbInformation, "Cher professionnel"
test1 = 0
'Test de correspondance entre indicateur et nom de fichier
ElseIf InStr(chemin, PSW) = 0 Then
MsgBox "Les initiales du professionnel " & PSW & " et le nom de son fichier ne se correspondent pas. Veuillez vérifier l'un ou l'autre.", vbCritical
test2 = 0
'Test d'existence du fichier
ElseIf Dir(chemin) = "" Then
MsgBox "Fichier invalide. Veuillez sélectionner un fichier valide pour : " & PSW, vbCritical
test3 = 0
End If
If test1 = 0 Or test2 = 0 Or test3 = 0 Then 'Si l'un des trois test échoue
testParametresFichiers = 0 'la fonction renvoie zéro
Else 'sinon
testParametresFichiers = 1 'elle renvoie 1
End If
End FunctionEdit Dan : modifié titre du sujet
Bonjour,
Normalement, une fonction retourne une valeur ou un tableau de valeurs donc pas de message ou autre comme action. Je verrai plutôt la fonction comme ceci :
Function testParametresFichiers(chemin, PSW) As String
'Test présence d'un document"
If chemin = "" Or chemin = False Then
testParametresFichiers = "Paramètre fichier absent"
Exit Function
End If
'Test de correspondance entre indicateur et nom de fichier
If InStr(chemin, PSW) = 0 Then
testParametresFichiers = "Initiales invalides"
Exit Function
End If
'Test d'existence du fichier
If Dir(chemin) = "" Then
testParametresFichiers = "Fichier introuvable"
Exit Function
End If
testParametresFichiers = "Fichier existant"
End FunctionSalut Theophile
Perso, ta méthode de développement ne me gène pas, chacun ses besoins, il ne faut pas les changer.
Je pense savoir ou se pose le problème, c'est sur la chaine de ton chemin qui doit impérativement finir par un anti-slash
Voici ton code corrigé et qui fonctionne
Function TestParametresFichiers(chemin, PSW)
Dim test1, test2, test3 As Byte
' Vérifier si chemin à un anti-slash à la fin pour le DIR
If Right(chemin, 1) <> "\" Then chemin = chemin & "\"
'Test présence d'un document"
If chemin = "" Or chemin = False Then
MsgBox "Veuillez sélectionner un fichier pour : " & PSW, vbInformation, "Cher professionnel"
test1 = 0
'Test de correspondance entre indicateur et nom de fichier
ElseIf InStr(chemin, PSW) = 0 Then
MsgBox "Les initiales du professionnel " & PSW & " et le nom de son fichier ne se correspondent pas. Veuillez vérifier l'un ou l'autre.", vbCritical
test2 = 0
'Test d'existence du fichier
ElseIf Dir(chemin) = "" Then
MsgBox "Fichier invalide. Veuillez sélectionner un fichier valide pour : " & PSW, vbCritical
test3 = 0
End If
If test1 = 0 Or test2 = 0 Or test3 = 0 Then 'Si l'un des trois test échoue
TestParametresFichiers = 0 'la fonction renvoie zéro
Else 'sinon
TestParametresFichiers = 1 'elle renvoie 1
End If
End FunctionA+