Récupérer les valeurs de deux colonnes avec condition

Bonjour,

Je souhaite récupérer les valeurs de deux colonnes avec condition:

Mon fichier comprend des centaine d'enregistrement.
@ La valeur "Chaine" est la même dans tout les enregistrements et marque leurs début
@ la valeur "Val" diffère d'un enregistrement a un autre

Ce que je souhaite:

** Une fois la valeur "Chaine" repéré dans la colonne 'A', copier la valeur "Val" dans la colonne 'F' sur la même ligne
** Copier les valeurs de la colonne 'D' en commençant du haut jusqu’à atteindre la valeur 'oba-'. Ce qui est en dessous de 'oba-' ne doit pas être copier.
** Coller les valeurs de la colonne 'D' dans la colonne 'G' précédé par "scl=" en les concaténant par '&'.

Le fichier ci-joint illustre un extrait de mon fichier. Merci de votre aide.

Bonjour,

Un test

Bonjour à tous,

Option Explicit

Sub MiseEnFormeDonnees()

Dim ConcatEnCours As Boolean
Dim I As Integer, DerniereLigne As Integer
Dim ConcatVal As String
Dim Sh As Worksheet

    Set Sh = Sheets("Feuil1")

    With Sh
         DerniereLigne = .Cells.SpecialCells(xlCellTypeLastCell).Row
         Debug.Print DerniereLigne
         ConcatVal = ""
         ConcatEnCours = False
         For I = DerniereLigne To 1 Step -1
             If InStr(1, .Cells(I, "D").Value, "oba", vbTextCompare) > 0 Then
                ConcatVal = .Cells(I, "D")
                ConcatEnCours = True
             Else
                If ConcatEnCours = True Then
                   ConcatVal = .Cells(I, "D").Value & "&" & ConcatVal
                End If
             End If

             Debug.Print I & " : " & ConcatVal
             If .Cells(I, "A") = "Val" Then
                .Cells(I, "F") = "val"
                .Cells(I, "G") = "scl=" & ConcatVal
                ConcatVal = ""
                ConcatEnCours = False
             End If
         Next I

    End With

    Set Sh = Nothing

End Sub

Bonjour,

Merci M12 et Eric de vos réponses à ma requête. L'exécution des deux fichiers donnent le même résultat qui est partiellement requis,

puisque dans mon fichier j'ai précisé que :

@ La valeur "Chaine" est la même dans tous les enregistrements et marque leurs début
@ la valeur "Val" diffère d'un enregistrement à un autre

J'ai essayé d'adapter les deux programmes mais en vain, pour qu’ils traitent sur la cellule contenant la valeur fixe "Chaine", puis copier les valeurs

qui se trouvent à partir de la ligne ou se trouve la valeur non fixe "Val" et sur la colonne ou se trouve la valeur "oba",

c à d, j'aurai comme résultat pour le premier enregistrement les valeurs de D7 à D11, et non D6 àD11, précédé par "scl=".

Merci encore une fois d’avance de vos efforts.

Si "Val" succède systématiquement à "Chaine" (c'est comme cela que cela a été compris), "Chaine" ne sert à rien, sinon vous n'avez pas tout expliqué et qu'il pouvait y avoir des "Val" non précédés de "Chaine". Qu'en est-il précisément ?

Bonjour Eric,

Effectivement "Val" succède systématiquement à "Chaine" et tous les cellules ayant pour valeur "Val" sont précédés de "Chaine".

Seulement la valeur "Val" n'est pas constante (non unique); elle change d'un enregistrement à un autre, alors que la valeur "Chaine"

est unique; elle est toujours la même dans tous les enregistrements du fichier.

Pardon si j'ai pas bien formulé ma question au début et je reste à votre disposition pour d'autres info au besoin.

Encore une fois merci.

Vous auriez un exemple de fichier avec vos différents cas pour Val ?

Bonjour,

Ci-joint un fichier exemple.

Merci.

Option Explicit

Sub MiseEnFormeDonnees()

Dim ConcatEnCours As Boolean
Dim I As Integer, DerniereLigne As Integer
Dim ConcatVal As String
Dim Sh As Worksheet

    Set Sh = Sheets("Feuil1")

    With Sh
         .Range(.Cells(1, "F"), .Cells(1, "G")).EntireColumn.ClearContents
         DerniereLigne = .Cells.SpecialCells(xlCellTypeLastCell).Row
         ConcatVal = ""
         ConcatEnCours = False
         For I = DerniereLigne To 2 Step -1

             If InStr(1, .Cells(I, "D").Value, "oba", vbTextCompare) > 0 Then
                ConcatVal = .Cells(I, "D")
                ConcatEnCours = True
             Else
                If ConcatEnCours = True Then
                   ConcatVal = .Cells(I, "D").Value & "&" & ConcatVal
                End If
             End If

             If .Cells(I - 1, "A") = "SNB" Then
                .Cells(I, "F") = .Cells(I, "A")
                .Cells(I, "G") = "scl=" & ConcatVal
                ConcatVal = ""
                ConcatEnCours = False
             End If
         Next I

    End With

    Set Sh = Nothing

End Sub

Bonjour Eric,

Merci beaucoup Eric de votre solution qui répond bien a ma requête.

encore une fois merci de votre temps précieux accorde à mon souci.

Bonsoir à tous,

Avec retard, une approche Power Query :

EDIT : Pour le fun car Excel 2003.... est un tantinet obsolète pour Power Query !

Bonsoir JFL,

Effectivement l'approche de Power Query a donné les résultats attendus, seulement je n'ai jamais travaillé avec ce Power Query que j'ignore.

Merci de votre implication.

Bonsoir de nouveau,

Je vous remercie de ce retour !

Vous pourrez, utilement, bénéficier de toutes les fonctionnalités de cet outil fantastique lors d'une prochaine version Excel......

Complément gratuit à installer pour Excel 2010 et 2013, nativement intégré dans les versions postérieures.

Rechercher des sujets similaires à "recuperer valeurs deux colonnes condition"