Envoi de données dans les 2 sens mais sans evénemt

D

David

Guest
Bonjour le forum.

J'aimerai envoyer des données dans les deux sens (cad que si l'on écrit une valeur dans la case B12 de la feuille1 elle se recopie dans la cellule D13 de la feuille 2 et inversement)

Pour cela on entre le code suivant dans les evenement des deux feuilles choisies.

Code:
Option Explicit
Private Sub Worksheet_change(ByVal Target As Range)
If Target.Address = '$B$12' Then Feuil2.Range('d13') = Feuil1.Range('b12')
If Target.Address = '$D$13' Then Feuil1.Range('b12') = Feuil2.Range('d13')
End Sub

Est il possible de faire la meme chose mais d'une manière plus générale, à l'aide de macro par exemple.

Merci d'avance
David
 

Jacques87

XLDnaute Accro
Bonjour David

D'abord une erreur dans ton code
Then Feuil2.Range('d13') = Feuil1.Range('b12')
pour appeler une feuille tu dois écrire WorkSheets('Feuil1') ou Sheets('Feuil1') mais surtout pas Feuil1

je te joins un fichier qui avec une procédure qui répond à ta demande
J'ai utilisé des boutons pour la lancer depuis l'une ou l'autre des feuilles
A toi de la copier selon tes besoins

Bon courage [file name=feuille.zip size=10178]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/feuille.zip[/file]
 

Pièces jointes

  • feuille.zip
    9.9 KB · Affichages: 26
  • feuille.zip
    9.9 KB · Affichages: 22
  • feuille.zip
    9.9 KB · Affichages: 26
D

David

Guest
Merci Jacques87

Then Feuil2.Range('d13') = Feuil1.Range('b12')
Ce que j'ai marqué fonctionne parfaitement , cela fais tout simplement appel au nom de la feuille et non au nom que tu lui donne (codename et non le name).

