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

Excel Discussion :

DECALER avec référence contenue dans une autre cellule [XL-2007]


Sujet :

Excel

  1. #1
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut DECALER avec référence contenue dans une autre cellule
    Bonjour la communauté,

    Comme d'hab'... je suis nul en formule Excel...
    Et, pour couronner le tout, je n'arrive pas à trouver le vocabulaire nécessaire pour expliciter correctement mon problème...

    Bref, voici ma question :
    Dans une cellule de mon classeur A (mettons I6), je récupère la valeur contenue dans une cellule d'un autre classeur B (mettons ='[Classeur_B.xls]Ma_feuille'!$D$6).
    Sur mon classeur A, dans une autre cellule (mettons M6), je cherche à :
    • récupérer la valeur décalée de 6 colonnes,
    • par rapport à la cellule référencée en I6.
    • C'est-à-dire récupérer la référence ='[Classeur_B.xls]Ma_feuille'!$D$6 (en M6) puis chercher la valeur située 6 colonnes à droite.
    • => au final, aller cherche le contenu de la cellule ='[Classeur_B.xls]Ma_feuille'!$J$6 en M6, du classeur A.

    J'ai essayé de scinder mes propos afin d'être le plus explicite possible. J'espère que vous me comprendrez.
    J'ai effectué de nombreux tests avec DECALER et INDIRECT. Mais je crois que c'est le fait de récupérer la référence, contenue en I6 du classeur A, qui me pose le plus de soucis.

    Je reste, de manière évidente, disponible pour toute information complémentaire.
    Je vous remercie par avance pour votre coup de main.

    Cordialement,
    Kimy

  2. #2
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Points : 1 925
    Points
    1 925
    Billets dans le blog
    5
    Par défaut
    Bonjour,
    Je ne comprends pas. Sachant que tu dois récupérer I6 pourquoi n'y accèdes tu pas directement ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Pas sur d'avoir la bonne méthode mais tu peux utiliser la fonction suivante pour récupérer la formule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function GetFormula(Cell As Range) As String
       GetFormula = Cell.Formula
    End Function
    Et puis formater le résultat pour utiliser la fonction suivante:

    =DECALER(INDIRECT("'[Classeur_B.xlsx]Ma_feuille'!$D$6");0;6)

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour,

    Merci pour vos réponses.
    Tout d'abord, @NVCfrm, j'ai besoin de cette formule car je souhaite l'appliquer à beaucoup d'autres cellules. Afin de ne pas avoir à aller chercher X-mille fois ma correspondance, je m'adresse à vous.
    Ensuite, @SmallFlower, je te remercie. Il est vrai que je n'avais pas forcément pensé à une fonction personnalisée. Cependant, cela m’étonnerait qu'Excel n'ai pas de formules (ou plutôt de combinaisons de formules) qui permettent d'effectuer la même chose.

    Je vais donc utiliser dans un premier temps une fonction personnalisée, en attendant, peut-être qu'un pro-formules-Excel me donne une solution.

    Merci encore à vous en restant, toujours, à votre entière disposition pour tout complément.

    Cordialement,
    Kimy

  5. #5
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Points : 1 925
    Points
    1 925
    Billets dans le blog
    5
    Par défaut
    Bonjour,
    Citation Envoyé par Kimy_Ire Voir le message
    .. Mais je crois que c'est le fait de récupérer la référence, contenue en I6 du classeur A, qui me pose le plus de soucis.
    Oui mais cette référence dans ta formule pourquoi ne pas la stocker ailleurs pour la combiner dans ta formule ou l'introduire directement.
    Je ne piges toujours pas malgré tes explic.
    Comme les Shaddok hein ! Pourquoi faire simple quand on peut faire compliqué.


    Citation Envoyé par Kimy_Ire
    ... Cependant, cela m’étonnerait qu'Excel n'ai pas de formules (ou plutôt de combinaisons de formules) qui permettent d'effectuer la même chose...
    Non. Il n'y en a pas. A moins de ne passer par les macros Excel4. Si j'ai bonne mémoire quelque chose du genre LIRE.CELLULE ou LIRE.FORMULE je ne sais plus.

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 2
    Points
    2
    Par défaut RechercheV
    Bonsoir Kimy_Ire,

    Je pense que dans ton cas tu peux utiliser la formule "RechercheV".

    Dans ton "Classeur A" dans la cellule "M6" tu écris la formule suivante :

    =recherchev(I6;[Classeur_B.xls]Ma_feuille!$D$6:$J$6;7;FAUX)

    Dans mon exemple je vais chercher l'information que sur 1 seule ligne du classeur B, mais tu peux en mettre plusieurs, au lieu de $D$6:$J$6 ce sera genre $D$6:$M$568. Le 7 correspond à la colonne que tu veux récupérer (soit dans ton cas "récupérer la valeur décalée de 6 colonnes")

    En espérant que c'est le résultat que tu souhaites.

    ++

  7. #7
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour,

    Merci à tous pour vos réponses.
    Comme vous me le précisez, je ne peux donc pas utiliser uniquement des fonctions Excel afin de faire ce que je souhaite.
    Ainsi, je suis passé par une fonction personnalisée :
    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
    Option Explicit
     
    Public Function decaler_lig_col(lig As Integer, col As Integer, oRng As Range)
    Dim oStr As String
    Dim oWkb As Workbook
    Dim oWksh As Worksheet
    Dim oOri As Range
     
    oStr = oRng.Formula
    'Call OpenIfNec(oStr)
     
    Set oWkb = Workbooks(Mid(oStr, InStr(oStr, "[") + 1, InStr(oStr, "]") - InStr(oStr, "[") - 1))
    Set oWksh = oWkb.Worksheets(Mid(oStr, InStr(oStr, "]") + 1, InStr(InStr(oStr, "]"), oStr, "'") - InStr(oStr, "]") - 1))
    Set oOri = oWksh.Range(Right(oStr, Len(oStr) - InStr(oStr, "!")))
     
    decaler_lig_col = oOri.Offset(lig, col)
     
    End Function
     
    Sub OpenIfNec(oStr As String)
    Dim nom As String
     
    nom = Replace(Replace(Mid(oStr, 3, InStr(oStr, "]") - 2), "[", ""), "]", "")
     
    On Error Resume Next
    Workbooks(nom).Activate
     
    If Err <> 0 Then
        Workbooks.Open nom
     
        If Err <> 0 Then
            MsgBox "Le fichier " & nom & " est introuvable."
        End If
    End If
    End Sub
    En revanche, je me suis rendu compte d'un problème qui n'a rien à voir :
    il est impossible d'ouvrir un classeur depuis une fonction.

    Quand j'applique la procédure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim oStr As String
    Dim oRng2 As Range
     
    Set oRng2 = Worksheets("Ma_feuille").Range("I6")
    oStr = oRng2.Formula
    Call OpenIfNec(oStr)
     
    End Sub
    je peux appeler sans problème la procédure OpenIfNec. Ceci n'est pas possible depuis une fonction.

    Au final : il faut que le classeur d'origine soit ouvert.

    Merci à tous pour votre participation.

    Cordialement,
    Kimy

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/03/2014, 15h08
  2. Réponses: 6
    Dernier message: 17/10/2012, 14h27
  3. [XL-2003] Fonction SI avec résulat dans une autre cellule
    Par jbs68 dans le forum Excel
    Réponses: 5
    Dernier message: 31/03/2010, 19h44
  4. Réponses: 10
    Dernier message: 20/10/2009, 15h35
  5. Réponses: 3
    Dernier message: 13/06/2006, 17h36

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