Lier 2 cellules afin qu'elles restent identiques - VBA (Urgent)

Fermé
SebLkp - 31 mai 2017 à 11:30
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 1 juin 2017 à 07:49
Bonjour,

J'ai créé un document Excel complexe qui aura pour finalité d'être utilisé par plusieurs personnes différentes. C'est un document qui effectue une multitude de calculs en fonction de quelques paramètres.

Mon document se construit comme ceci :

Feuille 1 : Paramètres très basiques, pour aller à l'essentiel
Feuille 2 : Paramètres plus avancés
Feuille 3 : Calculs
Feuille 4 : Résultats

Les calculs sont effectués en fonction des paramètres de la Feuille 2 exclusivement. La Feuille 2 récapitule également les paramètres trouvés sur la Feuille 1.
Pour le moment, lorsque je saisi un paramètre dans la Feuille 1, il s'actualise dans la Feuille 2 (Par une simple formule =[Feuille 1]A1)

Oui mais voilà, alors que certains utilisateurs procèdent de cette manière, d'autres préfèrent aller directement saisir tous les paramèters directement dans la Feuille 2. Du coup écrasent mes formules de type "=[Feuille 1]A1" et donc la Feuille 1 n'actualise pas car elle n'est pas dépendante de ma Feuille 2. Et cela crée des complications dans la compréhension et l'interpretation de mes utilisateurs.

J'aimerais lier ces cellules de manière à ce que :
- Si la cellule change sur Feuille 2, la cellule sur Feuille 1 changera aussi
- Et inversement

Une sorte de référence circulaire, mais je ne peux le faire avec des formules Excel car ces cellules seront vouées à être modifiées à la main en permanence. Je veux juste que, quoi qu'il arrive, elles restent égales.


J'ai déjà essayé de rédiger quelques codes VBA, mais en vain...

Merci beaucoup pour votre aide.

Sébastien
A voir également:

4 réponses

Bonjour,

Merci beaucoup pour ta réponse !

Comme tu l'a suggéré, mes 8 paramètres se situent sur une même colonne dans la feuille 1 => Parfait.

Cependant dans ma feuille 2, les paramètres ne sont pas du tout organisés de la même manière et varient de colonne ET de ligne pour presque chacune d'entre elles...

En fait il me faudrait J7 lié à D13, J8 à D14, J9 à D7, J14 à N20, J15 à N22....
Je pensais à répéter 8 fois ton code dans la maccro, en changeant :
Set pl = Intersect(Target, [J7])
Pour ne préciser qu'une seule case, qui renverrait à une seule case dans ma deuxième feuille, et répéter l'opération 8 fois avec différentes correspondances...

Comment dois-je modifier la ligne
Sheets("Feuill2").Range(c.Address).Value = Target
Afin qu'il ne renvoit pas à Address mais à une autre cellule ?
Sheets("Feuill2").Range(c."D13").Value = Target
C'est correct ?

Merci beaucoup pour ton aide.

Sébastien
1
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
31 mai 2017 à 15:24
tu peux faire comme ça aussi :
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Select Case Target.Address(False, False)
    Case "A1"
        Sheets("Feuil2").Range("B2").Value = Target
    Case "C7"
        Sheets("Feuil2").Range("D3").Value = Target
    ' etc
    End Select
    Application.EnableEvents = True
End Sub

là les valeurs doivent être modifiées une par une. Si un collé d'une plage peut avoir lieu il faut faire un mix entre la pécédente proposition et celle-ci.
eric
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
1 juin 2017 à 07:49
de rien...
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
31 mai 2017 à 11:42
Bonjour

réponse certainement idiote:

pourquoi ne pas mettre la feuille 2 en "veryhidden" (très cachée) ou protéger en écriture la zone sensible ?
0
Bonjour,

Merci pour votre réponse.

Le fait est que la Feuille 1 va être utile pour un certain type d'utilisateurs qui va vouloir aller à l'essentiel, avec seulement 8 paramètres.

Afin d'être plus précis, certains utilisateurs vont vouloir rentrer plus dans le détail et utiliser la Feuille 2, qui elle propose environ 40 paramètres dont les 8 présentés sur la Feuille 1.

De ce fait les deux Feuilles doivent rester accessibles...

Sebastien
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 249
Modifié le 31 mai 2017 à 12:58
Bonjour à tous,

michel t'aurais donné la réponse mais comme je suis de passage, dans le module Feuil1 :
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    If Target.Address = "$A$1" Then Sheets("Feuil2").[A1].Value = Target
    Application.EnableEvents = True
End Sub

idem mais en adaptant dans le module Feuil2
eric

edit : petite évol comme je viens de voir que tu avais 8 cellules :
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim pl As Range, c As Range
    Set pl = Intersect(Target, [A1:A8])
    If Not pl Is Nothing Then
        Application.EnableEvents = False
        For Each c In pl
            Sheets("Feuil2").Range(c.Address).Value = Target
        Next c
        Application.EnableEvents = True
    End If
End Sub

en les supposant consécutives (et les emplacements identiques).
Sinon remplace [A1:A8] par union([A1:A3],[A10:A14],[A18]) etc

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0