Résolu Copier cellules classeur(tot).feuil(lou) vers Classeur(lou).feuil(tot)

  • Auteur de la discussion Vincent_33
  • Date de début

Vincent_33

Nouveau membre
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 !!

 

Vincent_33

Nouveau membre
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 :


Code:
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...
 

zeb

Modérateur
Meilleure réponse
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 :

Code:
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.
Code:
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) :
Code:
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.
Code:
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
 

Vincent_33

Nouveau membre
Voilà en substance ce que j'avais fait :

Code:
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 !
 

zeb

Modérateur
Code:
source.Copy
cible.Paste Destination = Cells(i, j)
Bah voyons !
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 :
Code:
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".
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 136
Messages
6 718 136
Membres
1 586 399
Dernier membre
mehdivil59
Partager cette page
Haut