Erreur "type d'argument ByRef incompatible"

Bonjour à tous

Je me suis replongé dans un code qui fait plusieurs milliers de lignes, plusieurs modules,.... et j'ai repris le tout pour utiliser des variables objet de type worksheet.

si ma variable de type worksheet est déclarée dans la sub et que je fait un appel a une autre procédure en passant en paramètre mon objet, pas de soucis...

en revanche si ma variable est déclarée en variable globale, j'ai une erreur de "argument Byref incompatible",

je sais que cela peut paraître bizarre de passé en argument une variable globale, mais en fait j'ai besoin de savoir sur quelle feuille je doit faire une de protection, protection ou autre.... et donc j'ai besoin d'envoyer en paramètre la feuille sur laquelle je travail.... (et évidemment cela sera pas toujours la même en fonction de la partie du code qui s’exécute....)

donc ma question est, y a t-il moyen de passer en paramètre d'une fonction une var globale ??? pour éviter mon erreur ..

j'ai bien pensé à passer par l'index de la feuille, mais je trouve cela moins propre... mais si pas de solution je ferrais cela...

merci pour vos réponses

fred

18worksheet.xlsm (14.76 Ko)

Bonjour.

Sur ton fichier c'est sensé planter ?

Bonne journée.

bonjour Elhevan

Oulala ... je crois que je suis fatigué...

en effet mon fichier test ne fait plus l'erreur...

je vais revoir mon code dans le fichier d'origine j'ai du fait une bêtise quelque part...

je reviens au plus vite...

fred

Le problème a peur de moi, il n'ose pas se montrer.

re...

alors comment dire... je ne comprends pas.... j'ai toujours mon erreur de byref incompatible....

j'ai réduit mon fichier de travail au strict minimum... en pièce jointe... il doit y avoir quelque chose qui m’échappe....

si quelqu'un peu jeter un oeil....

merci

fred


EDIT :

je viens de trouver...... c'est au niveau de la déclaration des variables publics....

comme j'ai plusieurs variables a déclarer j'ai fait ceci :

Public WsL, Wsctx, WsB, WsCpt As Worksheet 'variable objet de type Worksheet navigation dans le fichier

et donc cela plante... erreur de byref.....

mais si je fait

Public WsL As Worksheet 

c'est bon cela marche....

chercher l'erreur....

merci

fred

22forum.xlsm (33.72 Ko)

Sinon tu peux aussi passer tes variables par valeur (Sub unprotect_sheet(ByVal s As Worksheet) & Sub protect_sheet(ByVal s As Worksheet) ) vu que tu ne les modifies pas.

pourrais tu détailler cette histoire de de byval ??

je connais pas cette syntaxe de déclaration...

fred

Si c'est comme en C++ (j'ai appris le VBA sur le tas, mais normalement tous les langages ont le même fonctionnement de ce point de vue) on peut passer une variable en référence ou en valeur.

Si j'ai

i = 2

f(i)

msgbox "i =" i

avec f(byref x){ (c'est byref de base c'ets pour ça qu'on l'écrit rarement)

x = x +1

msgbox "x=" x

}

Ca va m'afficher

x = 3

i = 3

Maintenant si j'ai

avec f(byval x){

x = x +1

msgbox "x=" x

}

Ca va m'afficher

x = 3

i = 2

Donc quand on n'a pas envie de modifier la valeur hors de la fonction byval c'est très bien et ça évite de tout casser

merci pour ces infos....

j'ai trouvé l'info là :

https://www.excel-pratique.com/fr/vba/procedures_fonctions.php

fred

Oui, j'ai re édité mon message pour revenir à son état d'origine, je m'étais mélangé dans les x et les i dans mon test sur Excel, je faisais

Function fonction(ByRef x As Integer)

x = x + 1

fonction = i

Et je me demandais pourquoi je renvoyais toujours i et pas x

Rechercher des sujets similaires à "erreur type argument byref incompatible"