Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recopie d'une cellule dans un autre classeur par sélection de celle ci

7 réponses
Avatar
chalo
Bonjour =E0 tous,

Je me frotte au probl=E8me suivant:j'ai un classeur A avec des
r=E9f=E9rences clients dans lequel je dois saisir uniquement la raison
sociale pour la recopier dans un classeur B , toujours el m=EAme, sur
autre serveur;existe-il un e possibilit=E9 de le faire par macro
=E9venementielle cad quand je s=E9lectionne la cellule du classeur A et
que je fais enter la derni=E8re cellule vide de la colonne C du classeur
B est automatiquement remplie;les deux classeurs sont toujours ouverts
lors de la saisie.

Voil=E0 j'esp=E8re que c'est assez clair , par avance merci,
Chalo

7 réponses

Avatar
FFO
Salut chalo
Si j'ai bien compris tu veux ramener la valeur saisie d'un classeur dans la
même cellule d'un autre classeur
En partant du principe que le classeur de destination est ouvert
Dans le VBA de la feuille de saisie tu mets ce code

Private Sub Worksheet_Change(ByVal Target As Range)
A = Target.Address
Workbooks("Classeur de destination").Sheets("Onglet").Range(A) = Target
End Sub

Si tu souhaites limiter les cellules qui doivent être recopiées mets cet
autre code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = Range("H1").Column And Target.Row <= 10 Then
A = Target.Address
Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target
Else
Exit Sub
End If
End Sub

La ligne :
If Target.Column = Range("H1").Column And Target.Row <= 10
détermine la zone active pour ce code (ici H1 à H10, Range("H1") la colonne
et Target.Row < la ligne 10)

Espérant avoir répondu à ton attente


Bonjour à tous,

Je me frotte au problème suivant:j'ai un classeur A avec des
références clients dans lequel je dois saisir uniquement la raison
sociale pour la recopier dans un classeur B , toujours el même, sur
autre serveur;existe-il un e possibilité de le faire par macro
évenementielle cad quand je sélectionne la cellule du classeur A et
que je fais enter la dernière cellule vide de la colonne C du classeur
B est automatiquement remplie;les deux classeurs sont toujours ouverts
lors de la saisie.

Voilà j'espère que c'est assez clair , par avance merci,
Chalo




Avatar
chalo
Bonjour FFO, en fait lasaisie du classeur B de destination s'effectue
toujours dans la colonne C à partir d'une cellule de la Colonne D du
classeur A source MAIS il ne faut pas que la cellule du classeur A
soit recopié aux mêmes coordonnées d'origine sur le classeur B:exemple
une valeur en D345 doit se retrouver en C19, le point commun c'est que
les données partent de Co D Classeur A pour Col C Classeur B, c'est
tout.
Merci par avance,
Chalo

On 8 juin, 17:35, FFO wrote:
Salut chalo
Si j'ai bien compris tu veux ramener la valeur saisie d'un classeur dans la
même cellule d'un autre classeur
En partant du principe que le classeur de destination est ouvert
Dans le VBA de la feuille de saisie tu mets ce code

Private Sub Worksheet_Change(ByVal Target As Range)
A = Target.Address
Workbooks("Classeur de destination").Sheets("Onglet").Range(A) = Target
End Sub

Si tu souhaites limiter les cellules qui doivent être recopiées mets cet
autre code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = Range("H1").Column And Target.Row <= 10 Then
A = Target.Address
Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target
Else
Exit Sub
End If
End Sub

La ligne :
If Target.Column = Range("H1").Column And Target.Row <= 10
détermine la zone active pour ce code (ici H1 à H10, Range("H1") la c olonne
et Target.Row < la ligne 10)

Espérant avoir répondu à ton attente



Avatar
FFO
Salut chalo
Pas coton tes contraintes

Je te propose d'adapter la ligne de mon code suivante :

A = Target.Address

La variable "Target" est ta cellule de la colonne D classeur A
La variable A est ta cellule de destination colonne C classeur B

Il faut si l'adresse de ces cellules sont différentes ajuster l'égalité en
rajoutant l'instruction Offset de cette manière :

