Créer et utiliser une variable dynamique

Cekankonvaou

XLDnaute Junior
Bonjour à tous,

Afin de rendre un bout de code plus facile à écrire et modifier si besoin , je souhaite faire évoluer le nom d'une variable dans une boucle.

J'ai essayé ça :

Code:
Private Sub crea_gamme()


....

Dim colflan, colpas, collg As String

....

For i = 1 To 4

     For k = 1 To 3

            colflan = Controls("col_f" & i & "_gamme")
            colpas = Controls("col_f" & i & "mat" & k & "pas_gamme")
            collg = Controls("col_f" & i & "mat" & k & "lg_gamme")
                                       
             If Me.Controls(labelmat).Visible = True Then
             Sheets("GAMMES").Cells(ligne_flan, colflan) = Me.Controls(labelmat).Caption
             Sheets("GAMMES").Cells(ligne_flan, colpas) = CDbl(Me.Controls(tbpas))
             Sheets("GAMMES").Cells(ligne_flan, collg) = CDbl(Me.Controls(tblg))
              End If

mais ça me renvoie une incompatibilité de type.


En fait, je voudrais que "colflan" devienne à chaque boucle "col_f1_gamme","col_f2_gamme","col_f3_gamme"...etc qui est une variable correspondant à une colonne (variable définie dans un autre module).

Existe il un moyen simple de s'en sortir???


Merci d'avance.


Bertrand
 
G

Guest

Guest
Re : Créer et utiliser une variable dynamique

Bonjour,

Si tu veux que clofan prenne la valeur du controle:

colflan = Controls("col_f" & i & "_gamme").Value ' A condition que leur type de valeur soient identique

Si tu veux que colfan référencie le controls lui-même:

Set colflan = Controls("col_f" & i & "_gamme") 'qui devient une référence à l'objet lui-même à condition qu'il existe.

Mais comme tout ceci est très imprécis......?

A+
 

Cekankonvaou

XLDnaute Junior
Re : Créer et utiliser une variable dynamique

euh...
Bon, c'est vrai, qu'à me relire, ce n'était pas très clair tout ça.

Je n'arrive pas à m'en sortir avec les solutions que tu m'as donné mais je crois que c'est du à mes explications fumeuses :D

Pour essayer d'être plus précis, voici un fichier qui illustre le problème et une tentative d'explication :

une première macro me permet d'affecter une valeur à des variables. J'ai donc col_type1_a = 12, col_type2_a=25, col_type3_a=56, col_type4_a=6985.....

Dans une autre macro, je veux créer une boucle qui utilise les valeurs affectées avec quelque chose du genre :
Code:
for i=1 to 4
colonne=col_type(i)_a
cells (2, colonne)= ....
next i

