Erreur de compilation : Argument ByRef incompatible
11 réponses
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
----
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
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
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