A = Target.Offset(-1,-1).Address

Dans cet exemple la valeur de Target situé dans la cellule D345 du classeur
A sera recopier dans la cellule C344 du classeur B

Offset (-1,-1) décale de -1 la ligne de Target et de -1 la colonne de Target
soit pour un Target à D345 un A à C344

Si tu souhaites reporter la cellule D345 du classeur A à la cellule C19 du
classeur B il faut mettre un Offset de :
Offset (-326,-1)
Et donc mettre la ligne

A = Target.Offset(-326,-1).Address

Il va de soit que l'écart entre la cellule d'origine colonne D classeur A et
la cellule de destination colonne C classeur B doit toujours être identique
quelque soit la cellule
dans l'exemple D345 et C19 l'écart est de 326
Pour D346 la cellule correspondante doit être C20
Pour D347 la cellule correspondante doit être C21
Etc....

N'oublies pas d'adapter la zone de saisie comme décrit dans ma première
réponse

Ainsique que le nom du classeur et de la feuille de destination (Colonne C
classeur B) avec la ligne:
Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target

Espérant avoir répondu à ton attente

Dis moi !!!!


Bonjour FFO, en fait lasaisie du classeur B de destination s'effectue
toujours dans la colonne C à partir d'une cellule de la Colonne D du
classeur A source MAIS il ne faut pas que la cellule du classeur A
soit recopié aux mêmes coordonnées d'origine sur le classeur B:exemple
une valeur en D345 doit se retrouver en C19, le point commun c'est que
les données partent de Co D Classeur A pour Col C Classeur B, c'est
tout.
Merci par avance,
Chalo

On 8 juin, 17:35, FFO wrote:
Salut chalo
Si j'ai bien compris tu veux ramener la valeur saisie d'un classeur dans la
même cellule d'un autre classeur
En partant du principe que le classeur de destination est ouvert
Dans le VBA de la feuille de saisie tu mets ce code

Private Sub Worksheet_Change(ByVal Target As Range)
A = Target.Address
Workbooks("Classeur de destination").Sheets("Onglet").Range(A) = Target
End Sub

Si tu souhaites limiter les cellules qui doivent être recopiées mets cet
autre code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = Range("H1").Column And Target.Row <= 10 Then
A = Target.Address
Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target
Else
Exit Sub
End If
End Sub

La ligne :
If Target.Column = Range("H1").Column And Target.Row <= 10
détermine la zone active pour ce code (ici H1 à H10, Range("H1") la colonne
et Target.Row < la ligne 10)

Espérant avoir répondu à ton attente







Avatar
chalo
On 12 juin, 08:21, FFO wrote:
Salut chalo
Pas coton tes contraintes

Je te propose d'adapter la ligne de mon code suivante :

A = Target.Address

La variable "Target" est ta cellule de la colonne D classeur A
La variable A est ta cellule de destination colonne C classeur B

Il faut si l'adresse de ces cellules sont différentes ajuster l'égali té en
rajoutant l'instruction Offset de cette manière :

A = Target.Offset(-1,-1).Address

Dans cet exemple la valeur de Target situé dans la cellule D345 du clas seur
A sera recopier dans la cellule C344 du classeur B

Offset (-1,-1) décale de -1 la ligne de Target et de -1 la colonne de T arget
soit pour un Target à D345 un A à C344

Si tu souhaites reporter la cellule D345 du classeur A à la cellule C19 du
classeur B il faut mettre un Offset de :
Offset (-326,-1)
Et donc mettre la ligne

A = Target.Offset(-326,-1).Address

Il va de soit que l'écart entre la cellule d'origine colonne D classeur A et
la cellule de destination colonne C classeur B doit toujours être ident ique
quelque soit la cellule
dans l'exemple D345 et C19 l'écart est de 326
Pour D346 la cellule correspondante doit être C20
Pour D347 la cellule correspondante doit être C21
Etc....

N'oublies pas d'adapter la zone de saisie comme décrit dans ma premiè re
réponse

Ainsique que le nom du classeur et de la feuille de destination (Colonne C
classeur B) avec la ligne:
Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target

