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

10 réponses

1 2
Avatar
lSteph
Bonjour,

A priori cela semble correct au niveau des types
Peut-être vérfier quel est argument passé à ShortFileName pour Pathedname?
(car pourquoi error byref , in fine un byval ou le contenu devrait être
string)
ex : "C:totoretotomyrep"

lSteph

"philippe" a écrit dans le message de
news:
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


Avatar
docm
Bonjour philippe.

Function ShortFileName(PathedName As String)
'Il faut déclarer NbSlash ainsi :
Dim NbSlash As Integer

car le paramètre occurence de la fonction AT attend une variable de type
Integer :
Function At(chaine As String, cherche As String, occurence As Integer) As
Integer

docm

"philippe" wrote in message
news:
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


Avatar
lSteph
Bonsoir Docm,

Suis-je dans l'erreur?
CharOccurs renvoie déjà un integer:
Function CharOccurs(chaine As String, cherche As String) As Integer
...
NbSlash = CharOccurs(PathedName, "")

ou le fait de n'avoir pas typé NbSlash en fait il implicitement un Variant?

lSteph
"docm" a écrit dans le message de news:
uxzMq%
Bonjour philippe.

Function ShortFileName(PathedName As String)
'Il faut déclarer NbSlash ainsi :
Dim NbSlash As Integer

car le paramètre occurence de la fonction AT attend une variable de type
Integer :
Function At(chaine As String, cherche As String, occurence As Integer) As
Integer

docm

"philippe" wrote in message
news:
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






Avatar
docm
Voici un extrait de l'aide à la rubrique Déclaration de variables:
"Vous pouvez déclarer implicitement une variable dans Visual Basic avec une
simple instruction d'affectation. Toutes les variables ainsi déclarées sont
de type Variant."

Amicalement

docm

"lSteph" wrote in message
news:
Bonsoir Docm,

Suis-je dans l'erreur?
CharOccurs renvoie déjà un integer:
Function CharOccurs(chaine As String, cherche As String) As Integer
...
NbSlash = CharOccurs(PathedName, "")

ou le fait de n'avoir pas typé NbSlash en fait il implicitement un
Variant?


lSteph
"docm" a écrit dans le message de news:
uxzMq%
Bonjour philippe.

Function ShortFileName(PathedName As String)
'Il faut déclarer NbSlash ainsi :
Dim NbSlash As Integer

car le paramètre occurence de la fonction AT attend une variable de type
Integer :
Function At(chaine As String, cherche As String, occurence As Integer)
As


Integer

docm

"philippe" wrote in message
news:
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










Avatar
lSteph
Oui , c'est bien pour cela que je parle de Variant,
mais ma question plus précisément visait le fait que
NbSlash = CharOccurs(PathedName, "")
NbSlash non déclaré (donc par défaut variant) acquiert
CharOccurs(PathedName, "")
qui lui même est bien déclaré de type integer et (donc pensai-je ) ne
devrait pas poser de problème.
Donc tu confirmes que ce même fait (NbSlash = ...) convertit l'integer issu
de CharOccurs en Variant

lSteph

"docm" a écrit dans le message de news:

Voici un extrait de l'aide à la rubrique Déclaration de variables:
"Vous pouvez déclarer implicitement une variable dans Visual Basic avec
une
simple instruction d'affectation. Toutes les variables ainsi déclarées
sont
de type Variant."

Amicalement

docm

"lSteph" wrote in message
news:
Bonsoir Docm,

Suis-je dans l'erreur?
CharOccurs renvoie déjà un integer:
Function CharOccurs(chaine As String, cherche As String) As Integer
...
NbSlash = CharOccurs(PathedName, "")

ou le fait de n'avoir pas typé NbSlash en fait il implicitement un
Variant?


lSteph
"docm" a écrit dans le message de news:
uxzMq%
Bonjour philippe.

Function ShortFileName(PathedName As String)
'Il faut déclarer NbSlash ainsi :
Dim NbSlash As Integer

car le paramètre occurence de la fonction AT attend une variable de
type
Integer :
Function At(chaine As String, cherche As String, occurence As Integer)
As


Integer

docm

"philippe" wrote in message
news:
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














Avatar
docm
Exact. Le fait d'affecter un Integer à une variable nom déclarée ne fait pas
de cette dernière une variable de type Integer.
Une variable non déclarée adopte le type Variant et conserve ce type quoi
qu'il arrive.

docm

