Question EXCEL : liens entre feuille

Salut à tous, on va voir s'il y a des doués par ici..:p

j'ai des liens entre plusieurs feuilles ou classeurs différents
on a des formules du style =[nomdufichier.xls]feuille!$A$1
alors peut-on donner comme 'nomdufichier.xls' ou comme 'feuille' une association de cellule?
ex : =[A1+A2.xls]B1+B2!$A$1
ca serait par exemple pour avoir un lien avec un fichier excel (nom_prenom.xls) par rapport à une cellule A1 qui contient le nom et une cellule A2 qui contient le prénom.
Pensez-vous que cela est possible? si oui comment?..par macro? mais comme je m'y connais pas bien en macro je vois pas.
MERCI

Ancien webmaster de ... 
Nouveau newbbie de ccm !..mdr HAVE FUN ! THAT'S ALL !

19 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

La discussion porte sur la possibilité de créer des liens Excel entre classeurs dont le nom de fichier est construit à partir de cellules, par exemple A1 pour le nom et A2 pour le prénom. Plusieurs répondants estiment que ce n'est pas réalisable avec des formules seules et proposent une approche VBA pour assembler dynamiquement le chemin et le nom de fichier, puis insérer la formule dans la cellule cible. La solution la plus détaillée présente une procédure VBA qui lit Nom et Prenom, construit la formule pointant vers [Nom_Prenom.xls]Feuille!$F$42 et désactive les mises à jour automatiques, les classeurs devant être ouverts pour s'actualiser.