Espérant avoir répondu à ton attente

Dis moi !!!!




Bonjour FFO, en fait lasaisie du classeur B de destination s'effectue
toujours dans la colonne C à partir d'une cellule de la Colonne D du
classeur A source MAIS il ne faut pas que la cellule du classeur A
soit recopié aux mêmes coordonnées d'origine sur le classeur B:ex emple
une valeur en D345 doit se retrouver en C19, le point commun c'est que
les données partent de Co D Classeur A pour Col C Classeur B, c'est
tout.
Merci par avance,
Chalo

On 8 juin, 17:35, FFO wrote:
Salut chalo
Si j'ai bien compris tu veux ramener la valeur saisie d'un classeur d ans la
même cellule d'un autre classeur
En partant du principe que le classeur de destination est ouvert
Dans le VBA de la feuille de saisie tu mets ce code

Private Sub Worksheet_Change(ByVal Target As Range)
A = Target.Address
Workbooks("Classeur de destination").Sheets("Onglet").Range(A) = Ta rget
End Sub

Si tu souhaites limiter les cellules qui doivent être recopiées m ets cet
autre code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = Range("H1").Column And Target.Row <= 10 Then
A = Target.Address
Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target
Else
Exit Sub
End If
End Sub

La ligne :
If Target.Column = Range("H1").Column And Target.Row <= 10
détermine la zone active pour ce code (ici H1 à H10, Range("H1") la colonne
et Target.Row < la ligne 10)

Espérant avoir répondu à ton attente- Masquer le texte des mess ages précédents -



Salut FFo, en fait je me suis mal exprimé:en reprenant mon exemple

(D345 en C19), je veux juste dire que la valeur vient de la col D mais
que l'écart est aléatoire pour arriver en C19(et donc la prochaine
saise doit arriver en C20 et la suivante en C21 etc...):par exemple le
client à rechercher pour mettre en C20 peut trés bien être D578 donc
l'écart n'est pas constant du tout, l'idée c'est que, en T1, la
sélection en D quelquechose se retrouve en C quelquechose, et qu'en T2
la sélection en D quelquechose d'autre se retrouve en C quelquechose+1
Je ne sais pas si c'est plus clair ainsi?l'idée est donc qu'une
celulle sélectionnée se retrouve en colonne c juste en dessous du
dernier enregistrement.
Merci pour le code jusqu'ici en tous cas,
Gonzalo



Avatar
FFO
Salut chalo
Tu me malmène !!!!
Dur dur !!!!
Je plaisante biensur !!!

Suivant tes dernières précisions fournies je te propose donc de modifier la
ligne :

Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target

comme ceci

Workbooks("Classeur1.xls").Sheets("Feuil1").Range("C65535").End(xlUp).Offset(1, 0) = Target

Noublies pas d'actualiser "Classeur1.xls" en fonction du nom de ton classeur
B et "Feuil1" en fonction du nom de l'onglet de destination

La Ligne :

A = Target.Address

Peut être supprimé

toute modification dans le classeur A colonne D sera ainsi reportée dans la
première cellule libre du classeur B colonne C

Je pense que celà devrait convenir

Rassures moi vite !!!!


On 12 juin, 08:21, FFO wrote:
Salut chalo
Pas coton tes contraintes

Je te propose d'adapter la ligne de mon code suivante :

A = Target.Address

La variable "Target" est ta cellule de la colonne D classeur A
La variable A est ta cellule de destination colonne C classeur B

Il faut si l'adresse de ces cellules sont différentes ajuster l'égalité en
rajoutant l'instruction Offset de cette manière :

A = Target.Offset(-1,-1).Address

Dans cet exemple la valeur de Target situé dans la cellule D345 du classeur
A sera recopier dans la cellule C344 du classeur B

Offset (-1,-1) décale de -1 la ligne de Target et de -1 la colonne de Target
soit pour un Target à D345 un A à C344

Si tu souhaites reporter la cellule D345 du classeur A à la cellule C19 du
classeur B il faut mettre un Offset de :
Offset (-326,-1)
Et donc mettre la ligne

A = Target.Offset(-326,-1).Address

