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 :

Problème pour récupérer une valeur avec ExecuteExcel4Macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut Problème pour récupérer une valeur avec ExecuteExcel4Macro
    Bonjour,

    Je suis pas du genre à demander de l'aide mais sa fait 2 jours que je me prend la tête sur une fonction pour aller récupérer des valeurs de plusieurs fichiers excel fermé...
    Etant donné que la formule indirect ne fonctionne pas sur des classeurs fermés j'ai du créer une fonction similaire, en voici le code :

    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
    Public Function GetVal(ByVal search_colonne As String)
     
      Dim chemin As String, valeur
      With ActiveCell
          chemin = "'\\DSFR451-FS0001\Common_A\Suivi\Suivi des heures\" & Cells(.Row, 2) & "\SUIVI HEURES " & Cells(.Row, 2) & "\" & _
                      Cells(.Row, 4) & "\[" & Cells(.Row, 2) & "-W" & Cells(.Row, 5) & ".xlsm]Semaine'!" & _
                      Range(search_colonne & Range(Cells(.Row, 6))).Address(, , xlR1C1)
     
        If Dir("\\DSFR451-FS0001\Common_A\Suivi\Suivi des heures\" & Cells(.Row, 2) & "\SUIVI HEURES " & Cells(.Row, 2) & _
                "\" & Cells(.Row, 4) & "\" & Cells(.Row, 2) & "-W" & Cells(.Row, 5) & ".xlsm") = "" Then
          valeur = 0
        Else
          valeur = ExecuteExcel4Macro(chemin)
        End If
      End With
      GetVal = valeur
     
    End Function
    quand je test dans un sub cela fonctionne parfaitement mais quand je l'utilise dans une cellule j'ai un #VALEUR!

    je ne vois pas pourquoi il ne m'affiche pas la valeur

    pourriez-vous me dire ce que j'ai mal fait ???

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

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Déjà tu mets With ActiveCell. Etrange pour une fonction qui ne sera pas forcément dans la cellule active.
    Utilise plutôt ou pour savoir d'où vient l'appel.
    Ca ne résoudra pas ton #VALEUR! mais ça sera plus correct.
    Une suggestion à tester : mettre dans un nom pour qu'il évalue ta formule
    eric

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    au dela de ce que dit eriic je dirais meme qu'une cells n'a rien a faire dans cette fonction

    ta fonction est sensée te ramener une valeur de cellule d'un fichier fermé et c'est tout

    et perso plutot que des chemin en dur dans le code de la fonction je l'utiliserais en argument elle pourrais te reservir

    un peu dans ce genre la
    pour tester la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        Dim chemin$, fichier$, feuille$, cellule As Range
        chemin = "C:\Users\polux\Desktop"
        fichier = "hhhhhtml.xls"
        feuille = "Feuil1"
        Set cellule = Range("C4")
        MsgBox GetVal_on_closed_fich(chemin, fichier, feuille, cellule)
     End Sub
    la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function GetVal_on_closed_fich(ByVal chemin As String, ByVal fichier As String, ByVal feuille As String, cel As Range) As Variant
        Dim Rc
        Rc = "R" & cel.Row & "C" & cel.Column
        GetVal_on_closed_fich = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & feuille & "'!" & Rc)
    End Function
    ca devient tout de suite plus clair dans la fonction
    et en plus elle peut te servir pour differentes cellule il suffit de modifier les argument dans la sub ,la fonction reste la meme
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re et pour le fun
    re et pour le fun et pour faire rougir robert le saint(Adob.connection")

    voici un model qui te ramera un string pour une valeur ou un tableau pour une plage de cellules
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub récup_une_plage_de_cellules()
        Dim chemin$, fichier$, feuille$, cellule As Range, rang As Range
        chemin = "C:\Users\polux\Desktop"
        fichier = "hhhhhtml.xls"
        feuille = "Feuil1"
        Set rang = Range("E3:F5")
        tablo = (GetVal_on_closed_fich(chemin, fichier, feuille, rang))
        Cells(1, 1).Resize(UBound(tablo), UBound(tablo, 2)) = tablo
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub récup_une_seule_valeur()
        Dim chemin$, fichier$, feuille$, cellule As Range, rang As Range
        chemin = "C:\Users\polux\Desktop"
        fichier = "hhhhhtml.xls"
        feuille = "Feuil1"
        Set rang = Range("E3")
        MsgBox GetVal_on_closed_fich(chemin, fichier, feuille, rang)
      End Sub
    'La fonction retourne un string ou tableau
    '1 un string si l'argument "rang" est une seule celluleet donc sa valeur
    '2 une variable tableau si rang est une plage de cellules donc les !! valeurs dans une variable tableau
    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
    Function GetVal_on_closed_fich(ByVal chemin As String, ByVal fichier As String, ByVal feuille As String, rang As Range) As Variant
        Dim Rc$, tableau(), lig&, col&
        If rang.Cells.Count = 1 Then
            Rc = "R" & rang.Row & "C" & rang.Column
            GetVal_on_closed_fich = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & feuille & "'!" & Rc)
        Else
            ReDim tableau(1 To rang.Rows.Count, 1 To rang.Columns.Count)
            For Each cel In rang.Cells
                lig = cel.Row: col = cel.Column
                Rc = "R" & lig & "C" & col
                tableau(lig - rang.Row + 1, col - rang.Column + 1) = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & feuille & "'!" & Rc)
            Next
            GetVal_on_closed_fich = tableau
        End If
    End Function
    pardon robert
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut problème pour récupérer une valeur avec ExecuteExcel4Macro
    Bonjour,


    Pour commencer je tenais à vous remercier pour vos réponse.

    je n'ai pas eu de formation VBA donc forcément mon code reste basic,
    Je ne connaissait pas la fonction thiscell donc j'ai utilisé activecell
    car j'utilise des valeurs de certaines colonnes de la même ligne ou se trouve la formule car les fichiers ne se trouvent pas tous au même endroit.

    j'ai essayé tous vos code et j'arrive au même résultat...

    quand je le test dans un sub cela me retourne bien ma valeur cherché mais quand je l'insère dans une cellule alors j'obtiens un #VALEUR!

    voici le code de mon test (pour info H_EXP_filmage est une plage nommée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
      MsgBox GetVal(Range("H_EXP_filmage"))
    End Sub
    et la il m'affiche bien la valeur


    et voici ce que je met dans la cellule (dans la cellule AF se trouve la plage nommé H_EXP_filmage) :

    quand j'exécute au pas à pas au final, j'ai bien l'adresse complète ou se trouve ma valeur mais il me met quand même #VALEUR!

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    voici le code de mon test (pour info H_EXP_filmage est une plage nommée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Sub test()
      MsgBox GetVal(Range("H_EXP_filmage"))
     End Sub
    ma fois si ta plage nommée est une plage de plusieurs cellules ca risque pas de fonctionner c'est sur

    on ne peut pas mettre x cellules dans une
    a tu seulement essayer d'adapter mon code post3? il est on ne peut plus simple
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/10/2014, 00h44
  2. HashTable : Problème pour récupérer une valeur
    Par Difré91 dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2011, 01h33
  3. [DisplayTag] [Débutant] Decorator & JSTL, problème pour récupérer une valeur.
    Par A&N_L dans le forum Taglibs
    Réponses: 6
    Dernier message: 21/07/2010, 18h04
  4. Problème pour récupérer une valeur
    Par matdev62 dans le forum Développement
    Réponses: 3
    Dernier message: 15/09/2009, 15h07
  5. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49

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