VBA excel et sécurisation des liens

Akhaos Messages postés 33 Statut Membre -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je vous expose mon projet;

j'ai 9 fichiers (pour le moment) excel à lier.
un bilan et un plan qui regroupe des infos contenues dans le reste des documents.
dans mon bilan il y a des valeurs que je voudrais reporté de document (exemple, cout de construction) contenu dans une cellule X, je ne parviens pas à trouver le code qui me permettrait de copier la valeur de la cellule (que j'aurais nommé au passage).

Donc ma question si c'était pas clair dès le départ (désolé); comment copier la valeur d'une cellule d'un autre fichier xls?
comment copier une plage de cellule (valeur numérique et de type string)?
Je voudrais connaitre le code tant que possible.

Merci par avance.
Configuration: Windows XP
Firefox 2.0.0.12

8 réponses

  1. Fxbrg Messages postés 715 Statut Membre 199
     
    Salut,

    Méthode simple pour lier une cellule d'un classeur A avec une cellule d'un classeur B : tu ouvres les deux classeurs, tu cliques sur la cellule de A, tu écris = puis tu bascules sur l'autre classeur, tu cliques sur la cellule que tu veux lier, puis tu tapes Entrée. Tu auras la syntaxe de la procédure...

    Et pour trouver le code VBA, si c'est ça que tu veux, tu lances l'enregistreur de macro avant de faire la manip ci-dessus

    :-)
    0
  2. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    dans mon bilan il y a des valeurs que je voudrais reporté de document (exemple, cout de construction) contenu dans une cellule X, je ne parviens pas à trouver le code qui me permettrait de copier la valeur de la cellule (que j'aurais nommé au passage)

    Avec une macro, pourquoi pas mais pourquoi aussi ne pas mettre tout simplement :

    ='mon_classeur_untel.xls]ma-feuille'!cellule_nommée
    0
    1. Akhaos Messages postés 33 Statut Membre 3
       
      simplement c'est vrai mais, je voudrais éviter le plus possible de faire apparaitre les formules, voila pourquoi je préfère passer par vba ou la macro à la rigeur.

      je tente les conseils et je vous tiens informé.

      0
  3. Akhaos Messages postés 33 Statut Membre 3
     
    Pour le gentil monsieur qui me donne des liens qui font 900pages je te remercies je lis progressivement ca depuis un moment, je sais pas pour toi mais je préfère avoir un minimum d'interaction quand j'apprends, c'est plus cordial et moins rébarbatif.
    Mais je te remercies pour les liens (que j'ai déjà en favoris :D :D)
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    simplement c'est vrai mais, je voudrais éviter le plus possible de faire apparaitre les formules, voila pourquoi je préfère passer par vba ou la macro à la rigeur.

    Dans ce cas-là je te donne une syntaxe de la macro :
         [A1].FormulaArray = "='mon_classeur_untel.xls]ma-feuille'!cellule"
         [A1].Value = [A1].Value
    

    Cela abouti au même résultat que la formule mais il n'y a plus la formule.

    Bien sûr tu peux travailler avec des variables et faire des boucles d'évolution sur plusieurs cellules et classeurs.
    Si tu mets ta macro à l'open du classeur, cela évite aussi le message de mise à jour des liaisons.
    0
    1. Akhaos Messages postés 33 Statut Membre 3
       
      la formule que tu propose ne marche pas;
      voici la formule que je donne:

      Sub copie3()
      [B26].FormulaArray = "=[chrono_adf.xls]plage!$h$217"
      [B26].Value = [h217].Value
      End Sub

      Avec ceci rien ne s'affiche.Mais grâce à toi je suis arrivé à ça:

      Sub copie2()
      ActiveCell.Value = "=[chrono_adf.xls]plage!$h$217"
      End Sub

      Mais malheureusement on voit la formule dans la barre de saisie de formule...
      Je voudrais éviter le plus possible que les formules apparaissent pour empêcher les erreurs de frappes, si vite arrivée et qui coûte cher dans certain cas.
      0
      1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744 > Akhaos Messages postés 33 Statut Membre
         
        bonjour

        Tu as raison, j'avais effacé quelques caractères utiles !
        Tu n'es pas allé tout à fait jusqu'au bout :
        Sub copie2()
        ActiveCell.Value = "=[chrono_adf.xls]plage!$h$217"
        ActiveCell.Value = ActiveCell.Value 
        End Sub
        

        et tu auras la valeur sans la formule et sans liaison autre que VBA !
        0
      2. Akhaos Messages postés 33 Statut Membre 3 > gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci, ca passe très bien, c'est la deuxième ligne qui fait qu'on ne voit pas la formule?

        Sinon j'ai deux questions supplémentaire:

        Comment spécifier la cellule affectée par la formule: au lieu de active.cell je met [cellule] ou $cellule$ ?

        Comment ajouter d'autre copie dans la même procédure ? je voudrais que mes utilisateurs n'est à appliquer la macro qu'une seule fois.

        Merci d'avance.
        0
      3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744 > Akhaos Messages postés 33 Statut Membre
         
        bonjour

        c'est la deuxième ligne qui fait qu'on ne voit pas la formule?

        Grace à "FormulaArray" excel va chercher la valeur dans le classeur en installant la formule.
        Cette formule donne une valeur et si tu attribues cette valeur à la cellule tu écrases laformule,
        comme avec un copier / collage spécial valeurs sur une formule.

        Comment spécifier la cellule affectée par la formule

        Tu as autant de façons que tu veux :
             [A1].FormulaArray = "='[mon_classeur_untel.xls]ma-feuille'!cellule"
             [A1].Value = [A1].Value
        ou en explicite
             range("A1").FormulaArray = "='[mon_classeur_untel.xls]ma-feuille'!cellule"
             range("A1").Value = range("A1").Value
        qui sont assez figés
        ou
             cells(ligne,colonne).FormulaArray = "='[mon_classeur_untel.xls]ma-feuille'!cellule"
             cells(ligne,colonne).Value =cells(ligne,colonne).Value
        afin de pouvoir faire des boucles en variant ligne et colonne
        et de même pour adressage de ta cellule à copier.
        

        Tu as bien sûr plein d'autres moyens d'adressage à utiliser selon les besoins : tu peux approfondir ce point pour trouver la méthode la plus adaptée à ton cas.
        0
  6. Polux31 Messages postés 7219 Statut Membre 1 204
     
    effectivement la méthode FLAMP est plus efficace et moins rébarbatif, j'en conviens, mais je préfère nettement la méthode FLTM qui est quand même plus enrichissante ne serai-ce que pour sa culture personnelle.
    Je crois que tu peux effacer les liens de tes favoris, visiblement ils ne te servent à rien ...

    ;o)

    polux
    0
    1. Akhaos Messages postés 33 Statut Membre 3
       
      tu peux m'éclairer sur ces méthodes ?

      Je vois pas du tout de quoi tu parles.
      0
  7. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour polux,

    Le monde n'est pas obligatoirement d'un seul bord et on peut naviguer entre bâbord et tribord, entre la méthode FLAMP et la méthode FLTM : j'apprécie tes méthodes mais elles vont rester secrètes pour beaucoup !

    bonjour Akhaos,

    je tente les conseils et je vous tiens informé.

    As-tu essayé la méthode VBA du poste 6 ?
    0
  8. Akhaos Messages postés 33 Statut Membre 3
     
    oui j'ai tenté mais ca passe pas...
    0