Recuperer plusieurs colonnes présentants une valeur commune

Bonjour,

Je souhaite effectuer une automatisation de traitements de données.

J'ai deux feuilles, dans une feuille des questions avec les réponses renseignés, dans l'autre vierge, je veux regrouper mes données.

La question 1, par exemple, a ses réponses présentes dans une seule colonne : facile

If Sheets("Data Excel").Cells(6, Rows(1).Find("Q1", LookIn:=xlFormulas, LookAt:=xlWhole).Column) Then
    colonne_Q1 = Sheets("Data Excel").Rows(1).Find("Q1", LookIn:=xlFormulas, LookAt:=xlWhole).Column
    Sheets("Data Excel").Range(Cells(7, colonne_Q1), Cells((Nb_lignes - 1), colonne_Q1)).Select
    Selection.Copy
    Sheets("Transformation TT").Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=False
End If

Je recherche dans ma feuille "Data Excel" (présentant les données), la colonne où il y a ecrit "Q1" à la ligne 6 puis je copie toutes les valeurs de cette colonne dans mon autre feuille "Transformation TT"

Ca c'est pas dur, ca fonctionne trkl.

Ma question est autre, j'ai par exemple 6 colonnes représentant la question 2.

En gros la question 2 est : "Renseigner votre contact"

Tu as donc une colonne "Prénom", une autre "Nom", une autre "adresse mail", une autre "numéro de téléphone". A la ligne 6 de toutes ces colonnes, j'ai "Q2" d'indiquer.

Exemple : B7=Martin; C7=Dupont; D7=Martin.Dupont@google.com; E7=0606060606

Comment je fais pour aller rechercher toutes les colonnes où la valeur "Q2" est présent en ligne 6 ???

L'objectif serait que j'ai dans ma celllule "B2" de la sheet "Transformation TT" j'ai "Martin:Dupont:Martin.Dupont@google.com:0606060606"

Merci d'avance pour votre aide

Salut Mojito !

Comment je fais pour aller rechercher toutes les colonnes où la valeur "Q2" est présent en ligne 6 ???

Tu peut utiliser la méthode "Find" de la VBA pour sa

Sub Cherche_Colonne()
Dim x As Range
Set x = Sheets("Data Excel").Rows(6).Find("Q2")
MsgBox x.Column
End Sub

Le Set x = Sheets("Data Excel").Rows(6).Find("Q2") veux dire que tu cherche dans la ligne 6 de ta feuille "Data Excel" où ce trouve la valeur Q2

Et le x.Column te permet de retourner le numéro de colonne (pas la lettre).

Restant à dispo si tu a d'autre question!

Hello Juice,

Si tu regardes ma première partie de code j'utilise bien la fonction find pour trouver Q1 et je trouve bien ma colonne ou j'ai ma Q1

Le problème c'est que ma Q2 est sur la colonne B,C,D et E, comment je vais avec find pour récuperer toutes ces colonnes et pas seulement la premiere ou je vois "Q2" ???

Merci de ta réponse si quick en tout cas

Re- Mojito !

Autant pour moi :p !

Alors normalement tu devrais utiliser la fonction "FindNext" mais j'ai essayer de comprendre et sa m'a gonfler xD

Ci-dessous un code qui le remplace et qui est tout aussi bien :

Sub Cherche_Colonne()
Dim y As Long, z As Long
Dim x As Range
For y = 1 To Range("XFD6").End(xlToLeft).Column - 1
    Set x = Sheets("Data Excel").Rows(6).Find(What:="Q2", After:=Sheets("Data Excel").Cells(6, y))
    If x.Column <> z Then MsgBox x.Column
    z = x.Column
Next
End Sub

Sa recherche dans ta ligne 6 la valeur Q2 et te sort un MsgBox à chaque résultat unique trouvé ;p

Restant à dispo !

Bonjour,

A mettre dans le module de la feuille où tu entres le code de la question (dans mon exemple, "Feuil1"). C'est une procédure événementielle Change() , La recherche du code de la question, par exemple Q2, est faite en colonne A de l'autre feuille (dans mon exemple, "Feuil2") et les valeurs sont récupérées à partir de la colonne B jusqu'à la dernière non vide :

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Plage As Range
    Dim Cel As Range

    If Target.Column > 1 Then Exit Sub
    If Target.Count > 1 Then Exit Sub

    With Worksheets("Feuil2")

        Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
        Set Cel = Plage.Find(Target.Value, , xlValues, xlWhole)

        If Cel Is Nothing Then Exit Sub

        Set Plage = .Range(.Cells(Cel.Row, 2), .Cells(Cel.Row, .Columns.Count).End(xlToLeft))

    End With

    Application.EnableEvents = False

    For Each Cel In Plage: Worksheets("Feuil1").Cells(Target.Row, Cel.Column).Value = Cel.Value: Next Cel

    Application.EnableEvents = True

End Sub

Merci pour vos réponses, je travaille dessus actuellement.

Juste petite question pour Theze, je comprends pas très bien le fonctionnement de ta procédure.

Lorsque je l'appelle dans ma macro,

je declare dans ma macro principale une valeur "target"

dim target 
target = "Q14"
call worksheet_change(target) 

, j'arrive pas à l'appeler ca me renvoie une erreur en mode incompatiblité de type...

Je l'appelle comme ça ?

Du coup je vais dans ma worksheet ("Data Excel"), j'initialise ma plage de lecture

set plage = .range(.CELLS(5,1), .cells(5,50))
set cel  = Plage.Find(target.Value, , xlValues, xlWhole)

que fais cette ligne ? : For Each Cel In Plage: Worksheets("Feuil1").Cells(target.Row, Cel.Column).Value = Cel.Value: Next Cel

Difficile à comprendre ton code quand je le compare avec celui de Juice

Comme je l'ai précisé, c'est une procédure événementielle donc exécutée de façon automatique une fois la valeur saisie dans une cellule de la colonne A de la feuille "Feuil1" (la procédure doit se trouver dans le module de cette feuille). Voici un classeur test :

10test-question.xlsm (17.11 Ko)
Rechercher des sujets similaires à "recuperer colonnes presentants valeur commune"