Macro : nommer une variable dans une boucle

ric_anto

XLDnaute Nouveau
Macro : nommer une variable dans une boucle [résolu]

Bonjour à tous,

J'ai le bout de code suivant :
For x=1 To 10
Ligne_CEx_début = Range("CE" & x & "_début").Row
Ligne_CEx_fin = Ligne_CEx_début + 10
Next x​
Seulement voilà, ce bout de code ne marche pas... Je suppose que le problème survient lorsque je nomme ma variable "Ligne_CEx_début".

D'où ma question : dans une boucle, comment nommer une variable en incluant le numéro du compteur ?
 
Dernière édition:

Arpette

XLDnaute Impliqué
Re : Macro : nommer une variable dans une boucle

Bonjour à tous,

J'ai le bout de code suivant :
For x=1 To 10
Ligne_CEx_début = Range("CE" & x & "_début").Row
Ligne_CEx_fin = Ligne_CEx_début + 10
Next x​
Seulement voilà, ce bout de code ne marche pas... Je suppose que le problème survient lorsque je nomme ma variable "Ligne_CEx_début".

D'où ma question : dans une boucle, comment nommer une variable en incluant le numéro du compteur ?

Bonsoir Ric, tu n'a pas mis tout ton code, difficile de comprendre.
@+
 

ric_anto

XLDnaute Nouveau
Re : Macro : nommer une variable dans une boucle

Que veux-tu comme code en plus ?

Il n'y a rien au début à part l'en-tête de début de macro.
Et après c'est un "Select Case ... / End Select" où j'utilise les variables Ligne_CEx_début / Ligne_Cex_fin (où x est remplacé par 1, 2, ..., 10).