Il va de soit que l'écart entre la cellule d'origine colonne D classeur A et
la cellule de destination colonne C classeur B doit toujours être identique
quelque soit la cellule
dans l'exemple D345 et C19 l'écart est de 326
Pour D346 la cellule correspondante doit être C20
Pour D347 la cellule correspondante doit être C21
Etc....

N'oublies pas d'adapter la zone de saisie comme décrit dans ma première
réponse

Ainsique que le nom du classeur et de la feuille de destination (Colonne C
classeur B) avec la ligne:
Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target

Espérant avoir répondu à ton attente

Dis moi !!!!




Bonjour FFO, en fait lasaisie du classeur B de destination s'effectue
toujours dans la colonne C à partir d'une cellule de la Colonne D du
classeur A source MAIS il ne faut pas que la cellule du classeur A
soit recopié aux mêmes coordonnées d'origine sur le classeur B:exemple
une valeur en D345 doit se retrouver en C19, le point commun c'est que
les données partent de Co D Classeur A pour Col C Classeur B, c'est
tout.
Merci par avance,
Chalo

On 8 juin, 17:35, FFO wrote:
Salut chalo
Si j'ai bien compris tu veux ramener la valeur saisie d'un classeur dans la
même cellule d'un autre classeur
En partant du principe que le classeur de destination est ouvert
Dans le VBA de la feuille de saisie tu mets ce code

Private Sub Worksheet_Change(ByVal Target As Range)
A = Target.Address
Workbooks("Classeur de destination").Sheets("Onglet").Range(A) = Target
End Sub

Si tu souhaites limiter les cellules qui doivent être recopiées mets cet
autre code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = Range("H1").Column And Target.Row <= 10 Then
A = Target.Address
Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target
Else
Exit Sub
End If
End Sub

La ligne :
If Target.Column = Range("H1").Column And Target.Row <= 10
détermine la zone active pour ce code (ici H1 à H10, Range("H1") la colonne
et Target.Row < la ligne 10)

Espérant avoir répondu à ton attente- Masquer le texte des messages précédents -



Salut FFo, en fait je me suis mal exprimé:en reprenant mon exemple

(D345 en C19), je veux juste dire que la valeur vient de la col D mais
que l'écart est aléatoire pour arriver en C19(et donc la prochaine
saise doit arriver en C20 et la suivante en C21 etc...):par exemple le
client à rechercher pour mettre en C20 peut trés bien être D578 donc
l'écart n'est pas constant du tout, l'idée c'est que, en T1, la
sélection en D quelquechose se retrouve en C quelquechose, et qu'en T2
la sélection en D quelquechose d'autre se retrouve en C quelquechose+1
Je ne sais pas si c'est plus clair ainsi?l'idée est donc qu'une
celulle sélectionnée se retrouve en colonne c juste en dessous du
dernier enregistrement.
Merci pour le code jusqu'ici en tous cas,
Gonzalo








Avatar
chalo
On 12 juin, 17:28, FFO wrote:
Salut chalo
Tu me malmène !!!!
Dur dur !!!!
Je plaisante biensur !!!

Suivant tes dernières précisions fournies je te propose donc de modif ier la
ligne :

Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target

comme ceci

Workbooks("Classeur1.xls").Sheets("Feuil1").Range("C65535").End(xlUp).Off se­t(1, 0) = Target
Noublies pas d'actualiser "Classeur1.xls" en fonction du nom de ton

classeur
B et "Feuil1" en fonction du nom de l'onglet de destination

La Ligne :

A = Target.Address

Peut être supprimé

toute modification dans le classeur A colonne D sera ainsi reportée dan s la
première cellule libre du classeur B colonne C

Je pense que celà devrait convenir

Rassures moi vite !!!!

euh c'est toujours pas ça FFO ça me fait l'indice n'appartient pas à

la sélection en erreur de déboggage quand je lance le truc