Est il possible de faire la meme chose (comme dans ton exemple ) a part que cela doit ce lancer automatiquement, des qu'on a rentré la valeur dans la cellule D13 ou B12 par exemple.
(bien sur toujours sans utiliser d'événement)

Mais merci quand meme pour ton aide.

David
 

Jacques87

XLDnaute Accro
Est il possible de faire la meme chose (comme dans ton exemple ) a part que cela doit ce lancer
automatiquement, des qu'on a rentré la valeur dans la cellule D13 ou B12 par exemple.
(bien sur toujours sans utiliser d'événement)


Sans utiliser d'évènement ! peut être avec des formules, mais je ne suis pas calé en formules
Toutefois j'ai transformé le fichier pour que ça puisse fonctionner dès que tu valides ta nouvelle valeur dans les cellules concernées

Then Feuil2.Range('d13') = Feuil1.Range('b12')
Ce que j'ai marqué fonctionne parfaitement , cela fais tout simplement appel au nom de la feuille et
non au nom que tu lui donne (codename et non le name).


C'est exact, paf dans mon pif !! ... mais comme je suis de la vieille école, je déclare toujours les objets d'une façon classique. [file name=feuille_20060113162340.zip size=6252]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/feuille_20060113162340.zip[/file]
 
J

Jacques87

Guest
Re:Envoi de données dans les 2 sens mais sans evén

Encore merci Jacques87.

mais j'aimerai faire la meme chose mais pas dans les evenements des feuilles mais dans les modules.

Crois tu que cela est réalisable?



PS: on m'a dis qu'il valait mieux utiliser les codename comme ça tu peux changer le nom de tes onglets sans aller tous modifier dans tes macros.(les codename restant toujours les memes)

Salutation

David ;)
 

Jacques87

XLDnaute Accro
Re:Envoi de données dans les 2 sens mais sans evén

j'ai placé les procédures dans un module comme tu me l'as demandé, mais l'appel de ces procédures devant se faire au changement de feuille (pour éviter un bouton) tu es obligé d'inclure cet appel dans les feuilles concernées
Je comprends ton inquiétude. Je suppose que tu désires étendre cette procédure à d'autres feuilles. Si c'est le cas il faudra trouver une autre solution
Quant à deuxième question concernant les 'codename' je ne sais pas, je ne me suis jamais posé la question. Je vais étudier et si je trouve quelque chose d'intéressant je t'en ferai part

Cordialement [file name=feuille_20060114113008.zip size=8818]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/feuille_20060114113008.zip[/file]
 
D

David

Guest
Re:Envoi de données dans les 2 sens mais sans evén

Re Jacques87

Est il possible selon toi de faire appel a des variables dans les événements.

Mais ces variables doivent etre des variables qu'une seule fois.

Je m'explique par exemple on marque un code
Code:
Dim Tval(1) As Variant 

Feuil1.select
Tval(1)= ActiveSheet.Name 
'ou ActiveSheet.CodeName suivant le cas

Dim X As Integer
    With ActiveWorkbook.VBProject.VBComponents(Tval(1)).CodeModule
    X = .countOfLines

    .InsertLines X + 1, 'Option Explicit'
    .InsertLines X + 2, 'Sheets(''Feuil2'').Range(''D13'').Value = Sheets(''Tval(1)'').Range(''B12'').Value'
    .InsertLines X + 3, 'End Sub'
    End With
Tval étant une variable calculé à un moment donné.
J'aimerai que lorsque le bout de code se copie dans l'evenement de la feuil1 que le code se transforme en:

Code:
Option Explicit
Sheets('Feuil2').Range('D13').Value = Sheets('Feuil1').Range('B12').Value
End Sub


Feuil 1 remplacant donc Tval(1)

Je sais, je crois que je reve un peu mais bon.

David
 

Jacques87

XLDnaute Accro
Re:Envoi de données dans les 2 sens mais sans evén

David

ton code est sensé, si ce n'est que tu ajoutes les 3 lignes désirées en fin du code qui te permet de les construire
De ce fait la procédure qui était

Dim Tval(1) As Variant
Feuil1.Select
Tval(1) = ActiveSheet.Name
'ou ActiveSheet.CodeName suivant le cas

Dim X As Integer
With ActiveWorkbook.VBProject.VBComponents(Tval(1)).CodeModule
X = .countOfLines
.InsertLines X + 1, 'Option Explicit'
.InsertLines X + 2, 'Sheets( ''Feuil2'').Range(''D13'').Value = Sheets(''Tval(1)'').Range(''B12'').Value '
.InsertLines X + 3, 'End Sub'
End With
End Sub


devient

Dim Tval(1) As Variant
Feuil1.Select
Tval(1) = ActiveSheet.Name
'ou ActiveSheet.CodeName suivant le cas

Dim X As Integer
With ActiveWorkbook.VBProject.VBComponents(Tval(1)).CodeModule
X = .countOfLines
.InsertLines X + 1, 'Option Explicit'
.InsertLines X + 2, 'Sheets( ''Feuil2'').Range(''D13'').Value = Sheets(''Tval(1)'').Range(''B12'').Value '
.InsertLines X + 3, 'End Sub'
End With
Option Explicit
Sheets('Feuil2').Range('D13').Value = Sheets(Tval(1)).Range('B12').Value
End Sub


alors que tu ne voudrais que :
Option Explicit
Sheets('Feuil2').Range('D13').Value = Sheets(Tval(1)).Range('B12').Value
End Sub

conclusion l'idée n'est pas farfelue, mais elle est mal exploitée :
premièrement tes nouvelles lignes se placent après le 'End Sub' de la procédure utilisée, mais seul du commentaire peut être placé après End Sub
de plus, je suppose que si ça marchait tu aimerais l'utiliser plusieurs fois avec une autre valeur pour la variable Tva(1)
et ne faut-il pas en faire autant pour 'Feuil2' ?
et enfin il faudra placer ces lignes dans la bonne procédure évennementielle

à creuser
 

Discussions similaires