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 :

ijk columns

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 Sub

J'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").Value

Si 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 C'est EXACTEMENT la syntaxe adéquate.

Bonsoir,

nul besoin de le crier si fort ! Rien d'exceptionnel là dedans !
votre joie me réconforte et merci pour vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "loop lecture references indirectes"