problem avec public : ça marche pas

problem avec public : ça marche pas - VB/VBA/VBS - Programmation

Marsh Posté le 10-12-2004 à 16:28:07    

Bonjour,
 
Décidément VB, c'est bizarre :
 
Je réalise une macro en VBA pour excel.
 
J'ai mis un tableau en public dans mon module.
 
public tableau(1 to 10) as ComboBox
Dans mes fonctions, je m'en sert assez souvent, jusque là, il n' y avait pas de problème.
 
J'ai décidé de rajouter des boutons dans la même feuille excel à partir de code VBA :
 
Dim buttontoadd As OLEObject
Set buttontoadd = combofeuille.OLEObjects.Add(ClassType:="Forms.CommandButton.1" )

 
Depuis que je fais ça dans une des fonctions. Il me fait la chose suivante :
 
La première utilisation d'un de mes combos fonctionne, mais pas la deuxième ==> il me dit "Object variable or with block not set"
En effet, quand je regarde la valeur des éléments du tableau au moment ou ça plante, il me dit "Nothing".
 
Et pourtant :
- J'ai bien initialisé le tableau puisque je peux y accéder la première fois.
- Je n'ai aucun code qui modifie les éléments de mon tableau excepté dans la sub de base du module.
 
J'y comprends rien. Est-ce que quelqu'un aurait la soluce ?
 
 
 
 

Reply

Marsh Posté le 10-12-2004 à 16:28:07   

Reply

Marsh Posté le 10-12-2004 à 19:53:40    

essaye en mettant :
 
Global tableau(1 to 10) as ComboBox
 
 

Reply

Marsh Posté le 10-12-2004 à 23:57:41    

Déjà fait ça marche pas.  
Le problème a l'air plus grave : C'est un ajout de code(qui n' a priori rien à voir) qui fait que ça marche plus :  
 
ActiveSheet.OLEObjects.Add ClassType:="Forms.CommandButton.1" )  

Reply

Marsh Posté le 12-12-2004 à 14:55:22    

Voilà mon début de code de macro :
 
Option Explicit
 
Public Flag As Boolean  
 
Public Nom_feuilles(3)  
Public nom_colonnes(10) As String  
Public combos(0 To 10) As ComboBox
Public combostring(0 To 10) As String  
Public colonne_supp As Integer  
Public colonne_mod As Integer  
Public bddboutons As New Collection  
Public comboboutons As New Collection  
 
' sub d'entrée de la macro  
Sub MacroOne()
 
Set combos(0) = Sheet1.ComboBox1
Set combos(1) = Sheet1.ComboBox2
Set combos(2) = Sheet1.ComboBox3
Set combos(3) = Sheet1.ComboBox4
Set combos(4) = Sheet1.ComboBox5
 
....
 
End Sub
 
Sub ReloadCombo(numCombo as Integer)
 ...
End Sub
 
Sub Selectionner(numCombo as Integer, value as String)
 ...
End Sub
 

 

Reply

Marsh Posté le 12-12-2004 à 16:00:54    

et si tu mettait plutot ta declaration de tableau dans la feuille concernée plutot que dans un module ?

Reply

Marsh Posté le 12-12-2004 à 17:38:59    

Je vais essayer ta solution

Reply

Marsh Posté le 12-12-2004 à 17:50:16    

J'ai mis toutes les variables et sub dans la feuille en question. Ca ne marche pas plus. Même probleme : les tableaux se vide après l'ajout dynamique du 1er bouton

Reply

Marsh Posté le 12-12-2004 à 18:26:16    

ca c'est tres curieux , si je fait ce code :
 

Code :
  1. Set combos(0) = Feuil1.ComboBox1
  2. Set combos(1) = Feuil1.ComboBox2
  3. Set combos(2) = Feuil1.ComboBox3
  4. Set combos(3) = Feuil1.ComboBox4
  5. Set combos(4) = Feuil1.ComboBox5
  6. ActiveSheet.OLEObjects.Add ClassType:="Forms.CommandButton.1"
  7. MsgBox combos(0).Name


 
 
il me renvoie bien "ComboBox1"
 
 :??:  

Reply

Marsh Posté le 12-12-2004 à 18:28:20    

PS : en passant les declarations "Public" dans une feuille tu doit les passer en "Private"

Reply

Marsh Posté le 12-12-2004 à 18:29:03    

Code :
  1. Private Flag As Boolean
  2. Private Nom_feuilles(3)
  3. Private nom_colonnes(10) As String
  4. Private combos(0 To 10) As ComboBox
  5. Private combostring(0 To 10) As String
  6. Private colonne_supp As Integer
  7. Private colonne_mod As Integer
  8. Private bddboutons As New Collection
  9. Private comboboutons As New Collection
  10. Sub test()
  11. Set combos(0) = Feuil1.ComboBox1
  12. Set combos(1) = Feuil1.ComboBox2
  13. Set combos(2) = Feuil1.ComboBox3
  14. Set combos(3) = Feuil1.ComboBox4
  15. Set combos(4) = Feuil1.ComboBox5
  16. ActiveSheet.OLEObjects.Add ClassType:="Forms.CommandButton.1"
  17. MsgBox combos(0).Name
  18. End Sub

Reply

Marsh Posté le 12-12-2004 à 18:29:03   

Reply

Marsh Posté le 12-12-2004 à 21:21:52    

gargamail a écrit :

PS : en passant les declarations "Public" dans une feuille tu doit les passer en "Private"


 
Je l'ai déjà fait ( J'ai pas mis le mot clé Private mais il est utilisé implicitement).  
Mais ça ne marche pas.
 
Le problème est plus compliqué que ça : C'est depuis que j'ai ajouté le code suivant (qui n' a priori rien à voir) que ça marche plus :  
 
ActiveSheet.OLEObjects.Add ClassType:="Forms.CommandButton.1" )  
 
Si je l'enlève tout remarche ...

Reply

Sujets relatifs:

Leave a Replay

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