OVH Cloud OVH Cloud

Erreur de compilation : Argument ByRef incompatible

11 réponses
Avatar
philippe
Bonjour j'ai un problème a priori très simple qui tient à ma méconnaissance
de VBA.

La fonction ShortFileName ci-dessous produit l'erreur suivante :
Erreur de compilation : Argument ByRef incompatible
C'est le NbSlash de la ligne 3 qui pose problème

Function ShortFileName(PathedName As String)
NbSlash = CharOccurs(PathedName, "\")
PositionLastSlash = At(PathedName, "\", NbSlash)
LengthPathedName = Len(PathedName)
ShortFileName = Mid(PathedName, PositionLastSlash - 1, LengthPathedName -
PositionPathedName)
End Function

--- éléments de contexte :

La fonction ShortFileName extrait le nom du fichier du nom complet (avec le
chemin).
J'utilise pour cela deux autres fonctions :
CharOccurs qui me dit le nombre d'occurences d'un caractère dans un chaîne
et
At qui me donne la position de la nième occurence d'un caractètre

Function CharOccurs(chaine As String, cherche As String) As Integer
Function At(chaine As String, cherche As String, occurence As Integer) As
Integer
----

Merci de vos commentaires

1 réponse

1 2
Avatar
philippe
Effectivement,
je ne connaissais pas la fonction InStrRev en VBA.

Il me faudrait naturellement ajouter une boucle pour passer les différents
répertoires.

Ma fonction CharOccurs utilise une boucle avec mid pour regarder chaque
caractère de la chaîne. J'ai emprunté cette fonction à herve thouzard.
Je ne sais pas ce qui serait le plus efficace, mais bon, j'était pas parti
pour l'efficacité en réutilisant mes fonctions at et charoccurs, mais pour la
simplicité.

Merci,
Philippe


Bonjour,

La fonction ShortFileName extrait le nom du fichier du nom complet (avec
le
chemin).


Si j'ai bien compris, tu pourrais abréger un brin. C'est unbe sub, mais tu
peux en refaire une fonction au besoin)

Sub nomraccourci()
Dim nomlong As String, nomcourt As String
Dim laplace As Integer
nomlong = "C:Download61-008-XIF2005004.pdf"
laplace = InStrRev(nomlong, "")
nomcourt = Right(nomlong, Len(nomlong) - laplace - 1)
MsgBox nomcourt
End Sub







1 2