Passer un nom de feuille en variable

Passer un nom de feuille en variable - VB/VBA/VBS - Programmation

Marsh Posté le 13-06-2006 à 16:40:57    

Bonjour,
 
Je suis débutant en VBA et j'ai un pb avec une macro : j'ai un userform avec des boutons d'option et j'aimerais que le choix d'une option me permette de passer en variable le nom d'une feuille de classeur pour ensuite y insérer des graphiques... Mais qd je fais:
 
Dim Feuille As Worksheet
If UserForm2.OptionButton1 Then Feuille = Workbook.Sheets("Feuil1" )
If UserForm2.OptionButton2 Then Feuille = Worksheets.Sheet("Feuil2" )
If UserForm2.OptionButton3 Then Feuille = Sheets("Feuil3" )
 
dans mon commandbutton de UserForm2, il me met:
 
"Membre de méthode ou de données introuvable"
 
Qln peut-il m'aider svp? Est-ce une erreur de syntaxe? est-ce une erreur de "placement de code"?

Reply

Marsh Posté le 13-06-2006 à 16:40:57   

Reply

Marsh Posté le 13-06-2006 à 19:17:26    

essaie avec ça
 
If UserForm1.OptionButton1 = True Then mafeuille = "feuil1"
If UserForm1.OptionButton2 = True Then mafeuille = "feuil2"
If UserForm1.OptionButton3 = True Then mafeuille = "feuil3"
Sheets(mafeuille).Select

Reply

Marsh Posté le 13-06-2006 à 19:22:21    

Et avec qu'un If
 
For opt = 1 To 3
    If Controls("OptionButton" & opt) = True Then mafeuille = "feuil" & opt
Next opt
Sheets(mafeuille).Select

Reply

Marsh Posté le 14-06-2006 à 09:40:11    

3 lignes de « If ... » et trois syntaxes différentes pour faire la même chose. Et aucune n'est correcte à 100%.
« Workbook.Sheets("Feuil1" ) » et « Worksheets.Sheets("Feuil1" ) » sont incorrectes et justifient le message que tu as eu.
« Sheets("Feuil3" )  » peut fonctionner dans certains cas en fonction du Workbook actif.
 
Mais de toute façon la syntaxe correcte d'affectation d'un objet nécessite le mot clé « Set » :
Set Feuille = ActiveWorkbook.Sheets("Feuil3" )  
ou
Set Feuille = WorkBooks("monWorkBook" ).Sheets("Feuil3" )
 
Ce code permet de passer l'objet Feuille en paramètre et pas seulement son nom.
Voir le code de e2prom pour passer seulement le nom (avec maFeuille déclaré de type String)


Message édité par tegu le 14-06-2006 à 09:41:55
Reply

Marsh Posté le 14-06-2006 à 10:09:20    

OK, merci ca passe maintenant, mais un autre pb est apparu sur la construction des graphes, avec ces lignes:
ActiveChart.SetSourceData Source:=Sheets(mafeuille).Range("A1" )
ActiveChart.Location Where:=xlLocationAsObject, Name:=mafeuille
 
J'ai essayé avec et sans "", mais il met "Incompatibilité de type".
 
Il s'agit d'un pb de conditions sur les variables passées en paramètre de Sheets?

Reply

Marsh Posté le 14-06-2006 à 10:11:12    

OK tegu j'avais pas eu ton message
Effectivement ca doit pouvoir résoudre mon nouveau pb
Je vais essayer  
merci

Reply

Marsh Posté le 14-06-2006 à 10:29:21    

Rectification:
Effectivement les 3 lignes étaient <>, mais c'est parce que j'ai fait des tests, et meme la syntaxe set feuille machin n'a pas marché. Mais je crois savoir pourquoi: mes If sont dans le commandbar de UserForm2, alors que mes graphes sont dans un module. du coup, il ne transmet pas la valeur Feuille au graphe. Coment faire pour la rendre publique.

Reply

Marsh Posté le 14-06-2006 à 10:33:10    

Pour déclarer une variable publique il faut le faire dans un module avec le mot clé Public :
Public Feuille As WorkSheet


Message édité par tegu le 14-06-2006 à 10:33:54
Reply

Marsh Posté le 14-06-2006 à 11:52:00    

OK, mais je l'ai déjà essayé, sans résultat. Dans mon module, la variable reste à Nothing.Dans mon If-set de mon bouton, au debugger, il met met bien "Vrai" ou "Faux", mais quand je passe les memes If-set dans le module, il laisse tout à "Faux"...

Reply

Marsh Posté le 14-06-2006 à 11:57:10    

En fait il me met "Attribut incorrect dans une procédure Sub ou function...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed