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 :

recuperer les informations d'un autre document excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de léti07
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 100
    Points
    100
    Par défaut recuperer les informations d'un autre document excel
    bonjour à tous,

    j'aimerai créer un document qui resemble à ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nom doc__________%_____liste
    c8hf7-8-45-15 ___ 5 ____ 586, 984, 745
    le nom du document je le rentre moi-même (avec un lien dessus)
    mais j'aimerais pouvoir recuperer le % et ma liste qui se trouve dans un autre document (qui porte le nom qui se situe dans ma colonne "nom doc")

    je voudrai faire ça de façon automatique (avec juste un appuie sur un bouton)

    mon % se trouve toujours dans la même cellules
    et ma liste dans la même colonne

    Pour voir si ma colonne "nom doc" est vide j'utilise ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A5").EntireColumn.SpecialCells(xlCellTypeConstants).Select <> ""
    c'est le seul truc que j'ai reussi à faire pour l'instant et ça marche

    mais comment faire pour affecter à la colonne E (à partir de E5) une valeur si il y a quelque chose dans la colonne A de la même ligne??

    et comment faire pour recuperer les valeurs dans un autre document??


    j'espere que j'ai été assez claire
    et merci d'avance de m'aider

  2. #2
    Membre régulier Avatar de léti07
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 100
    Points
    100
    Par défaut
    j'ai reussi à affecter une valeur sur ma colonne C en fonction de la colonne A (si elle est rempli ou pas)

    il me reste donc à aller chercher une valeur dans un autre classeur.

    quelqu'un peux m'aider?

    merci d'avance

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je me dévoue
    Déjà, je ne comprends pas ta ligne
    Range("A5").EntireColumn.SpecialCells(xlCellTypeConstants).Select <> ""
    Pour voir si ta colonne est vide, si tu sélectionnes A5 et que A4 est renseignée, tu ne le sauras pas. Ensuite, inutile de sélectionner la dernière ligne renseignée pour savoir si elle est renseignée. Si c'est A5 et que A5 n'est pas renseigné, tu auras un message d'erreur.
    Enfin, évite d'utiliser Select

    Je vais supposer que A5 est toujours renseigné, tu obtiendras la même chose en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Vide = Range("A5").EntireColumn.SpecialCells(xlCellTypeConstants).Row = 5
    msgbox Vide 'Juste pour que tu puisses voir que je dis vrai ^^
    Pour le reste, peux-tu reformuler ton pb, j'ai peur de ne pas avoir compris
    A+

  4. #4
    Membre régulier Avatar de léti07
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 100
    Points
    100
    Par défaut
    J'ai enlever ce morceau de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A5").EntireColumn.SpecialCells(xlCellTypeConstants).Select <> ""
    je voulais juste savoir si mes cellules de A5 à A35 etait vide ou non (le reste je m'en fiche) et si elles ne sont pas vide je remplis mes cellules C5 à C35 (celle qui correspond au case non vide)

    pour cela j'ai fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim val, compteur
     
    For compteur = 5 To 35
        Range("A" & compteur).Select
        Range("C" & compteur).Select
        If Range("A" & compteur).Value <> "" Then
            nom = Range("A" & compteur).Value & (".xsl")
            Range("C" & compteur).Value = "OK"
        End If
     
    Next
    ca marche tres bien

    maintenant ce que je voudrai
    c'est pouvoir remplir ma cellule C ( à la place du "OK" ) avec une donnée qui se trouve dans un autre classeur (et qui se situe toujours dans la même colonne).
    le nom de ce classeur je le recupere dans ma variable "nom" (ca marche aussi )

    Mais comment faire maintenant pour recupere la valeur dans l'autre classeur?

    j'espere que je suis un peu plus clair
    n'hesitez pas à me poser des questions sinon

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Il suffit que tu désignes l'autre classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        If Range("A" & compteur).Value <> "" Then
            nom = Range("A" & compteur).Value & (".xsl")
            Range("C" & compteur).Value = Workbooks("NomDeLautreClasseur.xls").worksheets("NomDeLaFeuille").cells(NoLigne,NoColonne).value
        End If
    Je suppose que tu es dans le classeur devant recevoir la donnée et que l'autre classeur a été ouvert au préalable.
    Tu dis

    PS - Oui, c'était plus clair

  6. #6
    Membre régulier Avatar de léti07
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 100
    Points
    100
    Par défaut
    donc oui je suis dans le classeur qui doit recevoir la donnée
    mais l'autre classeur n'est pas forcement ouvert

    j'ai essayé ton code mais ca bug
    j'ai ce message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur d'execution '9':
    l'indice n'appartient pas à la sélection
    et il coince sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B" & compteur).Value = Workbooks(nom).Worksheets("résumé").Cells(16, 13).Value
    c'est peut etre à cause de "nom"

    car j'ai un classeur par ligne donc j'ai mis le nom du classeur dans une variable
    (j'ai fait le teste avec les classeurs ouverts)

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Avant ta ligne, vérifie ce que tu as dans "nom" (debugprint ou msgbox nom)
    Sinon, vérifie le nom de ta feuille, sinon, assure-toi que ton classeur est ouvert, sinon... j'vois pas
    Un conseil : Donne plus de code qu'on y voit plus clair. Où ouvres-tu ton classeur ? Où prends-tu son nom ? dans la même procédure ? etc...

  8. #8
    Membre régulier Avatar de léti07
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 100
    Points
    100
    Par défaut
    bah il me recupere bien le bon nom de classeur
    et ma feuille a bien le bon nom


    voila mon code entier :

    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
    Sub Bouton1_QuandClic()
    Dim val, compteur
     
    For compteur = 5 To 35
        Range("A" & compteur).Select
        Range("B" & compteur).Select
        Range("C" & compteur).Select
        If Range("A" & compteur).Value <> "" Then
            nom = Range("A" & compteur).Value & (".xls")
            Range("B" & compteur).Value = Workbooks(nom).Worksheets("Résumé").Cells(16, 13).Value
            Range("C" & compteur).Value = "ok"
        End If
     
    Next
     
    End Sub
    je trouve le nom du classeur à ouvrir dans la colonne A (du classeur dans lequel je dois recevoir les données)

    sur les noms dans la colonne A, j'ai créé un lien hypertexte pour ouvrir mes classeurs (si besoin)

    est ce que je dois forcer l'ouverture des autres classeurs (avec ensuite leurs fermetures)??
    ou bien indiquer dans mon code comment il doit acceder au classeur??

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    J'ai fait deux fois allusion à un fichier ouvert au préalable... Oui, le fichier contenant la données à récupérer doit être ouvert au préalable.
    Tu récupères son nom, c'est bien... Tu dois également avoir son chemin (!)... Tu l'ouvres... et enfin tu peux lire ce qu'il y a dedans.

  10. #10
    Membre régulier Avatar de léti07
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 100
    Points
    100
    Par défaut
    j'ai essayé ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Workbooks.Open ("T:\Projet Protéomique Externe\Brest\EDITH-I-05121\Résultats Clinprotools 3\C8\TEST Laetitia\C8 HCCA validation ter\" & nom)
    mais j'ai une erreur dans le "nom"
    il me met qui ne le trouve pas, c'est bizarre car il m'ouvre bien le bon document

    mais il me prend le nom qui se trouve dans une des cellules du document qu'il vien d'ouvrir

    je dois pas avoir la bonne formule pour l'ouverture

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Je crois que tu as vérifier nom... et qu'il possède bien l'extension .xls... alors essaie ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Workbooks.Open filename:="T:\Projet Protéomique Externe\Brest\EDITH-I-05121\Résultats Clinprotools 3\C8\TEST Laetitia\C8 HCCA validation ter\" & nom
    Tu dis

  12. #12
    Membre régulier Avatar de léti07
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 100
    Points
    100
    Par défaut
    j'ai essayé et j'ai toujours la même erreur

    c'est à dire qu'il m'ouvre bien le bon document pour la premiere ligne
    mais apres il prend le nom dans le document que je vient d'ouvrir donc il me met une erreur
    et il me prend pas la donnée à remettre dans l'autre document

    je sais pas si je suis tres clair

    je remet mon code (j'ai peut etre mis Application.Workbooks au mauvais endroit) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim val, compteur
     
    For compteur = 5 To 35
        Range("A" & compteur).Select
        Range("B" & compteur).Select
        Range("C" & compteur).Select
        If Range("A" & compteur).Value <> "" Then
            nom = Range("A" & compteur).Value & (".xls")
            Application.Workbooks.Open Filename:="T:\Projet Protéomique Externe\Brest\EDITH-I-05121\Résultats Clinprotools 3\C8\TEST Laetitia\C8 HCCA validation ter\" & nom
            Range("B" & compteur).Value = Workbooks(nom).Worksheets("Résumé").Cells(16, 13).Value
            Range("C" & compteur).Value = "ok"
        End If
     
    Next

  13. #13
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    j'ai pas tout lu mais ton probléme doit venir du fait que tu utilise le classeur actif.. !
    sans rien devant
    range(...
    te permet d'accéder au classeur actif..! et lorsque tu ouvre un classeur tu change de classeur actif... ! ... d'ou au retour de ta boucle..probléme tu n'est pas dans le bon classeur...

    soit tu précéde tous tes range... d'un ThisWorkBook.Range.... ou si tu trouve trop long utilise un with ..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    with ThisWorbook 
     
      .Range("A2").
    end With
    dans ce cas la tu met un . à la place de ThisWorbook.

  14. #14
    Membre régulier Avatar de léti07
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 100
    Points
    100
    Par défaut
    oui tu as bien compris le probléme

    j'ai essayé en mettant ThisWorbook devant tous mes Range
    mais il me met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    membre de méthode ou de données introuvable
    y a une reference à mettre?
    ou ca vient d'autre chose?

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Aïe ! Pauvre...
    Dim val, compteur

    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
    For compteur = 5 To 35
        Range("A" & compteur).Select
        Range("B" & compteur).Select
        Range("C" & compteur).Select
        If Range("A" & compteur).Value <> "" Then
            nom = Range("A" & compteur).Value & (".xls")
            Application.Workbooks.Open Filename:="T:\Projet Protéomique Externe\Brest\EDITH-I-05121\Résultats Clinprotools 3\C8\TEST Laetitia\C8 HCCA validation ter\" & nom
            DoEvents 'Laisse le temps au fichier de s'ouvrir
    'Là, tu es dans le fichier que tu viens d'ouvrir, donc...
            Thisworkbook.Range("B" & compteur).Value = Workbooks(nom).Worksheets("Résumé").Cells(16, 13).Value
            Thisworkbook.Range("C" & compteur).Value = "ok"
        End If
     
    Next
    'Thisworkbook est le fichier contenant la macro
    Essaie de comprendre la démarche
    Tu es dans le fichier contenant la macro : Tu lis le nom du fichier à ouvrir -> nom
    Quand ce fichier est ouvert tu es dans le fichier nom
    Donc, pour faire référence au fichier contenant la macro, soit tu le nommes (Workbooks(NomDuFichierAmacro).range etc
    soit tu utilises Thisworkbook
    Tu dis

  16. #16
    Membre régulier Avatar de léti07
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 100
    Points
    100
    Par défaut
    ca ne passait pas avec thisworkbook mais en mettant Workbooks(NomDuFichierAmacro).range ca marche bien

    merci bcp

    une derniere petite question

    il me met une erreur en me disant qu'il ne trouve pas le classeur (normal puisque la colonne est vide)

    j'ai donc mis ca :

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    For compteur = 5 To 35
        Range("A" & compteur).Select
        Range("B" & compteur).Select
        Range("C" & compteur).Select
        If Range("A" & compteur).Value <> "" Then
            nom = Workbooks("C8HCCA resultats ter.xls").Worksheets("non classes").Range("A" & compteur).Value & (".xls")
            Application.Workbooks.Open Filename:="T:\Projet Protéomique Externe\Brest\EDITH-I-05121\Résultats Clinprotools 3\C8\TEST Laetitia\C8 HCCA validation ter\" & nom
            Workbooks("C8HCCA resultats ter.xls").Worksheets("non classes").Range("B" & compteur).Value = Workbooks(nom).Worksheets("Résumé").Cells(16, 13).Value
            Workbooks("C8HCCA resultats ter.xls").Worksheets("non classes").Range("C" & compteur).Value = "ok"
        Else
            Exit For
        End If
    Next

    mais il me met toujours le même message
    comment lui faire comprendre que si il n'y a rien il s'arrete?

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Oui, c'est une solution... Personnellement, j'utilise la gestion d'erreur éventuellement associé à Resume
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
       On error resume next
            nom = Workbooks("C8HCCA resultats ter.xls").Worksheets("non classes").Range("A" & compteur).Value & (".xls")
            Application.Workbooks.Open Filename:="T:\Projet Protéomique Externe\Brest\EDITH-I-05121\Résultats Clinprotools 3\C8\TEST Laetitia\C8 HCCA validation ter\" & nom
        if err <> 0 then exit for
            Workbooks("C8HCCA resultats ter.xls").Worksheets("non classes").Range("B" & compteur).Value = Workbooks(nom).Worksheets("Résumé").Cells(16, 13).Value
            Workbooks("C8HCCA resultats ter.xls").Worksheets("non classes").Range("C" & compteur).Value = "ok"
        End If
    Next
    On error goto 0
    L'intérêt n'est pas ici mais dans certains cas, cela peut être intéressant.
    Imagine que tu veuilles écrire dans un fichier fermé, tu as une erreur, si (if err then) tu as une erreur tu ouvres ton fichier sur la ligne suivante. Associé avec Resume, placé après ouverture du fichier, tu retournes sur l'instruction ayant généré l'erreur et tu peux écrire dans le fichier maintenant ouvert.
    Bref, j'ai pris cette habitude mais ce que tu as fait est parfaitement adapté à ton cas

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/08/2006, 10h56
  2. Réponses: 28
    Dernier message: 09/06/2006, 14h05
  3. Réponses: 2
    Dernier message: 04/04/2006, 16h14
  4. Récupérer les informations d'un autre site
    Par deelyth dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 02/01/2006, 09h44
  5. Récuperer les fichiers d'une autre machine sur une autre
    Par khalidlyon dans le forum Réseau
    Réponses: 1
    Dernier message: 09/11/2004, 13h40

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