Copier cellules classeur(tot).feuil(lou) vers Classeur(lou).feuil(tot)
Dernière réponse : dans Programmation
Bonjour,
sous Excel, je gère des infos dans des fichiers C1 à CN, à chaque fois dans des onglets F1 à FP.
Je souhaite copier automatiquement vers la réciproque :
copier cellule(i,j) de l'onglet toto du classeur loulou
vers
cellule(i,j) de l'onglet loulou du classeur toto.
Dans ma base, je dois avoir en tout une vingtaine de noms différents de chaque toto et loulou..., soit environ 20 x 25 = 5000 combinaisons possibles...
Merci d'avance !!
sous Excel, je gère des infos dans des fichiers C1 à CN, à chaque fois dans des onglets F1 à FP.
Je souhaite copier automatiquement vers la réciproque :
copier cellule(i,j) de l'onglet toto du classeur loulou
vers
cellule(i,j) de l'onglet loulou du classeur toto.
Dans ma base, je dois avoir en tout une vingtaine de noms différents de chaque toto et loulou..., soit environ 20 x 25 = 5000 combinaisons possibles...
Merci d'avance !!
Autres pages sur : copier cellules classeur tot feuil lou vers classeur lou feuil tot
Lassé par la pub ? Créez un compte
Meilleure solution
Si loulou.toto est la source et toto.loulou la cible, une chose importante à savoir est "La cible existe-t-elle déjà ?"
Si non, c'est facile :
On peut aussi compliquer un peu plus les choses.
Un range, c'est une plage de cellules appartenant à une feuille (onglet) appartenant à un classeur.
Bon, comme un range peut désigner toute une plage de cellule, il faut écrire la dernière ligne comme ça (1,1 = première cellule de la plage et non pas cellule A1) :
Tiens, ça me donne une idée : pour jouer
on va copier plusieurs cellules.
Et comme je suis fainéant, je vire les variables Nom1 et Nom2.
Si non, c'est facile :
Function copie(Nom1 as String, Nom2 as String, i As Integer, j As Integer) Workbooks(Nom2).Worksheets(Nom1).Cells(i, j) = Workbooks(Nom1).Worksheets(Nom2).Cells(i, j) End Function
On peut aussi compliquer un peu plus les choses.
Un range, c'est une plage de cellules appartenant à une feuille (onglet) appartenant à un classeur.
Function copie_range(rg As Range) Dim Nom1 As String Dim Nom2 As String Dim i As Integer Dim j As Integer Nom1 = rg.Parent.Parent.Name Nom2 = rg.Parent.Name i = rg.Row j = rg.Columns Workbooks(Nom2).Worksheets(Nom1).Cells(i, j) = rg.Value End Function
Bon, comme un range peut désigner toute une plage de cellule, il faut écrire la dernière ligne comme ça (1,1 = première cellule de la plage et non pas cellule A1) :
Workbooks(Nom2).Worksheets(Nom1).Cells(i, j) = rg.Cells(1, 1).Value
Tiens, ça me donne une idée : pour jouer
on va copier plusieurs cellules.Et comme je suis fainéant, je vire les variables Nom1 et Nom2.
Function copier_tout_un_range(rg As Range) Dim cel As Range Dim ws As Worksheet Set ws = Workbooks(rg.Parent.Name).Worksheets(rg.Parent.Parent.Name) For Each cel in rg ws.Cells(cel.Row, cel.Column).Value = cel.Value Next End Function Sub Appel Msgbox "C'est parti !" copier_tout_un_range Workbooks("Toto").Worksheets("loulou").Range("A1:B3,C4") End Sub
Pour poser différemment mon problème, c'est un peu comme si je voulais créer une fonction qui prenne 2 chaines de caractères en argument... puis rebalancer ces deux arguments dans une ligne d'adresse.
Quelque chose du style :
ais le truc, c'est que je ne suis pas certain que ce soit une bonne idée de faire comme ça...
Quelque chose du style :
fonction copie (classeur,onglet,i,j) onglet.classeur.cellule(i,j)=classeur.onglet.cellule(i,j) fin fonction
ais le truc, c'est que je ne suis pas certain que ce soit une bonne idée de faire comme ça...
Voilà en substance ce que j'avais fait :
et j'ai le bazard avec mes références de noms....
Merci beaucoup pour ton aide : je vais regarder ça attentivement.
Le truc, c'est que je me posais vraiment une question philosophique : est-ce une "bonne" méthode pour résoudre mon problème de fond (que des personnes différentes gèrent chacune un (un seul) fichier avec des tas d'onglets, et qu'on fasse un suivi par dossier (avec un onglet pour chaque agent concerné) ? ... ou non....
merci encore !
Function copie_cellule(agent As String, projet As String, i, j) As Integer Dim nb As Integer Dim agent2, projet2, agent3 As String agent2 = "" projet2 = "" nb = 1 agent2 = agent & ".xls" projet2 = projet & ".xls" agent3 = " & agent2 & " Workbooks(agent2).Worksheets(projet2).Cells(i, j).Copy Workbooks(projet2).Worksheets(agent2).Paste Destination = Cells(i, j) copie_cellule = nb End Function Sub run() Dim toto As Integer toto = copie_cellule("mon_nom", "mon_projet", 11, 3) End Sub
et j'ai le bazard avec mes références de noms....
Merci beaucoup pour ton aide : je vais regarder ça attentivement.
Le truc, c'est que je me posais vraiment une question philosophique : est-ce une "bonne" méthode pour résoudre mon problème de fond (que des personnes différentes gèrent chacune un (un seul) fichier avec des tas d'onglets, et qu'on fasse un suivi par dossier (avec un onglet pour chaque agent concerné) ? ... ou non....
merci encore !
Bah voyons !
source.Copy cible.Paste Destination = Cells(i, j)
Pour info, ceci ne peut pas fonctionner, Destination n'étant pas un attribut de Paste. Au contraire, c'est un attribut de Copy et je t'encourage à l'utiliser si tu veux tout copier, d'une cellule à l'autre, y compris les formules, les attributs, les couleurs, etc.
Mais dans ce cas, pourquoi utiliser la méthode Copy ? Utilise ça, c'est bien plus simple :
Cellule1.Value = Cellule2.Value
Quant à tes problèmes métaphysiques, je suis désolé, je ne sais que répondre, sinon qu'Excel n'est pas vraiment fait pour faire de l'exploitation partagée, même si des mécanismes existent, laissant penser le contraire. Ta méthode ne me semble pas "mauvaise".
Lassé par la pub ? Créez un compte