Créer des variables dont le nom est dans un array

jasserin

XLDnaute Nouveau
Bonjour,

Suis coincé sur un point :

je recherche dans chaque cellule de la ligne n°17 d'un tableau ( de colonne 1 à 65) si j'ai chaque libellé contenu dans le array motcherche. Si je trouve, je nomme dans le tableau 1 dimension colonne (k) = lettre de la colonne où j'ai trouvé le libellé.
Ex : si colonne Q contient "envoi prévu PT", le résultat sera colonne(1) = "Q" . et ainsi de suite.
J'ai programmé le reste en mettant colonne(1) à chaque fois que je veux utiliser la lettre "Q". Mais à chaque nouvelle colonne insérée dans mon tableau, les numéros changent à partir de l'insertion.

Je souhaiterais donc pouvoir utiliser non pas colonne(k) = Q mais passer par une variable dont le nom serait le premier élément du array : exemple : envoi prévu PT = Q et ainsi de suite, ce qui me permettrait de replacer directement dans le programme par la suite là où je veux utiliser la lettre Q par la variable dont le nom sera le libellé de l'élément de l'array reconnu, dans l'exemple "envoi prévu PT" .

J'espère être claire ...

Merci beaucoup pour votre aide


Code:
Option Explicit
    Dim semaine As Variant
    Dim Nb_Lignes As Integer
    Dim i As Integer
    Dim dates As Date
    Dim annéeencours As Variant
    Dim moiscolonneQ As Variant
    Dim mois As Integer
    Dim colonne(1 To 22) As String

    Sub repérage_colonnes()
    Dim i As Integer
    Dim j As Integer
    Dim z As Integer
    Dim NumCol As Integer
    Dim texte As String
    Dim essai As String
    Dim k As Integer
    Dim motcherche As Variant

    k = 1
    NumCol = 0

    motcherche = Array("envoi prévu PT", "envoi réel mail PT", "ecart PT", "retard PT", "mois PT", "saisie1", "finsaisie1", "Ecart saisie1", "saisie2", "finsaisie2", "Ecart saisie2", "mois DATA", "S rés. prél.", "S envoi rés. prél.", "Ecart rés. prél.", "retard rés. prél.", "Mois rés. prél.", "S RP", "S envoi DRAFT RP", "Ecart RP", "Retard RP", "Mois RP")

    For i = 1 To 65
    NumCol = Cells(17, i).Column
    texte = Cells(17, i).Value
    'MsgBox NumCol
    'MsgBox texte
       
        For j = 0 To UBound(motcherche, 1)
        essai = motcherche(j)
        MsgBox essai
            If Cells(17, i).Value Like essai Then
             colonne(k) = NumCol2Lettre(NumCol)
             MsgBox colonne(k)
             k = k + 1
            End If
        Next
    Next

    Public Function NumCol2Lettre(ByVal NumCol As Long) As String
    NumCol2Lettre = Split(Cells(, NumCol).Address, "$")(1) '$A$1
    End Function
 

laurent950

XLDnaute Barbatruc
Re : Créer des variables dont le nom est dans un array

Bonsoir,

La colonne de votre ligne c'est a dire ligne N° 17 (Il y a 65 colonnes) si vous en inserer d'autres entre il faut redimensionner le tableau et la boucle for pour passer de 65 colonnes au nombres souhaité.

Voici le code
VB:
   Dim semaine As Variant
    Dim Nb_Lignes As Integer
    Dim i As Integer
    Dim dates As Date
    Dim annéeencours As Variant
    Dim moiscolonneQ As Variant
    Dim mois As Integer
    Dim colonne(1 To 22) As String

    Sub repérage_colonnes()
    Dim i As Integer
    Dim j As Integer
    Dim z As Integer
    Dim NumCol As Integer
    Dim texte As String
    Dim essai As String
    Dim k As Integer
    Dim motcherche As Variant
    
    ' Tableau a deux dimension de 1 ligne sur 65 colonnes
    Dim Tstock() As Variant
    ReDim Tstock(1 To 1, 1 To 65)

    k = 1
    NumCol = 0

    motcherche = Array("envoi prévu PT", "envoi réel mail PT", "ecart PT", "retard PT", "mois PT", "saisie1", "finsaisie1", "Ecart saisie1", "saisie2", "finsaisie2", "Ecart saisie2", "mois DATA", "S rés. prél.", "S envoi rés. prél.", "Ecart rés. prél.", "retard rés. prél.", "Mois rés. prél.", "S RP", "S envoi DRAFT RP", "Ecart RP", "Retard RP", "Mois RP")

    For i = 1 To 65
    NumCol = Cells(17, i).Column
    texte = Cells(17, i).Value
    'MsgBox NumCol
    'MsgBox texte
       
        For j = 0 To UBound(motcherche)
        essai = motcherche(j)
        MsgBox essai
            If Cells(17, i).Value Like essai Then
             'colonne(i) = NumCol2Lettre(NumCol)
             'MsgBox colonne(i)
             Tstock(i, 1) = NumCol2Lettre(NumCol)
             Tstock(i, 2) = Cells(17, i)
             MsgBox Tstock(i, 1)
             MsgBox Tstock(i, 2)
            End If
        Next
    Next
End Sub

    Public Function NumCol2Lettre(ByVal NumCol As Long) As String
    NumCol2Lettre = Split(Cells(, NumCol).Address, "$")(1) '$A$1
    End Function
Laurent
 

Discussions similaires

Réponses
2
Affichages
462

Statistiques des forums

Discussions
314 491
Messages
2 110 177
Membres
110 690
dernier inscrit
Zeppelin