Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Incompréhension de l'erreur type mismatch du code VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

elgringo123456

XLDnaute Occasionnel
Supporter XLD
Bonjour,

Je vous sollicite uen fois de plus sur le code VBA ci-joint. J'execute la procédure toto() avec l'option explicit.

Dans le VBE lors de l'execution ce-dernier m'indique que j'ai mal "typé" la variable "PathFichierModeles" qui réalise l'ouverture d'un fichier.

Comment dois-je déclarer PathFichierModeles ?

Par ailleurs je fais appel à une fonction d'extraction de chemin. Je ne comprends pas pourquoi le type de données est encore mal déclarés.

De plus, je pense que l'erreur provient de l'appel de la fonction et plus particulirement du besoin de copier la variable. En effet, en réalisant une copie de la variable (PathFichierModeles1 = PathFichierModeles), je n'ai plus d'erreur. Pour quelles raisons ?

Y-a-t-il d'autrea erreura ailleurs ?

Encore désolé de ces questions de néophytes.
Cordialement.
EL Gringo 123456
 

Pièces jointes

Re : Incompréhension de l'erreur type mismatch du code VBA

bonjour

pas sur d'avoir compris

ton code :

Code:
Sub toto()

    Dim PathFichierModeles As Workbook

' fichier modele etant un objet, tu ne peux l'affecter qu'avec un Set
' De plus , l'odre d'ouverture d'un fichier excel, implique que c'est un objet
    Set PathFichierModeles = Application.GetOpenFilename("Fichier Excel, *.xls")
    Workbooks.OpenText Filename:=PathFichierModeles
    PathFichierModeles1 = PathFichierModeles.FullName
    PathFinals = ExtractPathName(PathFichierModeles1)

End Sub
 
Re : Incompréhension de l'erreur type mismatch du code VBA

Bonjour elgringo123456, wilfried_42,

Non Wilfried, la réponse à la méthode GetOpenFilename ne renvoie en aucun cas un objet, mais un variant qui peut être typé String ou Boolean. Elle renverra False si l'utilisateur a cliqué sur le bouton Annuler ou le chemin du fichier si l'utilisateur a choisi un fichier.

elgringo123456 :

  • les modules de code de type Private comme les modules de code des feuilles ainsi que ThisWorkbook, sont normalement réservés aux procédures évènementielles. Tu devrais normalement créer tes macros et fonctions personnalisées dans un module de code Standard (ex : Module1).
  • si tu souhaitais déclarer tes 3 variables en type String, il convenait d'écrire :
    Code:
    [COLOR=NAVY]Dim[/COLOR] PathFinals [COLOR=NAVY]As String[/COLOR], PathFichierModeles [COLOR=NAVY]As String[/COLOR], PathFichierModeles1 [COLOR=NAVY]As String[/COLOR]
    Cela dit, comme je l'explique ci-dessus, PathFichierModeles doit être déclarée variant car elle peut recevoir une valeur boolean ou une valeur chaine de caractères (string).
  • je n'ai pas compris si l'ouverture du classeur XLS par OpenText est volontaire ou non.
  • Ta function ExtractPathName() semble inutile ici puisque tu obtiendras le chemin du classeur en utilisant simplement sa propriété Path.
Je te proposerais pour ma part le code ci-dessous :
Code:
[COLOR=GRAY][B][I]DANS UN MODULE DE CODE STANDARD[/I][/B][/COLOR]

[COLOR=NAVY]Sub[/COLOR] toto()
[COLOR=NAVY]Dim[/COLOR] PathFinals [COLOR=NAVY]As String[/COLOR], PathFichierModeles [COLOR=NAVY]As Variant[/COLOR]

    PathFichierModeles = Application.GetOpenFilename("Fichier Excel, *.xls")
    [COLOR=NAVY]If[/COLOR] PathFichierModeles <> [COLOR=NAVY]False Then[/COLOR]
        Workbooks.OpenText Filename:=PathFichierModeles
        PathFinals = ActiveWorkbook.Path & Application.PathSeparator
    [COLOR=NAVY]End If
End Sub[/COLOR]
Cordialement,
 
Dernière édition:
Re : Incompréhension de l'erreur type mismatch du code VBA

Bonjour à tous,

Merci beaucoup de ces explications. Je l'utilise dés à présent.

1000 merci. Je suis et continue d'être un super supporter d'XLD.

Encore désolé pour ces questions de Néophytes.
En ce qui concerne la fonction OpenText n'est pas la bonne fonction => Je te confirme que tu as totalement raison (j'utilise désormais Open).
En ce qui concerne la fonction d'extraction, elle reste inutile suite à tes conseils.

Encore merçi de m'avoir aidé,

Cordialement.
ElGringo123456
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…