copier-coller evolué

L

loulou

Guest
Bonjour a tous et bonjour le forum et bonne année 2003

Je souhaiterais que quelqu'un m'aide a trouver le code pour par exemple :

Copier les cellules A1,B1,D1,F1,I1 (de la feuille2) et les copier dans les cellules A12,B12,D12,F12,I12 (de la feuille 1)

Et tout ceci dans l'ordre A1 dans A12
B1 dans B12
D1 dans D12
F1 dans F12
I1 dans I12

Merci d'avance

Loulou
 
L

loulou

Guest
Merci Stéphane, mais lorsque j'applique le code, la valeur de la cellule A12 est copiée dans toutes les cellules A1,B1,D1,F1 et I1, alors que je souhaite est de copié :

A1 dans A12
B1 dans B12
D1 dans D12
F1 dans F12
I1 dans I12

Merci de ton aide

Loulou
 
@

@+Thierry

Guest
Salut Loulou

Il est inutile de poster plusieurs fois la question... Ton autre fil est superflu...
<http://www.excel-downloads.com/html/French/forum/messages/1_12986_12986.htm>

Pour STéphane j'ai testé ton code, il fait un truc étrange il semble qu'il réécrive en feuil1.... mais c'est vrai qu'il ne fait pas ce que souhaite Loulou...

Disons qu'un code comme çà fera ce qu'il te convient... Mais je préférais le Code de STéphane...
Sub Test()
With Sheets(1)
.Range("A12") = Sheets(2).Range("A1")
.Range("B12") = Sheets(2).Range("B1")
.Range("D12") = Sheets(2).Range("D1")
.Range("F12") = Sheets(2).Range("F1")
.Range("I12") = Sheets(2).Range("I1")
End With
End Sub


@+Thierry
 
T

Ti

Guest
Voici une autre façon de procéder :

Sub testTi()
Dim plageSource As Range, PlageDest As Range

With Worksheets("Feuil2")
Set plageSource = Union(.Range("A1"), .Range("B1"), .Range("D1"), .Range("F1"), .Range("I1"))
End With
With Worksheets("Feuil1")
Set PlageDest = Union(.Range("A12"), .Range("B12"), .Range("D12"), .Range("F12"), .Range("I12"))
End With

PlageDest.Value = plageSource.Value
End Sub

Avantage : si dans un programme tu dois effectuer plusieurs fois cette opération de copie, alors tu initialises au départ ta plage source et ta plage de destination. Tu peux faire ça au début du programme dans une procédure d'initialisation dédiée. Ensuite, chaque fois que, dans le reste du programme, tu veux copier tes valeurs, il te suffit d'appeler la ligne

PlageDest.Value = PlageSource.Value

ce qui est alors très rapide.

Evidemment, si c'est pour un copier/coller ponctuel, la façon de faire de Thierry est tout aussi valable, celle-ci ne représentant qu'une des nombreuses variantes qui peuvent exister.
 
@

@+Thierry

Guest
Très bien Ti !

C'est vrai Union.range convient impec.

Mais je reviens sur le code de STéphane, car en général il ne dit pas de truc pas possible, donc en rentrant chez moi j'ai repris ton truc...
En ré-essayant par étape :
Sub toto()
Feuil1.[A1] = Feuil2.[A12]
End Sub
=> Impec

Donc étape suivante :
Sub toto()
Feuil1.[A1, A2, A3] = Feuil2.[A12, A13, A14]
End Sub
=> Et non.... A12 est recopié sur A1/A2/A3

J'ai fait différents test style
Sub toto()
Feuil1.[A1], [A2], [A3] = Feuil2.[A12], [A13], [A14]
End Sub
Là j'ai une erreur du nombre d'arguments...

Non, domage car çà m'aurait été utile...
Bonne Soirée
@+Thierry
 
L

loulou

Guest
Merci a tous pour vos infos precieuses et bravo au Forum.

Questions complémentaires :

J' ai 2 fichiers Excel :
Fich1 = base de données
Fich2 = fichier dans lequel je copie certaines données de Fich1 pour les exploiter
Je souhaite faire 2 macros:
(j'ai essayé les Combobox mais là beaucoup trop compliqué pour moi !!!!!!)
Donc je disais 2 macros:
-1 macro pour copier les infos de Fich1
-1 macro pour coller les infos dans Fich2

Dans Fich1 (base de données Excel ), je selectionne manuellement (avec la souris) la cellule a partir de laquelle je souhaite copié des cellules qui seront sur cette ligne mais qui ne seront pas forcement cote a cote.
exemple:

1ere macro :

-Je suis dans le fichier Fich1

-Je clique avec la souris sur la cellule E45
(le clique de départ sera toujours dans la colonne E, mais pas forcément sur la même ligne ex: E15,...E45,.. E52,..)

-je souhaite copier les cellules E45, F45, H45, I45, J45 a BM45




2eme macro:

-Je me positionne dans le fichier Fich2 (fichier de destination)

-Je clique avec la souris sur la cellule B12 (par exemple)
(le clique de départ sera toujours dans la colonne B, mais pas forcément sur la même ligne ex: B10,B11...B20,.. B100,..)


-je souhaite a partir de ce moment là coller les infos que j'avais copiées dans la macro1 mais dans un ordre précis, a savoir:


Fich1 Fich2

E45 de Fich1 dans B12 de Fich2
F45 de Fich1 dans C12 de Fich2
G45 de Fich1 dans D12 de Fich2
H45 de Fich1 dans E12 de Fich2
I45 de Fich1 dans F12 de Fich2

Q45 a BM45 de Fich1 dans AW a CT de Fich2


Je remercie d'avance ceux (et celles) qui me voudront bien m'aider a trouver des réponses

A bientôt
Loulou
 
@

@+Thierry

Guest
Salut Loulou

Ton problème réside dans le fait que tu veux séparer en deux actions distinctes....

En fait il faudrait plutot voir les choses autrements, ton idée de ComboBox est sûrement le plus propre si tes Range Sources et Cibles ont une logique.

Pour faire simple on peut déclencher une InputBox... pour la partie 2em Macro...

Sub test_Ti_Thierry()
Dim plageSource As Range, PlageDest As Range
Dim LD As Integer, LA As Integer

LD = ActiveCell.Row 'ici tu t'es positionné en Fich1 sur la cellule de départ
LA = InputBox("Saisir le numéro de ligne de la colonne B du Fichier 2", _
"NUMERO LIGNE CIBLE", "Entier Numérique SVP")

With Workbooks("Fich1.xls").Worksheets("Feuil1")
Set plageSource = Union(.Range("E" & LD), .Range("F" & LD), _
.Range("G" & LD), .Range("H" & LD), .Range("I" & LD))
End With
With Workbooks("Fich2.xls").Worksheets("Feuil1")
Set PlageDest = Union(.Range("B" & LA), .Range("C" & LA), _
.Range("D" & LA), .Range("E" & LA), .Range("F" & LA))
End With

PlageDest.Value = plageSource.Value
End Sub

Voilà une Union.Range Ti/Thierry

Bon Aprèm
@+Thierry
 

Discussions similaires

Réponses
3
Affichages
410

Statistiques des forums

Discussions
314 021
Messages
2 104 671
Membres
109 100
dernier inscrit
Andpeno