Copier/coller transposé si même valeur de cellule

Bonjour à tous,

Je me permets de poster un sujet concernant un problème que je rencontre.

En effet, j'aimerai pouvoir faire un copier / coller d'un classeur à un autre des données correspondant aux colonnes demandées.

Pour être plus claire, par exemple,

j'ai dans un premier classeur :

Nom Prénom Métier Age

Martin Pierre Agriculteur 52

Duval Audrey Pompier 26

et dans mon deuxième classeur

Prénom ------- -------

Métier ------- -------

Nom -------- -------

Et j'aimerai pouvoir récupérer les données voulues dans l'ordre souhaité du deuxième classeur.

J'ai commencé à écrire mon code, je voulais dans un premier temps créé une matrice qui permettrait de rechercher automatiquement les données dans le premier classeur

Sub importer()

'------------------------------ File name -------------------------------------

fdb = ThisWorkbook.Name    ' 2e classeur
fcb = Workbooks(fdb).Worksheets("via").Cells(3, 2)     '1er classeur
lcb = Workbooks(fdb).Worksheets("via").Cells(4, 2)     'chemin vers le 1er classeur

'------------------------------ Copy paste -------------------------------------

Dim mat(1 To 20, 1 To 20) As Integer
ind = 1
For i = 1 To 20
    For j = 1 To 20
        If Workbooks(fdb).Worksheets("Liste pers").Cells(i, 1) = Workbooks(fcb).Worksheets("Liste").Cells(j, 2) Then
        mat(ind, 1) = Cells(i, 1)
        mat(ind, 2) = Cells(j, 2)
        ind = ind + 1
        End If
    Next j
Next i

End Sub

Pouvez-vous m'aider s'il vous plait ?

Merci d'avance de votre aide.

Jin

Bonjour et bienvenue sur le forum

Un essai. Te convient-il ?

Bonjour gmb,

Merci de votre aide.

En revanche, j'aimerai que cela s'applique sur une liste démesurée d'informations. C'est pourquoi j'aimerai une méthode qui permette de repérer le titre de chaque colonne du classeur 1 et qu'elle retrouve le titre de chaque ligne du classeur 2 pour pouvoir copier/coller les données sans avoir à compter sur quelle ligne et sur quelle colonne se positionner.

Par ailleurs, au cas où il y aurait un ajout de colonne ou de ligne dans l'un ou l'autre classeur, qu'il n'y ait pas d'interférence sur le code.

Je ne sais pas si j'ai été claire dans mes propos ...

Pouvez-vous m'aider dans cette démarche ?

Merci d'avance.

Jin

Désolé mais là, il me faudrait un exemple ou deux pour bien voir ce que tu souhaites faire.

Ce que vous m'avez proposé comme solution précédemment correspond à ce que je recherche. Je vous en remercie.

Sauf que, j'aimerai que cela s'applique à un panel beaucoup plus large.

Supposons que je ne me retrouve pas avec 4 colonnes et 4 lignes mais avec plusieurs dizaines de lignes et de colonnes et qu'il est fort probable que des lignes et des colonnes s'ajoutent à celles existantes. Cela chamboulerait le code puisque dans le code actuel nous comptons le numéro de colonne qui sera collé sur le numéro de ligne correspondant or cela ne sera pas indéfiniment comme cela.

Par exemple :

Dans un premier temps, nous aurions :

Nom | Prénom | Métier | Age | Poids | Groupe sanguin |

Puis un jour, cela change :

Nom | Prénom | Métier | Age | Taille | Poids | Groupe sanguin |

Le code serait alors obsolète.

Et ainsi de suite ... puisqu'au fur et à mesure du temps, nous ajoutons de l'information à notre base de données.