exemple en D345 dans le "classeurclient" on va avoir "SA truc 54 ave
des champs élysées"
dans le classeurtest(de destination) en C1 on doit avoir "SA truc 54
ave des champs élysées"
maintenant sur la sasie 2 en D58 on aura "sa bidule 68 rue du rocher"
on doit retrouver cela en C2
ma question est la ligne de
code :>Workbooks("Classeur1.xls").Sheets("Feuil1").Range("C65535").End(xlUp ).Offse­
t(1, 0) = Target
que je modifie donc en
Workbooks("Classeurtest.xls").Sheets("Feuil1").Range("C65535").End(xlUp).Of fse­
t(1, 0) = Target
doit elle se trouver dans "classeurclient" ou bien dans "classeurtest"?
(pour ma part j'ai compris que cela doit être en classeurclient)
désolé je dois faire une gaffe évidente mais je ne trouve pas où est
le problème....
Merci d'avance
Chalo

Avatar
FFO
Rebonjour à toi

Décidément nous sommes maudit des dieux !!!!
N'est il pas ????

Si nous considérons la configuration suivante :
classeur A feuil1 colonne D : la saisie
classeur B feuil1 colonne C : la destination

Pour une saisie exclusivement en colonne D feuil1 classeur A
Tu mets ce code dans le VBA de la feuil1 du classeur A :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = Range("D1").Column Then
Workbooks("ClasseurB").Sheets("Feuil1").Range("C65535").End(xlUp).Offset(1,
0) = Target
Else
Exit Sub
End If
End Sub

Attention la recopie ne peux au mieux démarrer qu'à la cellule C2 de la
Feuil1 du Classeur B

Si tu souhaites ardemment démarrer par la cellule C1 dis le mois il faudra
rajouter un bout de code dans cette perspective

Pour que l'opération fonctionne normalement les 2 classeurs doivent être
ouverts dans la même fenêtre Excel et non avec 2 applications Excel distinctes

Remplace les paramètres ClasseurB et Feuil1 par tes propres appellations
correspondantes dans la ligne :

Workbooks("ClasseurB").Sheets("Feuil1").Range("C65535").End(xlUp).Offset(1,
0) = Target


Me concernant en utilisant la configuration décrite en préambule le code
fonctionne à merveille

Il doit en être de même pour toi si tu respectes à la lettre mes
recommandations

Dis moi ce que celà donne ????


On 12 juin, 17:28, FFO wrote:
Salut chalo
Tu me malmène !!!!
Dur dur !!!!
Je plaisante biensur !!!

Suivant tes dernières précisions fournies je te propose donc de modifier la
ligne :

Workbooks("Classeur1").Sheets("Feuil1").Range(A) = Target

comme ceci

Workbooks("Classeur1.xls").Sheets("Feuil1").Range("C65535").End(xlUp).Offse­t(1, 0) = Target
Noublies pas d'actualiser "Classeur1.xls" en fonction du nom de ton

classeur
B et "Feuil1" en fonction du nom de l'onglet de destination

La Ligne :

A = Target.Address

Peut être supprimé

toute modification dans le classeur A colonne D sera ainsi reportée dans la
première cellule libre du classeur B colonne C

Je pense que celà devrait convenir

Rassures moi vite !!!!

euh c'est toujours pas ça FFO ça me fait l'indice n'appartient pas à

la sélection en erreur de déboggage quand je lance le truc

exemple en D345 dans le "classeurclient" on va avoir "SA truc 54 ave
des champs élysées"
dans le classeurtest(de destination) en C1 on doit avoir "SA truc 54
ave des champs élysées"
maintenant sur la sasie 2 en D58 on aura "sa bidule 68 rue du rocher"
on doit retrouver cela en C2
ma question est la ligne de
code :>Workbooks("Classeur1.xls").Sheets("Feuil1").Range("C65535").End(xlUp).Offse­
t(1, 0) = Target
que je modifie donc en
Workbooks("Classeurtest.xls").Sheets("Feuil1").Range("C65535").End(xlUp).Offse­
t(1, 0) = Target
doit elle se trouver dans "classeurclient" ou bien dans "classeurtest"?
(pour ma part j'ai compris que cela doit être en classeurclient)
désolé je dois faire une gaffe évidente mais je ne trouve pas où est
le problème....
Merci d'avance
Chalo