Procédure ayant une feuille en paramètre

  • Initiateur de la discussion Charles
  • Date de début
C

Charles

Guest
Bonjour tout le monde,

J'ai une procédure qui attend une feuille en argument.
Quand je veux appeler ma procédure en faisant
Call Procédure(Nom de la feuille que je veux)
ça ne marche pas, comment faire ?

En espérant que l'exemple aide à comprendre :

Sub Macro

Dim feuil1, feuil2 as Worksheet
Set feuil1 = ThisWorkbook.Worksheets ("feuil1")
Set feuil2 = ThisWorkbook.Worksheets ("feuil2")

Call Procedure (feuil1) --> NE MARCHE PAS
End Sub

Sachant que la procédure est ainsi

Sub Procedure (Feuille as Worksheet)


un grand merci par avance à celui qui prendra le temps de me lire et me venir en aide !

Charles
 
M

Minick

Guest
Salut,

Essai de declarer ta procedure comme ca:

Sub Procedure (Feuille)

J'ai deja eut le meme probleme en voulant passer des objets en argument et j'ai trouvé que ca pour corriger le probleme
(alors me demande pas pkoi si ca marche) ;o)

@+
Minick
 
C

Charles

Guest
Ca marche !! Excellent ! Mais je ne comprends vraiment pas pourquoi !
Merci beaucoup pour ton aide.

Une petite dernière question. Comment écrire dans une cellule le nom du paramètre !
Si je mets Feuille.Cells(i,j) = "Feuil" où Feuil est le paramètre de la procédure, il marque evidemment Feuil alors comment faire ? Merci encore
 
@

@+Thierry

Guest
Bonjour Charles, Minick, le Forum


Hey, si vous étiez tous les deux en face de moi je vous taperai sur les doigts avec une règle carrée en alu !! (Mon prof de math agissait ainsi pour de bon....)

Le problème de base de ce fil vient de cette ligne de déclaration de variable qui est fausse... Dans 99% des cas on ne s'en appercoit pas, car çà passe, mais ici c'est un bon exemple car çà ne peut pas passer....

Exemple parfait de ce qu'il ne faut JAMAIS FAIRE :

Dim feuil1, feuil2 as Worksheet

Dans cette ligne de déclaration de variable ci-dessus, seule feuil2 est un objet WorkSheet, et feuil1 est variant.

J'ai déjà souvent expliqué ceci dans ce forum, mais c'est une mauvaise habitude que l'on prend vite, puisque on tape moins....


Donc en écrivant tes procédures avec passage d'argument d'objets de la sorte tout marche correctement :

Sub MainProc()

Dim WS1 As Worksheet, WS2 As Worksheet

With ThisWorkbook
Set WS1 = .Worksheets("Sheet1")
Set WS2 = .Worksheets("Sheet2")
End With

SubProc WS2
End Sub


Sub SubProc(Feuille As Worksheet)
With Feuille
.Cells.Interior.ColorIndex = 3
.Cells(1, 1) = Feuille.Name
End With
End Sub


Tu noteras, Charles que j'ai aussi essayé de répondre à ta dernière question, (pour autant que je l'ai comprise !) dans cette SubProc...

Bon Appétit

@+Thierry

PS : donc attention à vos doigts la prochaine fois !! lol
 
C

Charles

Guest
Je dois être vraiment un cancre parcequ'il déconne quand je mets ton "SubProc WS2"
directement ! Je ne comprends pas pourquoi !
Sinon merci pour les explications et aussi pour la réponse à ma deuxième question !!

Bonne journée
 
@

@+Thierry

Guest
Re Charles, le Forum

Ah tiens c'est bizarre... Qu'elle est ta version d'Excel ? (ne serais-tu pas en Nonante Sept ?)

Enfin écrire
SubProc WS2

ou
Call SubProc(WS2)

Revient au même, voici un esxtrait de l'aide (en anglais, sorry) You are not required to use the Call keyword when calling a procedure. However, if you use the Call keyword to call a procedure that requires arguments, argumentlist must be enclosed in parentheses. If you omit the Call keyword, you also must omit the parentheses around argumentlist

Bon App
@+Thierry
 

Discussions similaires

Réponses
16
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
314 121
Messages
2 106 129
Membres
109 495
dernier inscrit
jerome bonneau