Récupérer la valeur suivante avant l'instruction next dans une boucle

Bonjour à tous,

j'ai un petit soucis avec une macro qui permet de concaténer une plage de sélection.

je souhaite concatener d'une certaine manière, je sais donc ce qu'il faut faire, mais je n'arrive pas l'exprimer.

voici le code d'origine:

Dim Rng_num As Range
Dim i As String

For Each Rng_num In Selection

    i = i & Rng_num & ", "

    Next Rng_num

    Range("ZU4").Value = Trim(i)

End Sub

Je souhaite faire ceci:

i = i & Rng_num & "_" & ( valeur de next Rng_num ) & ", "

récupérer la valeur suivante... bien que celle-ci n'est pas encore arrivée...

est-ce possible?

Je viens de me rendre compte que ce n'est pas très clair, enfaite je souhaite que quand cette plage est selectionnée:

Rouge1
bleu2
vert3

le résultat concatener donne:

Rouge_1, bleu_2, vert_3

Bonjour,

une solution consisterait à ne sélectionner que les données de la colonne des couleurs, et d'utiliser la propriété de décalage OffSet pour "récupérer" la valeur liée à chaque couleur:

For Each Rng_num In Selection 
    i = i & Rng_num & "_" & Rng_num.Offset(, 1).Value & ", "
Next Rng_num

A+

Bonjour,

Un test :

Sub CONCAT()
Dim R As Variant, RES$
For Each R In Selection.Rows
    RES = RES & Cells(R.Row, R.Column) & "_" & Cells(R.Row, R.Column).Offset(, 1) & ", "
Next R
[ZU4] = Left(RES, Len(RES) - 2)
End Sub

Cdlt,

Edit : Même réponse que AlgoPlus que je salue !

Algo plus,

alors j'ai essayé celà la première fois mais ça me renvoyais une erreur,

le tiens marche mais avec un soucis car il marque:

rouge_1, 1_bleu, bleu_2, 2_vert, vert_3.

Hors je ne veux pas les numéros en préfixe.

en fait j'ai fini par faire un code qui marche, pas très académique comme d'habitude ^^

Sub Combine_Num()

Dim Rng_num As Range
Dim i As String
Dim Count As Long

For Each Rng_num In Selection

Boucle1:

    If Not Count Mod 2 = 0 Then GoTo Boucle2

    i = i & Rng_num & "_"

    Count = Count + 1

    GoTo Suite

Boucle2:

    i = i & Rng_num & ", "

    Count = Count + 1

    GoTo Suite

Suite:
    Next Rng_num

    Range("ZU4").Value = Trim(i)

End Sub

Bonjour,

Bizarre j'ai testé mon code (du coup peut être légèrement différent de celui d'AlgoPlus) et j'arrive bien au résultat attendu avec les données fournies .. Etes vous certain que le jeu de donnée est le même ?

Cdlt,

Bonjour Ergotamine,

Mêmes doutes....

En sélectionnant les 3 cellules couleur du jeu d'essai fourni, avec "mon" code, on obtient :

Rouge_1, bleu_2, vert_3,

désolé je réponds tard!!

au temps pour moi, ça fonctionne très bien, j'ai juste lu trop vite, car je continuais de sélectionner les 2 colonnes avec mon code !

Sinon c'est exactement l'idée que j'avais eut au début, sauf que ça me renvoyais une erreur, j'ai donc abandonné. (je me suis mélangé les pinceaux)

au lieu d'écrire ça

Rng_num.Offset(, 1).Value

j'ai écris ça si je me souviens bien:

Rng_num.Offset(activecell.row, 1).Value

je me suis mélangé les pinceaux avec les coordonnées de cellules ou il faut renseigner ligne et colonne, mais là c'est un offset donc on veut pas d'offset de ligne donc valeur zéro. quel bêtise !

merci à vous pour les solutions !!

je vais du coup remplacer mon code car il fait 15km pour rien , pourquoi faire simple quand on peu faire compliqué, c'est ma devise

Rechercher des sujets similaires à "recuperer valeur suivante instruction next boucle"