"lSteph" wrote in message
news:
Oui , c'est bien pour cela que je parle de Variant,
mais ma question plus précisément visait le fait que
NbSlash = CharOccurs(PathedName, "")
NbSlash non déclaré (donc par défaut variant) acquiert
CharOccurs(PathedName, "")
qui lui même est bien déclaré de type integer et (donc pensai-je ) ne
devrait pas poser de problème.
Donc tu confirmes que ce même fait (NbSlash = ...) convertit l'integer
issu

de CharOccurs en Variant

lSteph

"docm" a écrit dans le message de news:

Voici un extrait de l'aide à la rubrique Déclaration de variables:
"Vous pouvez déclarer implicitement une variable dans Visual Basic avec
une
simple instruction d'affectation. Toutes les variables ainsi déclarées
sont
de type Variant."

Amicalement

docm

"lSteph" wrote in message
news:
Bonsoir Docm,

Suis-je dans l'erreur?
CharOccurs renvoie déjà un integer:
Function CharOccurs(chaine As String, cherche As String) As Integer
...
NbSlash = CharOccurs(PathedName, "")

ou le fait de n'avoir pas typé NbSlash en fait il implicitement un
Variant?


lSteph
"docm" a écrit dans le message de news:
uxzMq%
Bonjour philippe.

Function ShortFileName(PathedName As String)
'Il faut déclarer NbSlash ainsi :
Dim NbSlash As Integer

car le paramètre occurence de la fonction AT attend une variable de
type
Integer :
Function At(chaine As String, cherche As String, occurence As
Integer)




As
Integer

docm

"philippe" wrote in message
news:
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


















Avatar
lSteph
;-)
Merci!

"docm" a écrit dans le message de news:
%
Exact. Le fait d'affecter un Integer à une variable nom déclarée ne fait
pas
de cette dernière une variable de type Integer.
Une variable non déclarée adopte le type Variant et conserve ce type quoi
qu'il arrive.

docm

"lSteph" wrote in message
news:
Oui , c'est bien pour cela que je parle de Variant,
mais ma question plus précisément visait le fait que
NbSlash = CharOccurs(PathedName, "")
NbSlash non déclaré (donc par défaut variant) acquiert
CharOccurs(PathedName, "")
qui lui même est bien déclaré de type integer et (donc pensai-je ) ne
devrait pas poser de problème.
Donc tu confirmes que ce même fait (NbSlash = ...) convertit l'integer
issu

de CharOccurs en Variant

lSteph

"docm" a écrit dans le message de news:

Voici un extrait de l'aide à la rubrique Déclaration de variables:
"Vous pouvez déclarer implicitement une variable dans Visual Basic avec
une
simple instruction d'affectation. Toutes les variables ainsi déclarées
sont
de type Variant."

Amicalement

docm

"lSteph" wrote in message
news:
Bonsoir Docm,

Suis-je dans l'erreur?
CharOccurs renvoie déjà un integer:
Function CharOccurs(chaine As String, cherche As String) As Integer
...
NbSlash = CharOccurs(PathedName, "")

ou le fait de n'avoir pas typé NbSlash en fait il implicitement un
Variant?


lSteph
"docm" a écrit dans le message de news:
uxzMq%
Bonjour philippe.

Function ShortFileName(PathedName As String)
'Il faut déclarer NbSlash ainsi :
Dim NbSlash As Integer

car le paramètre occurence de la fonction AT attend une variable de
type
Integer :
Function At(chaine As String, cherche As String, occurence As
Integer)




As
Integer

docm

"philippe" wrote in message
news:
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






















Avatar
Clément Marcotte
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

Avatar
Clément Marcotte
Bonjour,

Juste pour le fun. J'ai commencé à "jouer" avec mon Visual Basic 2005
Express Edition" et cela m'a tout l'air que dans une ligne de ce genre:

dim i,j,k as integer

On ramasse 3 Integer et non 1 Integer et 2 variant. Donc, attention aux
migrations éventuelles de programmes VB6 - VBA vers VB 2005.
Avatar
philippe
Merci à vous,
effectivement il suffisait de déclarer NbSlash

Philippe


Bonjour,

Juste pour le fun. J'ai commencé à "jouer" avec mon Visual Basic 2005
Express Edition" et cela m'a tout l'air que dans une ligne de ce genre:

dim i,j,k as integer

On ramasse 3 Integer et non 1 Integer et 2 variant. Donc, attention aux
migrations éventuelles de programmes VB6 - VBA vers VB 2005.





1 2