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 :

Modification d'une macro de récup de données [XL-2003]


Sujet :

Macros et VBA Excel

  1. #21
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    juste pour info, pour gagner du temps la méthode la plus rapide consolider des données sur des classeurs fermés est d'utiliser DAO ou ADO. Il faut ensuite définir une requête SQL sur une plage délimitée de données.
    J'ai un cas sur 120 fichiers excel avec environ 1 seconde par fichier.

  2. #22
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Par défaut
    Ha... On m'avait dit qu'utiliser ADO ça transformerait mon fichier en usine à gaz plutôt qu'autre chose .

    Enfin je vais tester quand même de toute façon qui ne tente rien n'a rien !

    Merci du conseil ^^.

  3. #23
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Citation Envoyé par Blop le bricoleur Voir le message
    L'erreur intervient là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(lig, 4) = Sheets("Feuil1(2)").Range("C15")
    Je vois pas d'où ça provient...
    Comme tu l'indique c'est une copie de feuille.. il faut un espace entre le 1 et la (

    Feuil1 ICI (2)
    A+

  4. #24
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Par défaut
    Merci ça marche ^^.

    Par contre ça me colle pas les données sur le classeur censé les recevoirs mais sur le classeur sur lequel je prend les données.

    Faudrait lui spécifier le nom du classeur sur lequel copier les donnée mais comment faire ?

  5. #25
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Quel est le nom de la feuille de données ?
    quel est le nom de la feuille qui "doit les recevoir" ?
    Edit:
    Les classeurs que tu ouvre sont tous dans le même répertoir ?
    Ils doivent tous êtres ouvert quel que soit leur nom.?

  6. #26
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Par défaut
    La feuille de donnée ici se nomme "tableau" et la feuille recevant les données se nomme "classeur".

  7. #27
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Je suppose que la feuille Tableau est dans le classeur que tu viens d'ouvrir et la feuille Classeur dans le classeur de base...!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Wks as workSheet
    Set Wks = Workboos("LeClasseurAvecLaFeuilleTableau").sheets("Tableau")
    with Sheets("Classeur")
        .Cells(lig, 4) = Wks.Range("C15")
    end with
    Sans plus de renseignements...

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Par défaut
    mea culpa, j'avais pas précisé les classeurs.

    Alors il y à le classeur reception.xls avec la feuille "classeur" (classeur qui recoit les données) et le classeur base.xls avec la feuille "tableau" (classeur avec les données de base).

    Ils ne sont pas dans le même répertoire.
    Comment ça il doivent tous êtres ouvert ?

    Y'a le classeur "reception" qui est ouvert c'est tout. Puis quand je lance la macro ça m'ouvre le classeur "base", copie les cellules demandées et ferme ce classeur.

    En éspérant avoir été assez précis .
    Merci

  9. #29
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Comme mis en exemple par LeForestier, il te faut préciser sur quel classeur et sur quelles feuille tu travaille.

    Tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim Wk1 as workbook, Wk2 as workbook
    Dim F1 as worksheet, F2 as worksheet ....
     
    Set Wk1 = Thisworkbook
    Set Wk2 = workbooks("base.xls")
     
    Set F1 = wk1.worksheets("classeur")
    Set F2 = wk2.worksheets("Tableau")
     
    ' Un exemple à adapter
    with F1
        .Cells(lig, 4) = F2.Range("C15")
    end with

  10. #30
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Je dispose d'une macro permettant d'aller chercher le contenu de diverses cellules dans des classeurs fermés. J'aimerais la modifier pour qu'a la place elle ouvre les classeurs, pioche les données et referme les classeurs. mais je n'ai pas la moindre idée de comment faire...

  11. #31
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Par défaut
    LeForestier -->

    nan mais ça c'était au début^^.

    Comme tout le monde me faisait des propositions différentes (et je remercie de s'être penchés sur mon problème) mon code finissait par ne plus ressembler à rien au final donc maintenant j'essaye de partir d'un code plus simple que j'adapterais au final à mon énnonçé du début.

    Donc là je cherche à ouvrir 1 classeur depuis un autre, à copier 1 cellule de ce classeur puis la copier dans l'autre puis le fermer pour finir.

    Une fois celà fait ce sera plus simple d'adapter le code pour plusieurs fichiers et pour plusieurs cellules .

    Voilà :p.

    aalex_38 ---->

    Merci ça fonctionne .

    Je vais pouvoir m'atteler à la tâche pour me rapprocher de mon code d'origine.

  12. #32
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Re,
    Il n'est pas nécessaire d'instancier tout ces objets...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Wks As Worksheet
    Set Wks = Workboos("base.xls ").Sheets("Tableau")
     
    'puisque ta macto est dans ce classeur, la feuille est disponnible directement.
    With Sheets("Classeur") 
        .Cells(Lig, 4) = Wks.Range("C15")
    End With
    Suffira amplement.
    A+

  13. #33
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 34
    Par défaut
    Merci LeForestier !

    Bon bha voilà, j'ai réussi à adapter ce bout de code pour finalement ouvrir tout les fichiers de mon dossier les uns après les autres et extraire ce qui m'interesse avec en prime une petite liste déroulante pour ne prendre les données que de certains de ces fichiers.

    Au lieu de mettre 27min avec l'ancienne version pour extraire les donnée d'environ 20 fichiers je met maintenant que 40 secondes.

    Je verrais pour l'optimisation, voir si je peux encore grapiller quelques secondes mais là ça me va parfaitement .


    Merci beaucoup de m'avoir aidés ! J'en ai chié mais bon, ça valais le coup ^^.
    Bonne continuation et bonnes vacances

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 0
    Dernier message: 23/03/2012, 09h59
  2. [Toutes versions] Modification d'une Macro pour un tri de données spécifique
    Par davidstarr dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/03/2011, 06h52
  3. Modification d'une Macro
    Par zahidovich dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2009, 17h51
  4. [AC-2000] Automation avec Excel : lancer une macro qui trie les données
    Par fredschmidt dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/09/2009, 14h47
  5. Réponses: 1
    Dernier message: 15/07/2008, 09h40

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