Garder en mémoire un array

Bonjour à tous,

Comment faire pour garder en mémoire les données d'un array ?

J'ai plusieurs macros qu'elles l'utilisent, voici un exemple (le vrai est beaucoup plus long) :

Lettre = Array("", "A", "B", "C", "D", "E")

J'ai essayé :

Public Lettre As Variant

Mais j'ai bien peur d'avoir tout faut.

Merci pour votre aide.

Bonjour,

Si, je crois que Public Lettre en tête de module, avant toute procédure, permettra de garder en mémoire la tableau.

Cdlt,

Bonjour Jefekoi,

La déclaration doit ce faire en tête de module,

ou si cet Array est toujours le même, il suffit de déclarer une variable en constante et de le récupérer quand on en a besoin

Public Const MesLettres As String = "A,B,C,D,E,.."
Lettre = SPLIT(MesLettres,",")

Edit : oups, salut 3GB

@+

Tu as plusieurs solutions :

1- avec une variable publique :

En entête d'un module standard, tu déclares ta variable :

Public Lettre As Variant

Tu l'alimentes, par exemple, à l'ouverture du classeur, dans le module ThisWorkbook :

Private Sub Workbook_Open()
    Lettre = Array("", "A", "B", "C", "D", "E")
End Sub

Du coup, tu pourras t'en servir partout et quand tu veux.

2- avec une constante publique.

Même principe, en entête d'un module standard, tu déclares ta constante publique :

Public Const LETTRES As String = "¤A¤B¤C¤D¤E"
Public Const SEPARATEUR As String = "¤"

Puis, dans n'importe laquelle de tes procédures :

Sub Test()
Dim Lettre As Variant
   'blabla bla
   Lettre = Split(LETTRES, SEPARATEUR)
   'blablabla
   'blibli
End Sub

3- Avec une fonction, déclarée Publique dans un module standard :

Public Function Lettres() As Variant
    Lettres = Array("", "A", "B", "C", "D", "E")
End Function

A utiliser comme dans l'exemple 2 dans chacune de tes procédures :

Sub Machin()
Dim L As Variant
   'blabla bla
   L = Lettres()
   'blablabla
End Sub

oups : salut BrunoM45 et 3GB

Youaaaa des connaisseurs

Merci je vais analyser vos solutions :)

Je serais partant pour la version

Public Const MesLettres As String = "A,B,C,D,E,.."

Mais pour l'appeler je fais comment ?

car là ça marche pas

MsgBox Split(MesLettres, "1")

Re,

Cela ne fonctionne pas, car le 2ème argument de SPLIT, est le séparateur

Un mix

Public Const MesLettres As String = "A,B,C,D,E,F,G"

Function MaLettre(Num As Integer)
  Dim Lettre As Variant
  Lettre = Split(MesLettres, ",")
  MaLettre = Lettre(Num - 1)
End Function

Sub Test()
  MsgBox MaLettre(1)
End Sub

@+

Merci je venais juste d'avoir trouvé ceci :

x = Split(MesLettres, ",")
    For y = LBound(x) To UBound(x)
        MsgBox x(y)
    Next

En tout cas merci à vous trois C'est rapide :)

J'espère que cela servira à d'autres personnes que moi :)

Bonne journée à vous et bonne soirée du nouvel an

Il y a un truc qui m'échappe là

Public Const MesLettres As String = "A, B, C, D, E, F, G, H, I, J, K, L, M, N)

Function MaLettre(Num As Integer)
  Dim Lettre As Variant
  Lettre = Split(MesLettres, ",")
  MaLettre = Lettre(Num-1)
End Function

Sub test()
For s = 6 To 10
MsgBox MaLettre(s)
Next
End Sub

Il m'affiche une erreur :

Erreur de compilation:
Type d'argument ByRef incompatible

et si je fais :

MsgBox MaLettre(s + 1)

Ca marche ... Bizarre ...

TOUJOURS déclarer les variables...

Penser à ajouter Option Explicit en tête de module permet d'éviter bien des erreurs...

Option Explicit

Public Const MesLettres As String = "A, B, C, D, E, F, G, H, I, J, K, L, M, N)"

Function MaLettre(Num As Integer)
  Dim Lettre As Variant
  Lettre = Split(MesLettres, ",")
  MaLettre = Lettre(Num - 1)
End Function

Sub test()
Dim s As Integer
For s = 6 To 10
MsgBox MaLettre(s)
Next
End Sub

EDIT : le fait d'ajouter 1((s + 1)) permet à VBA de "deviner" que s est un nombre entier...

Hoo je suis débutant depuis quelques années il ne faut pas m'en vouloir lol, je fais allusion aux personnes qui disent " Je débute" lol

Merci Pijaku super sympa :)

Rechercher des sujets similaires à "garder memoire array"