déclaration type Public

gaël92

XLDnaute Nouveau
Bonjour,
1604591390191.png
je souhaite déclarer une variable de type Tableau As String comme étant une variable Public pour pouvoir l'utiliser dans plusieurs procédure.
Or un message d'erreur apparait disant : "Des constantes, chaines de longueur fixe, tableaux, types définis par l'utilisateur et instructions Declare ne sont pas autorisés comme membres Public de module d'objet."

Quelqun aurait une solution ?

Merci d'avance

1604591390191.png
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Gael,
Essayez cette PJ avec :
VB:
Public Tableau_Equipement(0 To 6, 0 To 10)
Sub Essai()
On Error GoTo Fin
Dim i As Integer, j As Integer
For i = 0 To 6
    For j = 0 To 9
        Tableau_Equipement(i, j) = 10 * i + j
    Next j
Next i
[B5] = " Pas d' Erreur rencontrée"
Exit Sub
Fin:
[B5] = " Erreur rencontrée"
End Sub
Chez moi ( PC XL2007 ) ça marche.
MS dit qu'un tableau peut être déclaré en Public :

Addon : J'ai testé en mettant la macro dans une feuille. C'est interdit.
Vous devez déclarer votre array public dans un module standard.
Par contre une fois déclaré dans un module standard, vous pouvez l'utiliser dans une feuille. :)
 

Pièces jointes

  • Gael.xlsm
    14.2 KB · Affichages: 8
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonsoir.
Information: Dans un module objet (Worksheet, ThisWorkbook, UserForm, ou module de Classe) une variable Public en devient une Propriété. Elle ne peut être utilisée à l'extérieur du module sans préciser devant le nom de l'objet suivi d'un point.
J'ignore la raison des restrictions de types. On peut les contourner en les déclarant Private et en les transférant à l'aide de procédures Property.
De même d'ailleurs une Public Sub en devient une méthode.
 

patricktoulon

XLDnaute Barbatruc
bonsoir a tous
a ben en voila une bien bonne j'ai deja vu cette erreur dans les conditions
le message est clair c'est le dimensionnement qui n'est pas possible en public pas la variable tableau

c'est facilement contournable

public levraitoto as variant

sub machinchouette()
dim lefauxtoto(0 to 6,0 to 10)
for i= 0 to ...blablabla
for c= 0 to 10
lefauxtoto(i,c)="ligne " & i & "-"col " & c
next
next
levraitoto =lefauxtoto
end sub

'dans une autre sub dans un autre module
sub test()
msgbox levraitoto(0,0)
next

si la variable appartient a thisworkbook thisworkbook. devant
si c'est une feuille feuil1. devant
pareil pour un userform (attention ici lors du unload la variable est vidé )même si elle a été chargée avant le load
démonstration
tentative dans le module de la Feuil1
Capture1.JPG


tentative a dimensionnement différé
Capture.JPG
 

Statistiques des forums

Discussions
312 982
Messages
2 094 150
Membres
105 948
dernier inscrit
Frenesy