Mais quoiqu'il en soit, je sais que ce bout de code code ne fonctionne pas correctement puisqu'il me crée une variable nommée Ligne_CEx_début et une autre Ligne_CEx_fin (au lieu de me faire Ligne_CE1_début, Ligne_CE2_début, ...)
(j'ai fait la vérification avec une MsgBox)
 

Arpette

XLDnaute Impliqué
Re : Macro : nommer une variable dans une boucle

Que veux-tu comme code en plus ?

Il n'y a rien au début à part l'en-tête de début de macro.
Et après c'est un "Select Case ... / End Select" où j'utilise les variables Ligne_CEx_début / Ligne_Cex_fin (où x est remplacé par 1, 2, ..., 10).

Mais quoiqu'il en soit, je sais que ce bout de code code ne fonctionne pas correctement puisqu'il me crée une variable nommée Ligne_CEx_début et une autre Ligne_CEx_fin (au lieu de me faire Ligne_CE1_début, Ligne_CE2_début, ...)
(j'ai fait la vérification avec une MsgBox)
Oui, c'est cà que je veux le code du début à la fin pour que je puisse le reproduire et voir où ça coince. Pour ton info utilise la touche # quand tu post, elle se trouve à droite des police en gras et tu as ceci
Code:
tu écris entre les deux [codes]
@+
 

ric_anto

XLDnaute Nouveau
Re : Macro : nommer une variable dans une boucle

C'est un peu long et répétitif, c'est pourquoi je ne l'avais pas mis en entier... ;-)

Code:
Sub Gestion_CE()

    'Définition des variables
    For I = 1 To 10
        Ligne_CEI_début = Range("CE" & I & "_début").Row
        Ligne_CEI_fin = Ligne_CEI_début + 10
    Next I
    
    'Test du bon fonctionnement de la boucle
    MsgBox Ligne_CE1_début
    
    'Affichage / masquage des bonnes lignes
    Select Case Range("NB_REA").Value
        Case 1
            Rows("18:26").EntireRow.Hidden = True
            Rows(Ligne_CE2_début & ":" & Ligne_CE10_fin).EntireRow.Hidden = True
        Case 2
            Rows("18").Hidden = False
            Rows("19:26").EntireRow.Hidden = True
            Rows(Ligne_CE2_début & ":" & Ligne_CE2_fin).EntireRow.Hidden = False
            Rows(Ligne_CE3_début & ":" & Ligne_CE10_fin).EntireRow.Hidden = True
        Case 3
            Rows("18:19").EntireRow.Hidden = False
            Rows("20:26").EntireRow.Hidden = True
            Rows(Ligne_CE2_début & ":" & Ligne_CE3_fin).EntireRow.Hidden = False
            Rows(Ligne_CE4_début & ":" & Ligne_CE10_fin).EntireRow.Hidden = True
        Case 4
            Rows("18:20").EntireRow.Hidden = False
            Rows("21:26").EntireRow.Hidden = True
            Rows(Ligne_CE2_début & ":" & Ligne_CE4_fin).EntireRow.Hidden = False
            Rows(Ligne_CE5_début & ":" & Ligne_CE10_fin).EntireRow.Hidden = True
        Case 5
            Rows("18:21").EntireRow.Hidden = False
            Rows("22:26").EntireRow.Hidden = True
            Rows(Ligne_CE2_début & ":" & Ligne_CE5_fin).EntireRow.Hidden = False
            Rows(Ligne_CE6_début & ":" & Ligne_CE10_fin).EntireRow.Hidden = True
        Case 6
            Rows("18:22").EntireRow.Hidden = False
            Rows("23:26").EntireRow.Hidden = True
            Rows(Ligne_CE2_début & ":" & Ligne_CE6_fin).EntireRow.Hidden = False
            Rows(Ligne_CE7_début & ":" & Ligne_CE10_fin).EntireRow.Hidden = True
        Case 7
            Rows("18:23").EntireRow.Hidden = False
            Rows("24:26").EntireRow.Hidden = True
            Rows(Ligne_CE2_début & ":" & Ligne_CE7_fin).EntireRow.Hidden = False
            Rows(Ligne_CE8_début & ":" & Ligne_CE10_fin).EntireRow.Hidden = True
        Case 8
            Rows("18:24").EntireRow.Hidden = False
            Rows("25:26").EntireRow.Hidden = True
            Rows(Ligne_CE2_début & ":" & Ligne_CE8_fin).EntireRow.Hidden = False
            Rows(Ligne_CE9_début & ":" & Ligne_CE10_fin).EntireRow.Hidden = True
        Case 9
            Rows("18:25").EntireRow.Hidden = False
            Rows("26").Hidden = True
            Rows(Ligne_CE2_début & ":" & Ligne_CE9_fin).EntireRow.Hidden = False
            Rows(Ligne_CE10_début & ":" & Ligne_CE10_fin).EntireRow.Hidden = True
        Case 10
            Rows("18:26").EntireRow.Hidden = False
            Rows(Ligne_CE2_début & ":" & Ligne_CE10_fin).EntireRow.Hidden = False
    End Select

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Macro : nommer une variable dans une boucle

Bonjour,

perso comprends pas trop l'intérêt d'une boucle dans ce cas, puisqu'a priori, tu ne te sers que de la dernière valeur calculée.... A noter au passage qu'il est tout de même préférable de déclarer et typer les variables :
Code:
Sub test()
Dim mavariable As String

bonne journée
@+
 

ric_anto

XLDnaute Nouveau
Re : Macro : nommer une variable dans une boucle

Bonjour,

Je ne comprends pas ta remarque... pourquoi je ne me servirai que de la dernière variable calculée ?
Le "case" fait intervenir 18 variables : de Ligne_CE2_début à Ligne_CE10_début et de Ligne_CE2_début à Ligne_CE2_fin... je n'ai pas envie de paramétrer ces 18 variables ligne par ligne si je peux l'automatiser !
Et avec une boucle, c'est d'autant plus facile à modifier si je modifie ma feuille Excel. C'est bien pour ça que je souhaite utiliser des variables plutôt que directement les numéros de ligne...
 

Pierrot93

XLDnaute Barbatruc
Re : Macro : nommer une variable dans une boucle

Re,

euh, il me semble que ta boucle n'a d'incidence uniquement que sur la valorisation de tes variables... puisqu'à l'intérieur de cette même boucle tu ne fais pas autre chose.... Ou bien quelque chose m'échappe... fort possible du reste....
 

ric_anto

XLDnaute Nouveau
Re : Macro : nommer une variable dans une boucle

Re,

euh, il me semble que ta boucle n'a d'incidence uniquement que sur la valorisation de tes variables... puisqu'à l'intérieur de cette même boucle tu ne fais pas autre chose.... Ou bien quelque chose m'échappe... fort possible du reste....

Oui, c'est exactement cela. La boucle a pour seul but de me créer 20 variables :
Ligne_CE1_début
Ligne_CE1_fin
Ligne_CE2_début
...
Ligne_CE10_fin
(les variables utilisées dans le "Select Case" après)

Sauf que dans l'état actuel, elle ne me crée que deux variables : Ligne_CEx_début et Ligne_CEx_fin
D'où mon problème ! J'aimerai pouvoir inclure dans le nom de mes variables la valeur du compteur de la boucle (c'était ma tentative avec le "CEx"), sauf que je ne sais pas comment faire... =/


EDIT pour pierrejean : il est vrai que tel quel, on peut ne pas comprendre ce que je veux faire avec cet macro. En version résumée :
J'ai sur ma feuille excel une cellule possédant une liste déroulante de choix (avec les valeurs de 1 à 10). C'est la cellule nommée "NB_REA". Selon la valeur que prend cette cellule, je souhaite masquer un certain nombre de lignes situées en-dessous. C'est là l'utilité du "Select Case".
Au départ, je l'avais fait simplement de la forme :
Code:
Select Case Range("NB_REA").Value
     Case 1
          Rows("18:26").EntireRow.Hidden = True
          Rows("159:210").EntireRow.Hidden = True
etc.
D'un point de vue pratique, il s'agit de faire apparaitre des sortes de "fiche utilisateur" selon le nombre d'utilisateurs entré dans "NB_REA". S'il n'y a qu'un seul utilisateur, on ne fait apparaitre qu'une fiche, etc.
Sauf qu'il peut arriver que j'aie besoin de rajouter des paramètres dans une fiche utilisateur (donc rajouter une ligne). Du coup, cette fiche devient plus longue (en nb de lignes), et si j'ai rentré à la main mes numéros de ligne, tout est à refaire ! Comme chaque fiche débute par un genre de case de titre, j'ai donné un nom à ces cases : CE1_début, CE2_début, etc.
Je souhaiterai donc automatiser la création des variables indiquant les lignes correspondant au début et à chaque fin de fiche. Et avec une boucle, c'est encore plus simple ! En effet, l'espacement entre Ligne_CEx_début et Ligne_CEx_fin étant régulier, à supposer que je rajoute une ligne de paramètre à chaque fiche, dans ma boucle for actuelle, au lieu de faire "+10" pour obtenir la fin, je fais "+11" et le tour est joué. Qu'une seule chose à changer au lieu de modifier toutes les variables...

Je ne sais pas si je suis clair ? =/
 
Dernière édition:

ric_anto

XLDnaute Nouveau
Re : Macro : nommer une variable dans une boucle

Euh non, si le Next I est en fin de macro, ça marche encore moins bien... :confused:

Supposons que la valeur de la cellule "NB_REA" soit de 4.
Lorsque la macro se lance, la boucle débute, des variables nommées Ligne_CEI_début et Ligne_CEI_fin sont créées. On entre dans le "Select Case", choix 4, et là pouf! problème, Excel ne connait ni "Ligne_CE2_début", ni "Ligne_CE4_fin", ni "Ligne_CE5_début", ni enfin "Ligne_CE10_fin", puisque ces variables n'ont pas été définies.
 

Pierrot93

XLDnaute Barbatruc
Re : Macro : nommer une variable dans une boucle

Re,

alors là, je suis largué.... fais peut être un tout petit fichier, représentant bien le problème posé, ce sera peut être plus facile pour t'aider, car là, je crais que l'on tourne en rond longtemps...
 

pierrejean

XLDnaute Barbatruc
Re : Macro : nommer une variable dans une boucle

Re

Toujours heureux de te croiser Pierrot

dans cas , ce qu'il y a lieu de creer c'est 2 tableaux style
dim Ligne_CEI_début(1 to 10)
dim Ligne_CEI_fin (1 to 10)
For I = 1 To 10
Ligne_CEI_début(I) = Range("CE" & I & "_début").Row
Ligne_CEI_fin(I) = Ligne_CEI_début + 10
Next I

et utiliser ensuite
Ligne_CEI_début(1)
Ligne_CEI_fin(1)

etc
 

ric_anto

XLDnaute Nouveau
Re : Macro : nommer une variable dans une boucle

L'edit de mon message précédent (où j'essaye d'expliquer ce que je veux faire) n'est pas clair ? =/

Mais sinon, indépendamment de mon problème particulier, la question est la suivante :
comment, dans une boucle, pouvoir intégrer la valeur du compteur au nom d'une variable créée ?
Cas pratique : je veux créer une boucle pour définir 5 variables nommées "variable1", "variable2", "variable3", "variable4", "variable5" ayant pour valeurs respectives 1,2,3,4,5. Comment faire ?

EDIT : ah oui, merci pierrejean, c'est une solution ! :)
 

Discussions similaires

Statistiques des forums

Discussions
312 084
Messages
2 085 192
Membres
102 809
dernier inscrit
Sandrine83