C'est pourquoi j'aimerai pouvoir avec une matrice (ou peut-être pas? je ne trouve à l'heure actuelle pas la solution) repérer l'intitulé de la cellule, "Nom" / "Prénom" ... et qu'elle repère ce même intitulé dans le classeur suivant afin de pouvoir copier/coller les informations.

Je ne sais pas si cela est plus clair.

Merci à vous de prendre le temps de me lire et de m'aider.

Jin

Nouvel essai, si j’ai bien compris.

J’aurais préféré un exemple concret avec les 2 classeurs, montrant ce qu’ils sont avant que la macro ne soit lancée puis ce que la macro doit en faire…

Bye !

Bonjour,

Merci beaucoup de votre aide. C'est ce que je recherchais ! Désolée de ne pas avoir été plus claire et plus réceptive.

Je vais essayer de l'adapter à mon cas, ma base de données comporte des dizaines de paramètres mais si j'ai bien compris dans votre code, ça n'a pas d'impact.

Je vous remercie

Jin

Bonjour,

Je reviens sur le sujet car au jour d'aujourd'hui, je n'arrive pas à adapter votre code sur le mien.

En effet, dans ma démarche, je n'ai pas pas à la base des colonnes d'informations mais plutôt des lignes à transformer en colonnes.

Je pensais y arriver seule mais finalement je ne m'en dépatouille pas ...

Voici, le code fourni en commentaires et le code que je souhaite adapter.

Je ne vois pas où est mon erreur ...

Pouvez-vous m'aider ? ou dois-je faire un nouveau message ?

Sub Importer_verticalement()

' clne : column of premier classeur
' lgn : line of premier classeur
' col : column of deuxième classeur
' ln : line of deuxième classeur
' f : feuille 2 du premier classeur

    flag = 0
    For Each w In Workbooks
        If w.Name = "Premier classeur.xlsx" Then
            flag = 1
            Exit For
        End If
    Next w
    If flag = 0 Then
        MsgBox "Le classeur ''Premier classeur'' doit être ouvert", 16
        End
    End If
    Set f = w.Sheets("Feuil2")
    'For ln = 3 To f.Range("A" & Rows.Count).End(xlUp).Row
     For clne = 2 To f.Range("A" & Columns.Count).End(xlToLeft).Column
        'clne = Range("A3").CurrentRegion.Columns.Count + 1
         ln = Range("A1").CurrentRegion.Rows.Count + 1  'A1 représente la cellule où se situe les intitulés sur toute la ligne
        'For col = 1 To f.Cells(2, Columns.Count).End(xlToLeft).Column
         For lgn = 1 To f.Cells(Rows.Count, 2).End(xlUp).Row
           ' Set cell = Range("A3:A" & Range("A" & Rows.Count).End(xlUp).Row).Find(f.Cells(2, col), lookat:=xlWhole)
             Set cell = Range("A3:A" & Range("A" & Columns.Count).End(xlToLeft).Column).Find(f.Cells(lgn, 2), lookat:=xlWhole)
            If Not cell Is Nothing Then
            '    lgn = cell.Row
                 col = cell.Column
            Else
          '      lgn = Range("A" & Rows.Count).End(xlUp)(2).Row
          col = Range("a" & Columns.Count).End(xlToLeft).Column
          '      Cells(lgn, 1) = f.Cells(2, col)
          Cells(1, clne) = f.Cells(lgn, 1)
            End If
          '  Cells(lgn, clne) = f.Cells(ln, col)
             Cells(ln, col) = f.Cells(lgn, clne)
      '  Next col
      Next lgn
 '   Next ln
 Next clne
End Sub

Bonjour

Plutôt que ton code, c'est ton fichier qu'il me faudrait.

Rends le anonyme en changeant les noms si nécessaire (Nom 1,Nom 2 et en tirés vers le bas).

Bye !

Voici les fichiers demandés.

J'aimerai que les données de l'ancienne base de données aillent dans la nouvelle base de données.

Par ailleurs, cette nouvelle base est décomposée en plusieurs onglets là où dans l'ancienne, le tout était regroupé sur un seul onglet.

Mais rien que de changer de ligne à colonne, je ne m'en sors pas ... Pourtant je pense avoir bien tout modifier ?

Merci d'avance de votre aide.

Jin

90ancienne-bdd.xlsx (9.34 Ko)
93bdd.xlsm (18.50 Ko)

Nouvel essai.

26bdd.xlsm (18.50 Ko)
23ancienne-bdd.xlsm (20.18 Ko)

Bonjour gmb,

Tout d'abord, meilleurs voeux pour cette année 2015.

Je vous remercie de votre aide.

Votre macro correspond à mes attentes, j'ai réussi à me dépatouiller avec mes fichiers.

Merci beaucoup.

Jin

Rechercher des sujets similaires à "copier coller transpose meme valeur"