Type d'argument ByRef incompatible
Résolu/Fermé
Robix
-
20 avril 2020 à 09:32
yg_be Messages postés 23391 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 - 20 avril 2020 à 11:10
yg_be Messages postés 23391 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 - 20 avril 2020 à 11:10
A voir également:
- Vba type d'argument byref incompatible
- Clear type - Guide
- Type d'argument byref incompatible ✓ - Forum VB / VBA
- Changer le type de fichier - Guide
- Indiquez l'unité pour la taille de ces fichiers. type document texte brut taille 8,1 ?? première réponse à trouver longueur 8085 caractères type image jpeg taille 3,0 ?? deuxième réponse à trouver dimension 3776 × 2124 px type vidéo mpeg-4 taille 1,1 ?? troisième réponse à trouver durée 02:01:15 - Forum Google Chrome
- Call fonction avec arguments en vba ? ✓ - Forum VB / VBA
3 réponses
yg_be
Messages postés
23391
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
16 décembre 2024
Ambassadeur
1 556
Modifié le 20 avril 2020 à 09:43
Modifié le 20 avril 2020 à 09:43
bonjour, pour commencer, peux-tu utiliser les balises de code quand tu postes du code, et indiquer sur quelle ligne se produit le message d'erreur?
ensuite, si ce n'est pas encore fait, peux-tu ajouter
ensuite, nous montrer la réponse (MsgBox VarType()) pour chacune de ces variables?
tu as choisi, pour un des paramètres, de ne pas passer par une variable. as-tu essayé d'utiliser une variable pour ce paramètre?
ensuite, si ce n'est pas encore fait, peux-tu ajouter
option expliciten début de module?
ensuite, nous montrer la réponse (MsgBox VarType()) pour chacune de ces variables?
tu as choisi, pour un des paramètres, de ne pas passer par une variable. as-tu essayé d'utiliser une variable pour ce paramètre?
NHenry
Messages postés
15172
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 décembre 2024
350
20 avril 2020 à 09:49
20 avril 2020 à 09:49
A mon avis, cela vient de la valeur "frmcam1.ldmvt.Value" (typée Object, je pense)
Une bonne pratique est que si tu n'as pas besoin de modifier les valeurs passées en paramètre dans ta fonction est de préciser dans la déclaration ByVal :
Aussi, pense à donner des noms explicites à tes variables (p1 p2 t3 b0, ce n'est pas très claire)
Une bonne pratique est que si tu n'as pas besoin de modifier les valeurs passées en paramètre dans ta fonction est de préciser dans la déclaration ByVal :
Sub MaSub(ByVal Parameter1 As Double, ...)
Aussi, pense à donner des noms explicites à tes variables (p1 p2 t3 b0, ce n'est pas très claire)
J'ai refais quelques tests que j'ai expliqué dans une réponse plus haut...
Visiblement "frmcam1.ldmvt.Value" semblait coincer en effet...
Pour faire suite à ta remarque je me permets de te poser une question : Quelle serait la valeur de retour lors de l'utilisation de la fonction VarType dans le cas où la valeur serait typée Object?
Merci pour ces deux petites leçons de codage ;-)
Pour ce qui est des noms explicites, les utilisateurs de ce programme préfère rester avec ces noms... J'exécute les ordres!
Merci pour tout!
Visiblement "frmcam1.ldmvt.Value" semblait coincer en effet...
Pour faire suite à ta remarque je me permets de te poser une question : Quelle serait la valeur de retour lors de l'utilisation de la fonction VarType dans le cas où la valeur serait typée Object?
Merci pour ces deux petites leçons de codage ;-)
Pour ce qui est des noms explicites, les utilisateurs de ce programme préfère rester avec ces noms... J'exécute les ordres!
Merci pour tout!
20 avril 2020 à 10:53
Je viens de refaire quelques tests: En voulant y aller un peu en force j'ai, dans un premier temps, supprimé l'intégralité des types de mes variables dans ma fonction:
En procédant comme ça plus de problème, tout marche...
Ensuite...
En remettant les types respectifs de chaque variable et en insérant des MsgBox VarType un peu partout j'obtiens ce qui suit:
5 (B0)
5 (B1)
5 (B2)
5 (l)
8 (ldmvt)
5 (p2)
5 (p3)
5 (p4)
5 (p5)
5 (p6)
5 (p7)
5 (p8)
En mettant option explicit en début de module (ce que je n'avais pas fait), le message m'indique une erreur à la ligne 5 du code suivant :
Cette erreur indique que la variable n'est pas définie...
Pour terminer mon dernier test a été de refaire le code de la manière suivante :
J'ai volontairement renommé les variables par rapport à la réponse de la deuxième personne sur mon post ( = dans un soucis de clarté pour ceux qui vont l'utiliser).
ET LA... TOUT MARCHE!
Je reste perplexe sur l'origine : Peut-être que, comme tu avais l'air de le sous-entendre, l'erreur venait de ma volonté de ne pas affecter de variable à un de mes paramètres..
Merci pour le temps que tu m'as consacré! (Et merci pour le option explicit) que je ne connaissais pas...
20 avril 2020 à 11:03
20 avril 2020 à 11:10
il est préférable de ne pas utiliser les mêmes noms de variables dans la déclaration de la fonction et dans l'appel de la fonction.
il est préférable de ne pas laisser de flou sur le type de ce que tu utilises.
quand tu écris , tu ne contrôles pas son type.
si tu écris , ou
, tu es certain du type que tu obtiens.