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 SubPouvez-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
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 SubBonjour
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
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