[Résolu par Pierre-Jean / Job75] Pb nom variable dans boucle : variable = String + numéro

zebanx

XLDnaute Accro
Bonjour à tous,

J'ai un code pour une macro qui est long et qui m'oblige actuellement à utiliser des noms de variables pour chaque ligne de référence qui commencent soient par un string "deb" ou "fin" puis un numéro de la zone de renvoie qui m'intéresse (deb1 / tot1 puis deb2 / tot2....).
Les variables désignées correspondent chacune à la valeur d'une cellule qui renvoie au numéro de ligne (donc à un chiffre).

Sur un exemple plus simple, j'ai appréhendé le sujet en tentant d'effectuer une boucle pour traiter cette variable afin d'utiliser pour chaque zone un code du type
For i = 1 to 3
range(cells ("deb" + i, 2), cells("fin" + i, 2)) = 10 * i
next i
La partie en rouge ne correspond cependant à rien et m'envoie sur un message d'erreur.

En cherchant, on pourrait contourner par un array (cf. exemple) mais pourriez-vous m'indiquer svp la syntaxe à utiliser pour utiliser une variable qui prendrait le nom du STRING ("deb" ou "fin") et d'un numéro qui me permettrait de réaliser cette boucle ?

Vous remerciant par avance pour vos précieuses indications.
thierry
 

Pièces jointes

  • variable_string et numero.xls
    57.5 KB · Affichages: 115

zebanx

XLDnaute Accro
Bonjour phlaurent55,

Merci pour ce retour.

Le code modifie les cellules C1,C2,C3 en leur collant une valeur de 30 (=15*i).
Il colle une valeur exacte mais sur les trois premières lignes de la 3ième colonne (et pourquoi la 3ième plutôt que la 4ième ??)

Cela ne correspond pas à identifier, par exemple pour la première occurence (j = 1) :
range(cells(deb+j,4,cells(fin+j,4) serait interprété (en pas à pas détaillé) comme range(cells(deb1,4), cells(fin1,4)) et compris comme range(cells(7,4), cells(12,4)) puisque deb1 = [B1] =7.

J'ai essayé de modifier mon code de la macro principale avec un array (en partant de ce qui fonctionne par la macro "nom_T3") mais c'est laborieux car ce code là fait appel en trois ou quatre fois à la variable "deb+chiffre" ou "fin+chiffre" et l'utilisation d'un find.

Les recherches sur le web sont laborieuses pour arriver à faire interpréter dans une boucle un string comme une variable )-. J'espérais une solution simple mais je rame bien là! :eek:

++
thierry
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Bonjour a tous
Teste ceci
Code:
Sub nomT2_b()
Dim deb(1 To 3)
Dim fin(1 To 3)
deb(1) = [B1]: fin(1) = [B2]: deb(2) = [D1]: fin(2) = [D2]: deb(3) = [F1]: fin(3) = [F2]
i = 2
For j = 1 To 3
   Range(Cells(deb(j), 4), Cells(fin(j), 4)) = 15 * i
Next j
End Sub
NB: avec 7 en B1 et 12 en B2
 

zebanx

XLDnaute Accro
Bonsoir JOB75

Ultra-efficace et ultra-motivant.;)

Je n'avais pas retrouvé (et pourtant j'ai cherché!) ce type de codes sur internet. Avant le message de P-J, je m'étais même dit que c'était décidemment très compliqué de transformer un string en variable ou de contourner le problème avec peu de lignes et une seule boucle.
Mais je ne peux que me satisfaire de voir, une nouvelle fois sur E.D., quelques codes comme le tient et celui de Pierre-Jean répondre parfaitement à une de mes demandes.

Merci !
Bonne soirée
zebanx
 

zebanx

XLDnaute Accro
@job75
Bonjour Job75 et merci pour la précision ...ou comme dirait l'autre "Elementaire mon cher Job, élémentaire" -)

@Pierre-Jean
Bonjour Pierre-Jean,
J'ai pu avancer fortement sur mon code principal en reprenant la syntaxe que vous m'avez proposée et qui, indirectement, devrait servir à un sujet récent proposé par Caroline --)).
Cela ne retire rien à la solution proposée par Job75 que je conserve précieusement et que j'utiliserais dans des futurs codes !.

Merci à vous deux (;)) pour m'avoir répondu rapidement et avec des solutions excellentes qui ne requièrent qu'une boucle alors que celle de départ qui pouvait correspondre avec un array m'obligeait à en utiliser une de plus et se révélait difficile à incorporer pour moi.

Bon dimanche
zebanx
 

Discussions similaires

Statistiques des forums

Discussions
312 103
Messages
2 085 325
Membres
102 862
dernier inscrit
Emma35400