XL 2016 RESOLU Erreur d'exécution 5 - Argument ou appel de procédure incorrect

jorge1201

XLDnaute Occasionnel
Bonjour le forum,
J'ai déterré un vieux code de mes archives dont j'ai perdu la trace de son auteur. Or, j'essaie de le faire fonctionner mais j'obtiens le message d'erreur cité en titre. Il s'agit d'une Fonction qui force la mise en majuscules et minuscules lors de la saisie dans un TextBox d'un formulaire (UserForm). Il est destiné à normaliser la saisie des adresses dans une base de données Contacts.

Description du problème :
Lors de la saisie des mots dans le TextBox3 du formulaire annexé, la Fonction FormatAdresse modifie le texte comme attendu. En cliquant sur le bouton <valider> du formulaire personnalisé (écriture sur la feuille), une fenêtre de Microsoft Visual Basic s'ouvre et indique le message d'erreur 5, Argument ou appel de procédure incorrect. En cliquant le bouton <Débogage> de la fenêtre, une ligne du code est surlignée en jaune. En cliquant encore sur le bouton <Réinitialiser> de l'éditeur vba, le texte saisi dans le TextBox3 est correctement transféré dans la feuille.

Ma question :
Peut-on supprimer ce message d'erreur? En recherchant une explication sur le net, j'ai constaté que les causes de cette erreur peuvent être multiples. Trop pour mes maigres connaissances.

La personne que s'intéresserait à ce problème, trouvera des explications détaillées en ouvrant l'extrait du projet annexé. D'ores et déjà, tous mes remerciements.
Jorge
 

Pièces jointes

  • FormatAdresse Chaine TextBox_V1.xlsm
    33.9 KB · Affichages: 9

jorge1201

XLDnaute Occasionnel
Forum, Dranreb,
Merci pour ta réponse.
J'ai essayé de déclarer Temp en tant que As Variant mais je reçois toujours le même message.

J'ai essayé également avec la ligne qui contient Null et Empty desactivée mais j'obtiens la même erreur.
 

jorge1201

XLDnaute Occasionnel
Voici ce qui apparaît avec l'utilisation des espions :
Watch : : UCase$ : <Expression non définie dans le contexte> : Empty : Module1.FormatAdresse
Watch : : Temp : <Hors du contexte> : Empty : Module1.FormatAdresse
Merci pour ton intérêt.
 

jorge1201

XLDnaute Occasionnel
Voici les résultats obtenus en débogage sur la ligne surlignée :
Watch : : Temp : "" : String : Module1.FormatAdresse
Watch : : UCase$ : <Expression non définie dans le contexte> : Empty : Module1.FormatAdresse
Watch : : Right$ : <Expression non définie dans le contexte> : Empty : Module1.FormatAdresse
Watch : : Longueur : 0 : Integer : Module1.FormatAdresse
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous :)

Quand vous validez via le bouton "Valider", vous :
  1. compléter la feuille de calcul
  2. puis vous affectez la chaine vide à TextBox3
En faisant cela vous exécutez la procédure Sub TextBox3_Change() et par la suite la procédure : FormatAdresse(Me.TextBox3)

Or me.Textbox3 étant la chaine vide de caractère, la longueur de textbox3 est 0.

Quand vous exécutez l'instruction : Right$(Temp, Longueur - 1)
Longueur -1 vaut -1 donc la fonction Right retourne une erreur.

Il faut dans votre procédure prévoir le cas ou Texbox3 est la chaine vide. Par exemple, en utilisant la fonction Mid() plus souple:
Temp = UCase$(Mid$(Temp, 1, 1)) & Mid(Temp, 2)
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Je suis un perdu avec votre réponse. Je ne sais pas trop quoi faire.
J'ai tout mis dans la réponse:

Remplacez l'instruction qui bogue:
VB:
Temp = UCase$(Mid$(Temp, 1, 1)) & Right$(Temp, Longueur - 1)

par :
VB:
Temp = UCase$(Mid$(Temp, 1, 1)) & Mid(Temp, 2)
Instruction qui ne fait plus intervenir la longueur de la chaine Temp.
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
203

Statistiques des forums

Discussions
315 093
Messages
2 116 132
Membres
112 667
dernier inscrit
foyoman