Bobot (l’IA à votre service)
  1. Bonjour kwanice,

    Je ne suis que programmeur d'occase pour le plaisir. En effet
    bien que beaucoup parle de VB comme d'une mdr...
    moi, j'apprécie beaucoup puisque toute la suite Office comporte
    du VBA, qui nous donne aussi accèss au VBS.

    Alors pour tes questions :

    "tu aurais pas un conseil pr que je m'y mette?"

    Tu peux lire ce petit tutorial(en construction) que j'ai écrit,
    ça devrait t'aider à comprendre la routine que j'ai fait :
    http://www.oricom.ca/lupin/Excel/Index.htm
    J'ai pas regardé ici sur CCM, s'il avait un tutorial sur le VBA,
    il te suffit de recherche sur le site :)

    "est-ce que l'on peut creer la meme procédure mais sans que ca enregistre?"

    Cette procédure n'enregistre pas de fichier, bien sur à l'exécution
    lorsque le lien est déposé dans la cellule, Excel tente d'ouvrir le lien
    pour effectuer une mise à jour de la donnée.

    Deux possibilité, soit on rajoute une instruction qui dit à Excel
    de ne pas effectuer de mise à jour, soit tu crée le fichier. Même
    en plaçant l'instruction [app..enabled..=false], a toutes les fois
    ou tu ouvrira ce fichier, il tentera de trouver le fichier de tous les
    liens.

    Lupin
    1. Re :

      Voici la procédure corrigé :)

      Sub CreerLien()

      Dim Fonction, Plage As String
      Dim Nom, Prenom As String
      Dim Boucle As Integer

      Const LimiteInf = 9
      Const LimiteSup = 70

      'Empêche la mise è jour des liens
      Application.DisplayAlerts = False

      'Variable témoin
      Fonction = "'E:\Mme BONIFASSI\[ALFONSI_François.xls]Absences_2004'!$F$42"

      For Boucle = LimiteInf To LimiteSup
      Plage = "D" & Boucle 'Création de l'indice
      Range(Plage).Select 'Sélection de la cellule
      Nom = ActiveCell.Offset(0, -3).Value 'Capture Nom
      If (Nom <> "") Then
      Prenom = ActiveCell.Offset(0, -2).Value 'Capture Prénom
      If (Prenom <> "") Then
      'Création de la formule du lien
      Fonction = "='E:\Mme BONIFASSI\["
      Fonction = Fonction & Nom & "_" & Prenom
      Fonction = Fonction & ".xls]Absences_2004'!$F$42"
      ActiveCell.Offset(0, 0).Value = Fonction
      Else
      ActiveCell.Offset(0, 0).Value = "Vide"
      End If
      Else
      ActiveCell.Offset(0, 0).Value = "Vide"
      End If
      Next Boucle

      Application.DisplayAlerts = True
      Range("A1").Select

      End Sub

      Lupin
      1. Bonjour Arsène!
        Le topic date, mais je rencontre le même problème que Kwanice.
        Votre réponse à l'air d'être adaptée à son fichier exemple, je n'arrive pas à comprendre ce script pour l'utiliser avec mes fichiers.
        Pouvez vous m'aider??
        Merci de votre réponse,
        Juju
      2. Salut!

        Mon problème est différent mais dans la forme peut sembler la même chose.
        J'ai une feuille BASE qui reprend les caractéristiques de produits, et une autre feuille qui sert de masque d'impression. L'utilité du fichier est de pouvoir imprimer des étiquettes (je sais je sais, pourquoi Excel?? ben parce que l'imprimante me sort du bon boulot qu'avec Excel...).

        Enfin bref... Donc dans mon masque, je tape le numéro de mon produit dans une cellule donnée et une fonction de recherche me renvoient les différentes valeurs qui sont au format texte. Le hic vient quand il s'agit de copier/coller le code barre correspondant au produit: ça n'est pas un nombre mais une image.

        Donc soit j'enregistre toutes les images dans le fichier ce qui n'est pas vraiment intéressant (à 185ko l'image par 128 produits soit plus de 23Mo) soit je demande à une macro ou une fonction d'aller chercher l'image, de l'ouvrir, de modifier les dimensions de l'image pour qu'elle rentre dans la cellule cible et enfin après impression de supprimer cette image des cellules cibles.

        Ca ne parait pas compliquer comme problème, mais quand t'es novice c'est autre chose... lol Donc je me tourne vers vous pour savoir au moins comment je pourrais faire.

        Merci d'avance
    2. bonjour, je souhaiterais recopier des informations d'une feulle à l'autre tout en gardant la meme forme et meme couleur.

      En fait je voudrais que les info que vont rentré les gens dans la feeulle A se retrouve automatiquement dans la feuille B toute en gardant la meme couleur de fond! c'est possible???

      Merci d'avavnce
      1. salut kwanice,
        ..en construisant ta formule, le lien avec les classeurs et feuilles successifs ( et certaines cellules de celle-ci) se fait automatiquement...
        Il suffit que les divers classeurs entre lesquels on navigue soient ouverts.

        Cordialement  et @+ 
        Chi va piano va sano..chi va sano va più lontano e più alto
        1. oué mais non...
          enfait c pas pour ca

          si en cellule A1 = Pierre
          en A2 = DURAND
          j'aimerais que le lien que je fais avec cette feuille de classeur utilise les cellules A1+A2 pour avoir PierreDURAND par ex.
          [PierreDURAND.xls]feuille!
          ok?

          Ancien webmaster de ... 
          Nouveau newbbie de ccm !..mdr HAVE FUN ! THAT'S ALL !
          1. Re..
            1) une association de cellules ne peut devenir ipso facto un fichier .xls.. elle peut, par contre, constituer une matrice ou avoir un nom..
            2) dans le cas particulier, il ne s'agit d'ailleurs même d'une association de cellules mais d'une somme de cellules...
            3) remarque étant faite qu'une telle somme ne donnera certainement pas, de plus, le résultat indiqué..

            ..alors...

            Cordialement  et @+ 
            Chi va piano va sano..chi va sano va più lontano e più alto
            1. Pour mettre sur une feuille, dans la cellule A1(exemple), les données d'une autre feuille, dans la cellule A1 mettre = , ensuite cliquer sur la feuille contenant les données et sur la cellule à mettre en A1, faire entrée et les données sont transférées .
              Clique sur afficher la barre de formule permet de voir la composition de la formule.
              1. Salut!

                Je ne comprends pas bien ce que tu cherches à faire, ni à quoi cela peut te servir.
                Pour voir apparaître un nom de fichier particulier, par exemple « Jean-Pierre.xls » dans une formule faisant référence à ce fichier particulier, il faut sauvegarder ce dernier sous le nom « Jean-Pierre ».
                Il n’y a pas de solutions simples pour cela et même en macro cela ne me paraît pas évident.
                Précise nous l’objet de ta question ou la finalité de ton problème et peut-être pourrons nous te faire une réponse + pertinente.

                @+
                SdQY
                1. je vais t'expliquer concrétement :
                  je dois faire un lien entre uen fichier qui porte le nom+prénom d'un salarié et un tableau récapitulatif qui comporte les noms de tous les salariés.
                  sur ce tableau la chaque ligne correspond à un salarié, et des liens sont fait entre ce tableau récapitulatif et les différents correspond à chacun des salariés.
                  pour automatiser tous ca, j'aurais aimé créer une formule qui reprenne le nom+prénom du salarié que j'auré saisie manuellement sur ce tableau récap. (qui a un lien avec un fichier du meme nom...)
                  (vous allez me demander pkoi?...parcequ'en fait ce tableau récapitulatif change souvent, les salariés aussi..donc en faisant une formule qui associe le nom+prénom je ne suis pas obligé de conserver les meme liaisons...on va dire c plus "dynamique")
                  enfin si quelqu'un a une idée...je suis preneur aussi..

                  c mieux expliquer?...i hope...

                  sinon vé mettre le ficher en ligne ca sera plus simple..mdr

                  Ancien webmaster de ... 
                  Nouveau newbbie de ccm !..mdr HAVE FUN ! THAT'S ALL !
                2. @kwanicere..salut kwanice,
                  Lier des tableaux entre eux de façon à ce que les éléments de tableaux détails soient repris dans un tableau récapitulatif ne pose pas de problème particulier. Cela suppose tout juste une toute petite macro de 3-4 lignes à activer pour extraire, créer, actualiser et trier, autant que de besoin, le tableau récapitulatif.

                  L'intervenant précédent pourra, sans doute, te détailler le montage du dispositif.

                  Pour ma part, je pense toutefois qu'un gestionnaire de base de données comme access conviendrait mieux pour ce job qu'un tableur qui a plutôt vocation à gérer des nombres.

                  Cordialement  et @+ 
                  Chi va piano va sano..chi va sano va più lontano e più alto
                3. Bonjour,
                  salut moi je voudrait ouvrir une base de donnees mais elle ne s ouvre que partiellement merci
              2. Bonjour,

                comment fait-on ça sous Excel,

                Alimenter le contenu d'une liste en fonction d'un choix d'une autre liste?

                Exemple: J'ai une cellule(par exemple la cellule 1) dont les valeurs d'une liste peu être 'Jour de la semaine' et l'autre valeur 'Mois de l'année', si l'utilisateur sélectionne Jour de la semaine dans la liste de la cellule 1, je veux que le contenu de la liste de la colonne 2 par exemple soit 'Lundi, mardi, mercredi etc...si l'utilisateur choisi 'Mois de l'année' le contenu de la liste de la colonne 2 sera Janvier, Février, mars etc

                est-ce que ça se fait?

                Merci JacK
                1. Bonjour,
                  je suis devant un problème avec mon fichier excel car je dispose d'une liste de choix et je voudrais qu'en fonction de l'élément choisi dans cette même liste ça me ramène vers une autre feuille du classseur (soit automatiquement soit par un bouton de validation)

                  Comment faire? macro ? VBA?

                  Merci d'avance pour vos solutions
                  1. Bonsoir,

                    Je reformule pour être sur d'avoir bien compris.

                    Tu as, pour chaque salarié un fichier Excel et tu souhaites récupérer dans un tableau récapitulatif certains élements de chaque fichier individuel.
                    En suposant que c'est bien cela le problème à résoudre:

                    1°) Utiliser le nom et le prénom d'un salarié comme lien n'est pas une bonne idée, car le jour où tu auras 2 homonymes (nom+prénom), tu ne pourras plus exploiter ton travail. Je te conseille de coder chaque salarié et de te servir de ce code comme lien. Le N° de Secu est unique et peut très bien faire l'affaire.
                    2°) Es-tu sur d'avoir besoin d'un fichier excel par salarié? D'habitude une ligne / personne suffit largement et pour la récap il suffit d'utiliser la fonction RechercheV(.,.,.,faux). Ce peut-être une feuille d'un même fichier ou un fichier différent.

                    Je suis assez d'accord avec hourrrah. Ton problème relève plus de l'utilisation d'une base de données qu'Excel. Cela étant, Excel est capable de très bien s'en sortir et c'est plus facile à mettre en oeuvre qu'une base Access par exemple.
                    Il ne faut jamais oublier que mettre en place une base de données, même avec des outils conviviaux comme Acces demande un minimum de connaisance en programmation et surtout une bonne analyse préalable.
                    J'ai pour habitude de dire que si j'affecte un coéfficient de difficulté de 1 pour le traitement de texte, alors il est de 10 pour un tableur et 100 pour une base de donnée, et avec 100 je suis probablement en dessous de la réalité.

                    Je te conseille donc, à moins que tu ne sois parfaitement rodé à la mise en place de base de données de voir si tu ne peux pas simplifier ton organisation en n'ayant qu'un fichier où tous les salariés sont en ligne, et où chaque info sur le salarié est dans une colonne (tj la même) du style:
                    N°secu/Nom/Prénom/date naissance/date entrée/fonction/ ....
                    Si tu tiens à ton Nom+prénom, tu peux même te créer un colonne en amont de toutes les autres (masquée eventuellement) du type Nom&Prénom.

                    @+
                    SdQY
                    1. bah merci bcp pour ton message..mais je pense que g vrément du mal à expliquer ou a me faire comprendre...mdr

                      1° pr la base de donné, j'i déja utilisé mais ce n'est pas pour moi c dans le cadre d'une formation que je donne à une personne. et dans le cadre d'un exercice pratique que l'ont fait ensemble.
                      Donc dans ce cas la la base de donné seré trop compliquer pr cette personne déja qu'avec la formule si elle se prend la tete..mdr

                      2° je met un lien vers ce fichier...vs comprendrez peut etre mieux...
                      http://kwanice.free.Fr/recap.xls
                      regardez l'onglet MAI
                      ...mici
                      a+

                      Ancien webmaster de ... 
                      Nouveau newbbie de ccm !..mdr HAVE FUN ! THAT'S ALL !
                  2. Bonjour,

                    J’ai regardé ton fichier. Mais, désolé ! Je ne sais pas faire une macro qui puisse enregistrer un fichier dont le nom correspond au contenu d’une cellule.

                    Peut-être est-ce possible, mais je ne suis pas assez bon connaisseur de VB.

                    Bon courage et si tu trouves, pense à nous donner la solution.

                    @+
                    SdQY
                    1. bah pr le moment je planche.....
                      je pense que c pas possible vu que la c carrément dans le nom du fichier que je veux faire une formule...
                      snif snif..

                      Ancien webmaster de ... 
                      Nouveau newbbie de ccm !..mdr HAVE FUN ! THAT'S ALL !
                  3. Je formule ma réponse pas très claire, déjà donnée

                    Tu nommes une feuille Récap .
                    Dans la caseA1 tu tapes =, ensuite tu cliques sur l'onglet de la feuille contenant nom+ prénom.
                    La feuille s'ouvre, tu cliques sur le nom que tu veux, la case s'entoure de pointillé, tu fais entrée et ton nom est transféré dans la cellule A1 de la feuille récap.
                    Tu fais la même chose pour le prénom mais dans la colonne B

                    Toute modification apportée sur la feuille nom+prénom sera immédiatement répercutée sur la feuille Récap.
                    1. pour tout dire j'avoue que je me noie un peu dans les messages
                      mais je sais que pour faire un lien on peut utiliser la formule " concatener"
                      exemple
                      feuille 1 cellule A1 "jean "
                      feuille 2 cellule A1 "durand"
                      feuille 3 cellule A1, tu vas dans formule " contanener "
                      1ere champ :cellule A1 feuille 1 ,deuxieme chant a remplir tu cliques dans la cellule A1 feuille 2 et la tu obtiens dans la troisieme feuille jean durand
                      note que j'ai peut etre rien compris a ton probleme et que c'est pas ca du tout ce que tu veux faire mais bon je me suis toujours demande a quoi servait cette fonction alors je suis contente d'avoir plus la placer;-)
                      bonne chance
                      1. mdr...c gentil..
                        mais en fait ca n'a rien a voir avec une formule...
                        puisque moi c pr un lien et....bah je laisse tomber...
                        je vais pas réexpliquer une 5 eme fois..lol

                        Ancien webmaster de ... 
                        Nouveau newbbie de ccm !..mdr HAVE FUN ! THAT'S ALL !
                      2. @kwanicekwanice, regarde la réponse que j'ai donné en N° 12, c'est la solution.
                    2. Bonjour Kwanice,

                      Voici une autre soluce ... VBA

                      Cette routine crée le lien en colonne D si et seulement si les colonnes A et B sont non-vide. Les limites sont défini par les constantes de la routine (LimiteInf et LimiteSup).

                      Sub CreerLien()

                      Dim Fonction, Tampon, Plage As String
                      Dim Nom, Prenom As String
                      Dim Boucle As Integer

                      Const LimiteInf = 9
                      Const LimiteSup = 72

                      'Variable témoin
                      Tampon = "'E:\Mme BONIFASSI\[ALFONSI_François.xls]Absences_2004'!$F$42"

                      For Boucle = LimiteInf To LimiteSup
                      Plage = "D" & Boucle 'Création de l'indice
                      Range(Plage).Select 'Sélection de la cellule
                      Nom = ActiveCell.Offset(0, -3).Value 'Capture Nom
                      If (Nom <> "") Then
                      Prenom = ActiveCell.Offset(0, -2).Value 'Capture Prénom
                      If (Prenom <> "") Then
                      'Création de la formule du lien
                      Fonction = "='E:\Mme BONIFASSI\["
                      Fonction = Fonction & Nom & "_" & Prenom
                      Fonction = Fonction & ".xls]Absences_2004'!$F$42"
                      ActiveCell.Offset(0, 0) = Fonction
                      Else
                      ActiveCell.Offset(0, 0) = "Vide"
                      End If
                      Else
                      ActiveCell.Offset(0, 0) = "Vide"
                      End If
                      Next Boucle
                      Range("A1").Select

                      End Sub

                      Lupin
                      1. wow.....t un boss.......!!!
                        punaise et tu vois c la que je me dis que je devrais vraiment me mettre au vba..
                        tu aurais pas un conseil pr que je m'y mette?
                        déja je vais essayer de comprendre ta "routine" ..:s
                        Mais merci c exactement ce que je voulais
                        est-ce que l'on peut creer la meme procédure mais sans que ca enregistre? enfin sans que ca creer le fichier (juste que ca fasse le lien dans la cellule) ?
                        Merci encore!!

                        Ancien webmaster de ... 
                        Nouveau newbbie de ccm !..mdr HAVE FUN ! THAT'S ALL !
                    3. et bah........... trop top...sérieux
                      merci bcp
                      je vais regarder ton site de plus prés enfin ton tuto!
                      encore un grand merci

                      c vré que bcp parle du vba comme de lamerdouille (pardon pr l'expression) mais je pense que c un language peut etre pas trop compliqué et comme tu dis "utilisé dans office" donc super répandu.

                      Merci pr ta 2eme procédure corrigé vrément cool!

                      Ancien webmaster de ... 
                      Nouveau newbbie de ccm !..mdr HAVE FUN ! THAT'S ALL !
                      1. Bonjour à tous,

                        Voila mon souci...
                        J'ai 2 feuilles Excel. Sur la première, je souhaiterais créer "une grille d'entrée" dans laquelle on retrouverait des éléments comme le nom de l'entreprise, la surface louée...qui se répercuterait automatiquement sur ma seconde feuille.
                        Je voudrais que les données s'incrémentent automatiquement dans un tableau ligne par ligne sur cette seconde feuille. (les unes à la suite des autres).
                        Merci d'avance pour la/les solutions que vous m'apporterez.
                        Krine
                        1. J'ai exactement le même problème... je sais que ton message date, mais y avais-tu trouver une solution??

                          Merci Alex
                        2. je veux additionner plusieurs feuille dans un nouveau dossier excel
                      2. dans une colonne je chiffre les N° des adhérents 1 à 100
                        quand je marque 001- 010 -020- 099 le premier zéro ne reste pas
                        pour quoi .
                        que dois-je faire pour rétablir la chose
                        merci d'avance

                        Calypso 41
                        1. Parce que c'est une valeur numérique, donc les zéros de gauche, non significatifs, sont enlevés d'office.

                          Va dans ton format de cellule et crée un format personnalisé "000". Et voilà!!!