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 :

Chercher le contenu d'une cellule sur une autre fichier excel fermé


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur réglementation télécoms
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur réglementation télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Chercher le contenu d'une cellule sur une autre fichier excel fermé
    salut

    Je viens de débuter sur ce sujet (programmation VBA) et je suis bloqué, car j'aimerai chercher le contenu d'une ou plusieurs cellules d'un autres fichier excel 2010 fermé.

    Lors de ma recherche sur le net, j'ai trouvé cette commande "GetValueWithADO" néanmoins il ne la reconnait pas.

    Merci de bien vouloir m'aide.

    Salutation

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Bonjour,

    ce n'est pas une commande, tout au plus une procédure maison

    Voir dans l'aide d'Excel la copie avec liaison ou dans les tutoriels de ce forum l'accès aux classeurs fermés
    tout comme les nombreux exemples dans les discussions du bon forum, celui dédié au VBA …


    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur réglementation télécoms
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur réglementation télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci Marc de m'avoir répondu aussi rapidement, comme je suis nouveau sur ce forum, est-il possible de m'indiquer ou est ce que je peut trouver des exemple?

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    A ma connaissance, il n'est pas possible de lire le contenu d'un fichier (Excel ou autre) sans l'ouvrir d'une manière ou d'une autre (à par aller directement picorer sur les secteurs disque mais c'est plutôt coton).
    Cependant, il y a de nombreuses façons d'ouvrir un fichier et certaines peuvent être invisibles pour l'utilisateur (je parle de celui qui utilise la macro, pas de celui qui la code).
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Candidat au Club
    Homme Profil pro
    Ingénieur réglementation télécoms
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur réglementation télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos répone mais comme je l'ai dis au début, je suis un novice dans ce domaine.

    J'ai pu trouver une commande qui ouvre le fichier en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '   Ouverture du fichier dénommé :  Oran Microwave Link Report
        Workbooks.Open "C:\Users\Home's\Desktop\Oran_link Table"
    et une autre qui le ferme aussitôt le travail fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '   Fermeture du fichier active sans enregistrement des modifications
        ActiveWorkbook.Close SaveChanges:=False
    Néanmoins, mon objectif c'est de copier certaines donnée dans le fchier que g ouvert sur un autre pour son traitement.

    Par exemple :

    J'ai deux fichiers excel Fichier01 & Fichier02, j'ai prendre la valeur de la cellule A1 du fichier01 (qui est fermé) et la déposé dans la cellule C1 du deuxième fichier (Ouvert, car c'est le fichier final).

    Merci de bien vouloir m'orienté.

  7. #7
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Alors pour apprendre, l'idéal est d'activer le Générateur de macros puis d'effectuer les manipulations :
    un code est livré sur un plateau ! Je procède parfois encore ainsi afin de créer le squelette d'une procédure …

    Ensuite en plaçant le curseur texte sur une instruction du code puis en appuyant sur la touche
    l'aide VBA est affichée …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Candidat au Club
    Homme Profil pro
    Ingénieur réglementation télécoms
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur réglementation télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    merci pour ces éclaircissements, j’utilise cette même méthode parois, mais le problème c'est que sa marche pas et le code générer ne fonctionne pas.

    merci pour votre support

  9. #9
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Merci de poster le code ainsi généré en le balisant avec l'icône # dédiée conformément aux règles du forum …

    Et dire qu'un code est inutile avec une simple formule avec liaison !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une piste parmi tant d'autres avec "ExecuteExcel4Macro". Adapter la proc "RecuperationDonnees" au niveau de Col = "B" et de MsgBox RecupValeur("C:\", "Classeur.xls", "Feuil1", Col & I) puis tester le résultat obtenu et modifier ensuite pour la récup des valeurs :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Sub RecuperationDonnees()
     
        Dim Col As String
        Dim I As Integer
     
        'boucle de la ligne 10 à 15 sur la colonne B
        Col = "B"
        For I = 10 To 15
     
            'en référence A1
            MsgBox RecupValeur("C:\", "Classeur.xls", "Feuil1", Col & I)
     
        Next I
     
    End Sub
     
    Function RecupValeur(Chemin As String, _
                         NomClasseur As String, _
                         NomFeuille As String, _
                         Cellule As String)
     
        Dim Arg As String
     
        'vérifie le chemin
        If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
     
        'si c'est une plage, affiche un message et fin de procédure
        If InStr(Cellule, ":") Then
     
            MsgBox "Une seule cellule en argument", , "Cellule unique."
            Exit Function
     
        End If
     
        'ignore l'erreur si la plage est déjà en référence R1C1
        On Error Resume Next
     
        'transforme la référence en style R1C1
        Cellule = Range(Cellule).Address(, , xlR1C1)
     
        'construit l'argument
            Arg = "'" & Chemin & "[" & NomClasseur & "]" & NomFeuille & "'!" & Cellule
     
        'passe la valeur à la fonction
        RecupValeur = Application.ExecuteExcel4Macro(Arg)
     
    End Function
    Hervé.

  11. #11
    Invité
    Invité(e)

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Hassane31 Voir le message
    merci pour ces éclaircissements, j’utilise cette même méthode parois, mais le problème c'est que sa marche pas et le code générer ne fonctionne pas.
    On peut rarement utiliser ce code de manière brute pour de nombreuses raisons : options surabondantes, usage immodéré de Select/Selection, pas de structures de test ou de boucles, pas d'usage de variables, etc.

    Mais, comme l'a dit Marc, ça te donne toutes les pistes nécessaires pour savoir quels objets, quelles méthodes, quelles propriétés, quelles options et quelles valeurs d'option utiliser.
    Ca permet de gagner énormément de temps dans la recherche de solutions.
    Il faut ensuite le coupler à l'aide VBA pour comprendre les objets utilisés et leur syntaxe pour pouvoir obtenir un code utilisable et clair.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  13. #13
    Candidat au Club
    Homme Profil pro
    Ingénieur réglementation télécoms
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur réglementation télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Theze Voir le message
    Bonjour,

    Une piste parmi tant d'autres avec "ExecuteExcel4Macro". Adapter la proc "RecuperationDonnees" au niveau de Col = "B" et de MsgBox RecupValeur("C:\", "Classeur.xls", "Feuil1", Col & I) puis tester le résultat obtenu et modifier ensuite pour la récup des valeurs :
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    Sub RecuperationDonnees()
     
        Dim Col As String
        Dim I As Integer
     
        'boucle de la ligne 10 à 15 sur la colonne B
        Col = "B"
        For I = 10 To 15
     
            'en référence A1
            MsgBox RecupValeur("C:\", "Classeur.xls", "Feuil1", Col & I)
     
        Next I
     
    End Sub
     
    Function RecupValeur(Chemin As String, _
                         NomClasseur As String, _
                         NomFeuille As String, _
                         Cellule As String)
     
        Dim Arg As String
     
        'vérifie le chemin
        If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
     
        'si c'est une plage, affiche un message et fin de procédure
        If InStr(Cellule, ":") Then
     
            MsgBox "Une seule cellule en argument", , "Cellule unique."
            Exit Function
     
        End If
     
        'ignore l'erreur si la plage est déjà en référence R1C1
        On Error Resume Next
     
        'transforme la référence en style R1C1
        Cellule = Range(Cellule).Address(, , xlR1C1)
     
        'construit l'argument
            Arg = "'" & Chemin & "[" & NomClasseur & "]" & NomFeuille & "'!" & Cellule
     
        'passe la valeur à la fonction
        RecupValeur = Application.ExecuteExcel4Macro(Arg)
     
    End Function
    Hervé.

    Merci Theze pour l'exemple, seulement je n'ai pas compris la fonction "Recup_valeur" que t'as insérer, car lorsque je fais un test sa me retourne rien.
    Pour mon cas, j'aimerai que cette fonction me retourne la valeur et me la colle dans une cellule bien déterminée sur le premier fichier..

  14. #14
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Tout d'abords, ce n'est pas "Recup_valeur" mais "RecupValeur (l'orthographe a beaucoup d'importance dans la programmation !)
    Cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox RecupValeur("C:\", "Classeur.xls", "Feuil1", Col & I)
    *
    appelle la fonction "RecupValeur" en lui passant les arguments demandés, le chemin du dossier contenant le classeur (C:\), le nom du classeur visé (Classeur.xls), la feuille ciblée du classeur (Feuil1) et la cellule où doit être récupérée la valeur, ici, la variable "Col" contient la lettre de colonne et I le numéro de ligne de la cellule (pour l'exemple, j'ai fais une boucle pour récupérer les valeur des cellules de B10 à B15). Cette valeur est passée à la fonction "MsgBox" qui l'affiche dans une boite à l'écran, pour entrer ces valeurs dans des cellules particulières, il suffit de faire de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cells(3, I) = RecupValeur("C:\", "Classeur.xls", "Feuil1", Col & I)
    les valeurs sont inscrites dans les cellules C10 à C15 de la feuille active. Après, il suffit de faire fonctionner un peu ses méninges pour en comprendre le sens si on souhaite vraiment se lancer dans la programmation.

    Hervé.

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    cet exemple récupère la cellule A du fichier fermé et te la met dans la celle c1 du sheet(3) du classeur final
    en considérant que ce soit le classeur final qui soit le porteur de la macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub recupe()
    Application.ScreenUpdating = False
    Dim wbk2 As Object,valeur a string 
    Set wbk2 = Workbooks.Open("c:\.........mofichier.xls")
    valeur = wbk2.Sheets(1).Cells(1, 1)
    wbk2.Close
    Sheets(3).Cells(1, 3) = valeur
    End Sub
    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

  16. #16
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Points : 1 114
    Points
    1 114
    Par défaut
    Bonjour

    Pour le conenu d'une seule cellule dans un fichier fermé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim chemin As String
         chemin = ThisWorkbook.Path ' A ADAPTER
         Cells(2, 2) = ExecuteExcel4Macro("'" & chemin & "\[source.xls]Feuil1'!R2C1") 'R2C1=A2
    d'après la macro dite de Walkenbach
    Michel_M

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    pas mal michel

    il est vrai que l'on a tendance a les oublié celles la "ExecuteExcel4Macro"
    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

  18. #18
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    pas mal michel

    il est vrai que l'on a tendance a les oublié celles la "ExecuteExcel4Macro"
    C'est ce que j'utilise dans la fonction "RecupValeur" !

    Hervé.

  19. #19
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    salut theze

    effectivement je l'avais pas vu

    et une plage comment fait on?
    car ca m'intéresse afin de supprimer toutes les "workbooks.open" des mes fichiers
    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

  20. #20
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut





    Quand c'est possible, j'effectue directement une liaison via une formule R1C1 sur la plage; sinon via ADODB …

    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Accéder à la valeur d'une cellule d'un autre fichier excel depuis VBA
    Par guillaume7501 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/09/2008, 20h38
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. [VBA-E]copier une cellule d'un autre fichier excel?
    Par dev81 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/05/2007, 09h29

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