IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

lier des cellules dans les deux sens


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Par défaut lier des cellules dans les deux sens
    Bonjour à tous !

    Voilà j'ai une feuille (A) où il y a des données dans des cellules non adjacentes, je les ai liées à d'autre cellules dans une autre feuille (B), jusque là tous va bien.
    Ce que je veux c'est copier cette ligne dans une autre feuille (C) qui me servira de base de donnée. Les lignes doivent avoir un numéro incrémenté de 1 à chaque nouvel enregistrement.
    Et je voudrais me servir de la feuille (B) comme feuille intermédiaire pour choisir d'importer des données déjà enregistrées dans la feuille (C). Pour cela il faudrait qu'il y ai une liaison bi-directionnelle des cellules entre la feuille (A) et la feuille (B). Je ne sais pas si c'est possible de faire une macro qui me permettrait d'enregistrer les données de la feuille (B) dans la feuille (C) et ensuite avec un combox de réinsérer les donnés choisies dans (C) dans la feuille (A).

    J'espère avoir été le plus clair possible.

    J'ai essayé une autre technique hier mais ca ne fonctionnait pas.(merci ouskel'n'or!)

    Merci par avance pour votre aide !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut noisat et le forum
    Comme d'habitude : tout ce que tu ne nores pas dans ton poste nous reste inconnu...
    j'ai une feuille (A) où il y a des données dans des cellules non adjacentes, je les ai liées à d'autre cellules dans une autre feuille (B).
    Tu veux que les modifications de certaines cellules de A soient reportées en B. C'est à peu près compris. Sauf que les cellules de A ne contiennent pas de formules ? Les cellules de B sont les mêmes que celles de A (adresses identiques ) ? C'est une liaison par formule ou par macro ?
    Ce que je veux c'est copier cette ligne dans une autre feuille (C) qui me servira de base de donnée. Les lignes doivent avoir un numéro incrémenté de 1 à chaque nouvel enregistrement.
    On commence la brasse coulée : on parlait de cellules, là, on aborde des lignes ???? Et on parle d'enregistrement : c'est quoi un enregistrement ? un enregistrement classeur, une modification de valeur d'une cellule (même quand on le fait trois fois de suite, parce qu'on s'est trompé de touche, on fait trois enregistrements) ?
    Et je voudrais me servir de la feuille (B) comme feuille intermédiaire pour choisir d'importer des données déjà enregistrées dans la feuille (C). Pour cela il faudrait qu'il y ai une liaison bi-directionnelle des cellules entre la feuille (A) et la feuille (B). Je ne sais pas si c'est possible de faire une macro qui me permettrait d'enregistrer les données de la feuille (B) dans la feuille (C) et ensuite avec un combox de réinsérer les donnés choisies dans (C) dans la feuille (A).
    Là, on aborde la nage dite du "Fer à repasser"
    Si on veut une liaison bidirectionnelle entre A et B, On peut faire (exemple à coller dans le module ThisWorkBook :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    On Error GoTo Err_Workbook_SheetChange
    'Déclaration ===============================
    Dim F_1 As Worksheet
    Dim F_2 As Worksheet
    Dim Plg As Range
    Dim Cel As Range
    'Validité ==================================
    If (Sh.Name <> "A" And Sh.Name <> "B") Or _
        Intersect(Target, [A1:E9]) Is Nothing _
        Then GoTo Sort_Workbook_SheetChange
    'MEI =======================================
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Set F_1 = Sheets("A")
    Set F_2 = Sheets("B")
    Set Plg = Intersect(Target, [A1:E9])
    'Traitement ================================
    For Each Cel In Plg
        If Sh.Name = F_1.Name Then
            F_2.Range(Cel.Address) = Cel
        Else
            F_1.Range(Cel.Address) = Cel
        End If
    Next Cel
    'Sortie obligatoire ========================
    Sort_Workbook_SheetChange:
        Application.ScreenUpdating = True
        Application.EnableEvents = True
        Exit Sub
    'Traitement des erreurs =====================
    Err_Workbook_SheetChange:
        MsgBox Err.Description, vbCritical + vbOKOnly, "ERREUR n°" & Err.Number
        Resume Sort_Workbook_SheetChange
    End Sub
    Tout changement de la plage A1:E9 dans les feuilles A ou B sera reporté sur l'autre. Bien évidemment, c'est une structure simple, mais on peut faire par le même principe que A1(A) soit liée à E3(B), A2(A) à B8(B), etc...)

    Dans un tel système, tout changement de A sera repporté sur B et versa dans le vice.
    Donc la reprise d'une sauvegarde modifiera les 2 feuilles.

    Les seules questions à se poser (outre celles du début), sont :
    qu'est-ce qu'on sauvegarde (cellules ou ligne) ? et comment : si tu sauvegardes de manière automatique à chaque changement, il faut référencer la sauvegarde : si tu sauves une ligne de A à GZ, tu vas galérer pour trouver la cellule qui a changé. Mais n'ayant que des données partielles, difficile de proposer un modus operandi qui tienne la route
    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Par défaut On va dans le bon sens .
    Bonjour,

    Merci pour ton aide Gorfael, mais je n'arrive pas à appliquer ce que tu as fais.

    Il s'agit d'un logiciel d'analyse médicale (infos patient nom, prénom etc ... et autres infos numériques et text de calculs d'analyses).

    Je veux faire une sélection multiple dans plusieurs feuilles "DATA", "BTM" et "OBSTACLE" et les enregistrer dans une nouvelles feuilles (DB) qui me sert de "base de donnée", sur une ligne. C'est à dire une ligne par patient. Ensuite je veux pouvoir ré-insérer ces données depuis la feuille "DB" dans les feuilles "DATA", "BTM" et "OBSTACLE".

    Pour cela j'utilise une feuille "intermédiaire" qui est directement liée aux feuilles "DATA", "BTM", et "OBSTACLE", ces données sont sur une seule ligne dans la feuille "intermédiaire", comme ca si je change une donnée dans "DATA" la feuille "intermédiaire" change et quand je clique sur le bouton "Sauver dans la Base" les infos des 3 feuilles "DATA", "BTM" et "OBSATCLE" qui se trouvent sur la première ligne de la feuille "intermédiaire" sont copiées dans la feuille "DB". Il suffit de copier la ligne 1 de la feuille "intermédiaire" dans le feuille "DB" et d'incrémenter un numéro de 1, pour qu'un nouvel "enregistrement" puisse se faire dans "DB", avec un clic sur "Sauver dans la base".

    dans "DATA" les cellules "D3,N3,X3,D4,N4,X4,D5,N5,X5,D6,N6,X6, puis "C15,E15", "B18 à B20" doivent être liées aux cellules "A1,B1,C1,D1 etc..." de la feuilles "intermédiaire"

    Un autre bouton "Importer de la base" doit me permettre de recopier une ligne de la feuille "DB" dans la feuille "intermédiaire", en choisissant via une boîte de dialogue le nom qui m'intéresse.

    J'espère avoir été cette fois-ci plus clair et compréhensible !!!

    Merci encore par avance pour vos lumières et vos connaissances partagées.

  4. #4
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    Je veux faire une sélection multiple dans plusieurs feuilles "DATA", "BTM" et "OBSTACLE"
    en même temps?
    Y a t-il une logique de sélection ou non?

    sinon, un échantillon du fichiers serait le bienvenu

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 17
    Par défaut échantillon
    Bonjour !

    Le fichier se trouve à http://pascontente.free.fr/ANA.xls.zip

    Les sélections doivent se faire dans un ordre précis tel que "D3" dans la feuille "DATA" soit lié en "A1" de la feuille "interméédiaire" et "N3" de la feuille "DATA" lié à "B1" de la feuille "intermédiaire" etc ...

    Ensuite utiliser une macro activée par un bouton "Sauver dans la base", qui enregistre la ligne "1" complète dans la feuille "DB" en incrémentant un numéro d'enregistrement à chaque clic sur ce bouton.

    Voilà !

Discussions similaires

  1. Un diagramme avec des flèches dans les deux sens
    Par raphz dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 5
    Dernier message: 24/01/2010, 09h27
  2. Réponses: 9
    Dernier message: 20/08/2008, 18h18
  3. [Oracle 8i] Jointure externe dans les deux sens
    Par Drizzt [Drone38] dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/09/2006, 15h10
  4. Double HashMap (Parcours dans les deux sens)
    Par Graffity dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/02/2006, 11h02
  5. Association navigables dans les deux sens
    Par DarkNagash dans le forum Diagrammes de Classes
    Réponses: 4
    Dernier message: 13/07/2005, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo