Loop et lecture de cellules avec références indirectes
Bonjour à tous,
J'exporte périodiquement des data dans une feuille excel, en col. E.
Je les trie et les ordonne, car certaines valeurs ont de nombreuses occurences. Je dois remplacer la valeur des cellules qui ont plus de 10 occurences (je modifie de la 11ème à la dernière occurence pour chaque valeur concernée).
Grâce à ce forum (et bien d'autres) et de l'huile de coude, j'ai pu coder et identifier sur quelle plage je dois modifier la valeur dans la col. E, selon le nombre d'occurences existant pour chaque valeur concernée.
Ces informations sont rassemblées dans les colonnes I, J et K.
Col. I = début de plage
Col. J = fin de plage
Col. K = nouvelle valeur à copier en col. E, dans la plage définie en I et J.
Une image pour vous aider :
Comme plusieurs valeurs dans la col. E ayant plus de 11 occurrences peuvent être concernées, j'essaie de créer une boucle (j'utilise WHILE) jusqu'à ce qu'il y ait une cellule vide en I.
J'utilise également la fonction INDIRECT pour récupérer la référence de la cellule inscrite (dans les col. I, J) plutôt que la valeur de la cellule cible.
Malheureusement j'obtiens une erreur...
Mon code est le suivant :
Sub Test1()
' Select NewValue range cell
Range("I2").Select
' Define left & right Range parameter for the row until cell value is empty
While ActiveCell.Value <> ""
LeftRange = ActiveCell.Value
RightRange = ActiveCell.Offset(0, 1).Value
Transp2Range = ActiveCell.Offset(0, 2).Value
' MsgBox (LeftRange & " " & RightRange & " " & Transp2range)
' Range(LeftRange.Value, RightRange.Value).Value = Range(Transp2Range.Value).Value
Range([INDIRECT(LeftRange)] & ":" & [INDIRECT(RightRange)]).Value =
Range([INDIRECT(Transp2Range)]).Value
ActiveCell.Offset(1, 0).Select
Wend
End SubJ'avoue avoir essayé différentes combinaisons, avoir fouillé, mais sans succès.
Si je teste le code pour une seule ligne, ça fonctionne parfaitement :
Range([INDIRECT("I2")] & ":" & [INDIRECT("J2")]).Value = Range("K2").ValueSi je teste "LeftRange / RightRange / Transp2range" dans une msgbox, le résultat affiché est correct (ils sont donc correctement définis).
Dans l'exemple de mon tableau (cf. image), je définis une plage avec les références de cellules calculées en I2 et J2, et je copie la valeur de K2 dans les cellules de cette plage. Ici, la valeur TOTO est donc copiée sur la plage $E$61:$E68.
Mais je voudrais réaliser cette opération pour chaque cellule non vide en I /J / K (la suite de mon exemple reviendrait à copier la valeur XXXXXXXX sur la plage $E$95:$E$95.
J'imagine que je ne suis pas trop loin du graal, mais je bloque sur quelque chose, syntaxe, mauvaise utilisation du WHILE, ou encore les deux.
Votre aide sera(it) donc bien sûr la bienvenue.
Merci
Bonjour Kryptogram et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum et notamment
- Joignez (si possible) un fichier pour augmenter vos chances d'obtenir de l'aide en cliquant sur le bouton Fichier de l'éditeur. Si votre fichier est trop lourd ou contient des données personnelles, créez une version allégée de votre fichier avec juste assez d'informations pour permettre de comprendre votre problème. Dans tous les cas, ne postez JAMAIS de fichiers avec des informations personnelles ou confidentielles (cet utilitaire peut vous aider à les retirer).
Merci de votre participation et de votre compréhension
Cordialement
Bonsoir,
vous avez une adresse de départ sous forme $E$24
une adresse d'arrivée sous forme $E$31
et une valeur de remplacement sous la forme "Toto" par exemple
Une plage sous VBA peut être définie de cette manière : Range("$E$24:$E$31), donc vous pouvez essayer ceci :
Range(LeftRange & ":" & RightRange).Value = Transp2Range
@ bientôt
LouReeD
Bonjour,
@BrunoM45 j'y vais de ce pas, merci
@LouReeD MERCIIIIIIIIII
Bonsoir,
nul besoin de le crier si fort !
votre joie me réconforte et merci pour vos remerciements !
@ bientôt
LouReeD