(et si ce n'est toujours pas clair, je vais me coucher et je reviens demain avec les idées plus claires sur mon problème :))

Bertrand
 

Pièces jointes

  • 131029_variables-dynamiques.xlsm
    30.4 KB · Affichages: 33

Robert

XLDnaute Barbatruc
Repose en paix
Re : Créer et utiliser une variable dynamique

Bonjour le fil, bonjour le forum,

Je ne comprends pas ton code. Pourquoi toutes ces boucles pour finalement définir des variables ? Pourquoi ne pas les définir en dur :
Code:
col_f1_gamme = 7
ou sans boucle du style :
Code:
Sub initvar()
Dim r As Range

With Sheets("GAMMES").Rows(1)
    Set r = .Find("Type 1", , xlValues, xlWhole)
    If Not r Is Nothing Then col_f1_gamme = r.Column
    Set r = Nothing
    Set r = .Find("Type 1 : Largeur Bobine Matière 1", , xlValues, xlWhole)
    If Not r Is Nothing Then col_f1mat1lg_gamme = r.Column
    Set r = Nothing
    Set r = .Find("Type 1 : Pas Bobine Matière 1", , xlValues, xlWhole)
    If Not r Is Nothing Then col_f1mat1pas_gamme = r.Column
    Set r = Nothing
    Set r = .Find("Type 1 : Largeur Bobine Matière 2", , xlValues, xlWhole)
    If Not r Is Nothing Then col_f1mat1pas_gamme = r.Column
    Set r = Nothing
    '...
End With
End Sub
Ensuite, ton UserForm ne contient aucun contrôle...?!
 

Cekankonvaou

XLDnaute Junior
Re : Créer et utiliser une variable dynamique

Hello,

Pourquoi ne pas définir les variables en dur : parce j'ai voulu que le fichier que je cherche à mettre en place soit le plus souple possible d'utilisation et que les utilisateurs puissent déplacer les colonnes ou en insérer d'autres comme ils le souhaiteront. La seule contrainte sera de ne pas modifier le nom d'en-tête des colonnes prédéfinies.

Pourquoi ne pas utiliser la fonction Find pour initialiser mes colonnes : c'est ce que j'avais fait au début, mais ça ne fonctionnait pas si la colonne était masquée alors que la boucle "for..if..end if..next" fonctionne dans tous les cas.

Concernant le Userform, il est un "reste" de mon fichier d'origine, beaucoup plus "dense" que celui envoyé.

Je pense qu'une confusion vient de la notion de Controls que j'avais mis dans le code présenté dans le premier message. C'était un essai suite à une "solution" (infructueuse) trouvée sur la toile...

Bertrand
 

klin89

XLDnaute Accro
Re : Créer et utiliser une variable dynamique

Bonsoir à tous,

Pas vraiment suivi mais tu peux placer le nom des en-têtes de colonnes dans un array.
VB:
Dim MesColonnes(), Col As integer    
'Noms des en-têtes de colonnes placés dans un array
MesColonnes = Array("toto", "titi", "tata", "toutou")
  With Sheets("Feuil1")
    For k = LBound(MesColonnes) To UBound(MesColonnes)
      Col = .Rows("1:1").Find(What:=MesColonnes(k), LookAt:=xlWhole).Column
      'blablabla
    Next k
  End With
Klin89
 

Cekankonvaou

XLDnaute Junior
Re : Créer et utiliser une variable dynamique

Bonjour,

Je ne connais pas du tout les Array (tout petit petit débutant).
Mon besoin ne réside pas forcément dans l'affectation d'une valeur à une variable plutôt dans la façon de définir une variable en dynamique : est ce que les arrya collent avec ce besoin?

Je resitue le besoin :

J'ai plusieurs variable (toto1, toto2, toto3, toto4, toto5, toto6...as Long)
Je veux utiliser mes variables les unes après les autres dans une boucle du genre :
Code:
for i=1 to 10
var=toto(i)
cells(1, var)=....
next i

Help!! :)

Bertrand
 

Cekankonvaou

XLDnaute Junior
Re : Créer et utiliser une variable dynamique

Bonjour Robert

Peux tu me dire si j'ai bien compris?
Lorsque tu écris :
Code:
Public colflan(1 To 4) As Byte
Public colpas(1 To 12) As Byte
Public collg(1 To 12) As Byte

c'est une façon de donner un indice aux variables mentionnées, c'est bien cela??
Si c'est cela, faut il absolument que cet indice soit en fin du nom de variable? Peut on indicer avec deux chiffres distincts? Par exemple :

Code:
Public toto(1 To 5)tata(1 To 9)tutu


Par ailleurs, y a t'il une raison de les déclarer en tant que Byte (j'ai tendance à déclarer les variables qe j'utilise pour les adresses de cellules en tant que Long)

En tous cas, merci beaucoup pour tes réponses, je crois que cette notion d'indice devrait me permettre d'avancer un peu plus efficacement.

Bertrand
 
G

Guest

Guest
Re : Créer et utiliser une variable dynamique

Bonjour,

Va voir ce tuto sur les tableau: Utiliser les variables tableaux en VBA Excel
pour ce qui est du type Long, tu as raison, dès qu'une variable numérique est utilisée pour des index de ligne ou colonne, excel la convertie en Long. La déclarer dès le départ dans ce type fait faire une opération de conversion en moins. Je sais bien qu'on n'est plus dans une chasse à l'optimisation mémoire comme au début des années 80 mais....

A+
[Edit] Coucou Robert:)
 

Discussions similaires

Réponses
20
Affichages
799

Statistiques des forums

Discussions
312 201
Messages
2 086 172
Membres
103 152
dernier inscrit
Karibu