VBA - Appeler une variable a partir d'un Array

titeufdu89 Messages postés 374 Date d'inscription   Statut Membre Dernière intervention   -  
ozone_ Messages postés 1518 Date d'inscription   Statut Membre Dernière intervention   -

Bonjour,

Je souhaite appeler des variables en recomposant leur nom à partir d'un Array pour limiter la longueur de mon code, est-ce possible? 

Je m'explique, je dois comparer les informations de deux fichiers pour MAJ les données de ma feuille "b" en fonction de "Ws" et mettre en évidence les données modifiées.  

Pour commencer j'analyse chaque nom de colonne pour les déterminer sous forme de variable afin qu'elle puisse être comparées par la suite. J'obtiens donc une série de données à contrôler et j'ai nommée les colonnes de chaque feuille par un nom identique mais avec un préfixe correspondant au nom de la feuille en question. 

Ex : 

bNom = WsNom

bPrenom = WsPrenom, ...etc

J'ai tenté le code ci-dessous pour recomposer le nom de mes variables mais Excel les considère comme des variables à part entière et ne renvoi pas la valeur de la variable initiale. 

'MAJ des informations textuelle
            For Each Var In Array("Nom", "Pre", "Sal", "Fin", "Tx", "Cont", "Mail", "Add1", "Add2", "CP", "Vil", "Pay", "IBAN", "Perm", "Cant")
            bVar = "b" & Var
            WsVar = "Ws" & Var
                If b.Cells(i, bVar.Value).Value <> Ws.Cells(lg, WsVar.Value).Value Then
                b.Cells(i, bVar).Value = Ws.Cells(lg, WsVar).Value
                Else 'suite du code
                End If
            Next Var

Est-ce que quelqu'un aurait une idée pour contourner ce problème, une sorte de fonction INDIRECT que je pourrais utiliser en VBA par exemple?  

Je vous remercie par avance pour votre aide et vous souhaite une belle journée. 

Jean-Christophe 


Windows / Edge 103.0.1264.62


5 réponses

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 

Bonjour

Un exemple à adapter

https://www.cjoint.com/c/LGwohMFBCRB

Cdlmnt

0
titeufdu89 Messages postés 374 Date d'inscription   Statut Membre Dernière intervention   38
 

Bonsoir, 

Merci beaucoup pour la proposition mais malheureusement ça ne conviendrait pas dans mon cas car mes tableaux ne sont pas identiques. Désolé j'aurais peut-être du le préciser initialement. C'est une partie d'un tableau que je cherche a actualiser à partir d'un second.

C'est la raison pour laquelle j'analyse les noms de même en-tête pour identifier les colonnes que j'ai besoin d'analyser et je sauve les numéros de colonnes qui m'intéressent sous des variables afin de pourvoir les appeler par la suite pour les comparer et actualiser les données. A noter que les noms des colonnes ne sont pas identiques non plus. 

Concrètement, je cherche a concaténer du texte mais que le résultat soit interprété par Excel comme étant une variable et non pas un texte et de ce fait renvoi la valeur de cette dernière. 

Encore merci pour votre aide

Cordialement 

Jean-Christophe 

0
ozone_ Messages postés 1518 Date d'inscription   Statut Membre Dernière intervention   478
 

 Je n'arrive pas a comprendre le problème, pour moi les variables créés à partir de ton code sont bien nommées.

Peut être faut-il rajouter l'objet devant le nom de ta variable pour selectionner les bonnes feuilles avec Worksheets

For Each Var In Array("Nom", "Pre", "Sal", "Fin", "Tx", "Cont", "Mail", "Add1", "Add2", "CP", "Vil", "Pay", "IBAN", "Perm", "Cant")
    bVar = "b" & Var
    WsVar = "Ws" & Var
        If Worksheets(b).Cells(i, bVar.Value).Value <> Worksheets(Ws).Cells(lg, WsVar.Value).Value Then
            Worksheets(b).Cells(i, bVar).Value = Worksheets(Ws).Cells(lg, WsVar).Value
        Else 'suite du code
        End If
Next Var

0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 

Je ne comprends pas bien 2 choses ici

b.Cells(i, bVar.Value).Value

1. b est un nom de feuille comme le pense ozone

- alors il faut écrire Sheets(b).cells(...

- sinon ???

2. bVar.value doit être la référence à une colonne donc doit contenir soit un entier soit une/deux lettre/s "B", "C", ...,"AA",

Or, d'après ton code, j'interprète bVar comme un nom de plage( ici une (colonne)

- si oui il faut écrire Sheets(b).Range(bvar).Cells(i,1).Value   (Sheets(b) n'est pas obligatoire)

sinon ???

Sans le fichier, difficile d'aller plus loin

Cdlmnt

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
titeufdu89 Messages postés 374 Date d'inscription   Statut Membre Dernière intervention   38
 

Bonsoir; 

Merci beaucoup pour votre aide et désolé pour mon délai de réponse. 

Le printscreen d'Ozone illustre très bien mon problème en fait. La variable bVar a bien été créée et elle renvoi "bNom" comme string, or plus haut dans mon code, j'ai affecté une valeur chiffrée à la variable bNom et c'est sous forme de variable que je souhaiterait l'appeler plutôt que sous forme de valeur. 

En appelant bVar; j'aurais souhaité indirectement appeler la valeur stocker dans la variable bNom, pour pouvoir ensuite boucler tout ça avec un  Array pour fluidifier mon code et éviter les redondances. 

ccm81 : effectivement b. est une variable objet a laquelle j'ai affecté la feuille à actualiser et bVar est simplement un n° de colonne censé être appelé via

b.cells(i, bVar)

Merci beaucoup et bonne soirée. 

Jc

0
ozone_ Messages postés 1518 Date d'inscription   Statut Membre Dernière intervention   478
 

Sans trop m'avancer sur ma réponse et à voir avec d'autres contributeurs mais je dirai qu'il existe une autre solution avec des boucles plutôt que d'essayer de reconstituer des noms de variable à partir de String qui je pense n'est pas supporté par le VBA. 

Il faudrait, si possible, avoir une partie plus importante de ton code pour essayer de tourner le problème différemment. 

0