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 :

[VBA-E] Base de donnees routine


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut [VBA-E] Base de donnees routine
    Bonjour,
    Voici mon probleme,
    J'ai dans un dossier plusieurs fichiers Excel qui ont exactement le mm format

    J'ai cree une petite routine qui permet de recuperer les donnees (leur nombre de lignes varie selon les fichiers) qui minteressent pour creer une base de donnees.
    (produits commandes, volumes…)

    Cependant, dans chaque classeur, j'ai un numero client.
    J'aimerais que la routine recupere ce numero pour le coller en face de chaque produit commande

    Merci pour votre aide si vous connaissez la ligne de commande. Moi je suis bloque!

  2. #2
    Expert éminent


    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
    Par défaut
    tu est sur de nous avoir tout dit ..?

  3. #3
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut
    voici ma routine:

    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
    Monfichier = Dir("E:\Test\*.xls", vbReadOnly)
     
    While Monfichier <> ""
        Workbooks.Open "E:\Test\" & Monfichier
        Sheets("Export").Select
     
    ligne = 14
     
        Do Until Sheets("Export").Cells(ligne, 1) = "Grand Total"
            ligne = ligne + 1
            Range("A14").Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Copy
        Loop
        Workbooks(2).Close SaveChanges:=False
     
        GoSub coller
        Monfichier = Dir()
     
    Wend
        Cells(ligne + 1, 2).Select
    Exit Sub
     
    coller:
        ligne = 4
        Do While Sheets("Sheet1").Cells(ligne, 2) <> ""
            ligne = ligne + 1
        Loop
        Cells(ligne, 2).Select
        ActiveSheet.Paste
     
        Return
     
    End Sub

  4. #4
    Expert éminent


    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
    Par défaut
    et il est ou le n° de client ..?

  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
    Par défaut
    Ensuite, ton N° de client doit bien aller sur la ligne que tu copies
    Tu le mets dans quelle colonne ?
    A+

  6. #6
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut Base de données
    Bonjour,
    Voici mon probleme,
    J'ai dans un dossier plusieurs fichiers Excel qui ont exactement le mm format

    J'ai cree une petite routine qui permet de recuperer les donnees (leur nombre de lignes varie selon les fichiers) qui minteressent pour creer une base de donnees.
    (produits commandes, volumes…) (a partir de la colonne B)

    Cependant, dans chaque classeur, j'ai un numero client.
    J'aimerais que la routine recupere ce numero pour le coller en face de chaque produit commande (en colonne A)

    Merci pour votre aide si vous connaissez la ligne de commande. Moi je suis bloque!

    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
    While Monfichier <> ""
        Workbooks.Open "E:\Test\" & Monfichier
        Sheets("Export").Select
     
    ligne = 14
     
        Do Until Sheets("Export").Cells(ligne, 1) = "Grand Total"
            ligne = ligne + 1
            Range("A14").Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Copy
        Loop
        Workbooks(2).Close SaveChanges:=False
     
        GoSub coller
        Monfichier = Dir()
     
    Wend
        Cells(ligne + 1, 2).Select
    Exit Sub
     
    coller:
        ligne = 4
        Do While Sheets("Sheet1").Cells(ligne, 2) <> ""
            ligne = ligne + 1
        Loop
        Cells(ligne, 2).Select
        ActiveSheet.Paste
     
        Return
     
    End Sub

  7. #7
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut [vba-E] Routine: recuperer donnees fichiers
    Bonsoir,

    J'ai cree une petite macro qui ouvre automatiquement tous les classeurs excel d'un dossier pour récuperer des données (le nombre de lignes varie: produits commandes...) et les coller dans un fichier central à partir de la colonne B

    Cependant, dans chaque classeur, j'ai un numero client.
    J'aimerais que la routine recupere ce numero pour le coller en face de chaque produit commande (en colonne A)

    Merci pour votre aide si vous connaissez la ligne de commande. Moi je suis bloque!
    Ci joint, voici le code qui me permet de recuperer les donnees de chaque classeur excel du dossier pour les coller a partir de la colonne B

    Si vous pouviez maider, ca serait cool, je suis bloque depuis un moment et je n'en vois plus la fin etant loin detre un programmateur professionnel !

    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
    While Monfichier <> ""
        Workbooks.Open "E:\Test\" & Monfichier
        Sheets("Export").Select
     
    ligne = 14
     
        Do Until Sheets("Export").Cells(ligne, 1) = "Grand Total"
            ligne = ligne + 1
            Range("A14").Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Copy
        Loop
        Workbooks(2).Close SaveChanges:=False
     
        GoSub coller
        Monfichier = Dir()
     
    Wend
        Cells(ligne + 1, 2).Select
    Exit Sub
     
    coller:
        ligne = 4
        Do While Sheets("Sheet1").Cells(ligne, 2) <> ""
            ligne = ligne + 1
        Loop
        Cells(ligne, 2).Select
        ActiveSheet.Paste
     
        Return
     
    End Sub

  8. #8
    Expert éminent


    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
    Par défaut
    Citation Envoyé par bbil
    et il est ou le n° de client ..?

  9. #9
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut
    Bonjour,
    dsl, je ne me suis pas bien expliqué...
    En fait, j'ai un dossier (Test) qui contient plusieurs fichiers excel ayant tous exactement le mm format. L'idée serait de creer un fichier central qui consolide les donnees de tous ces fichiers.

    J'ai donc crée cette petite routine qui me permet de récupérer les produits commandés de chaque fichier excel pour les rapatrier automatiquement dans un fichier central (le collage de ces données se fait en colonne B)

    Mon probleme, c'est que j'aimerais rapatrier le code client (qui se trouve sur une feuille differente des quantités commandées).
    En gros, a chaque fois que ma macro colle les produits commandés dans mon fichier central, j'aimerais qu'elle colle en colonne A le code client en face de chaque produit commandé.

    Connaissez vous un moyen ? Ca fait un moment que je planche dessus et je n'ai pas trouvé la solution !!!
    Merci d'avance

    Dans chaque classeur excel, il y a 2 feuilles:
    - Export: où je rapatrie les produits commandés
    - Client: disons qu'il se trouve en cellule G10. J'aimerais le coller en face de chaque ligne de produit commandé.

  10. #10
    Expert éminent


    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
    Par défaut
    ben tu nous dis toujours pas comment l'on doit trouver ton code client... qu'el est le lien avec les données copiées...?

  11. #11
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut
    Dans un dossier, j'ai plusieurs classeurs excel contenant 2 feuilles:
    -"Export" = je récupère les quantités commandées (a partir de la ligne 14 en colonne A)
    - "Client" = toutes les infos concernant le client (le code client se trouve en G10)

    Le macro que j'ai faite ne récupère pour l'instant que les données de la feuille Export.

    Le lien:
    un classeur excel = un client. Tu as la feuille "Client" qui concerne les données client et la feuille "Export" qui concerne tous les produits commandés que le client a commandé

  12. #12
    Expert éminent


    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
    Par défaut
    bon une solution pour ton problème .... création d'une variable pour mémoriser le n° de client , au début de ta procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Dim stNoClient as string
    mémorisation du numéro de client au moment du "copy"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
     Range(Selection, Selection.End(xlDown)).Select
     Selection.Copy
    Loop
      stNoClient = sheets("Client") .range("G10") '<<<<<<<<<<<<<< Ligne à rajouter pour mémoriser le numéro de client ...
        Workbooks(2).Close SaveChanges:=False
    ...
    pose de numéro de client dans la feuille destinataire au moment du "paste"...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ...
      Loop
        Cells(ligne, 2).Select
        ActiveSheet.Paste
        Sheets("Sheet1").Cells(ligne, 1) = stNoClient  ' <<< Ligne à rajouter pour poser le numéro de client...
        Return
    ...
    voilà .. sinon ce code n'est qu'un "emplatre" à ton code qui demanderai à être ré-écrit....


    tiens un peu de lecture
    Programmer efficacement avec Excel en VBA
    y voir par exemple comment utiliser une variable de type Workbook pour référencer tes classeurs......avec ta méthode que ce passe-t'il par exemple si avant d'ouvrir tes classeurs tu en ouvre un autre...? l'index 2 utilisé : dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Workbooks(2).Close SaveChanges:=False
    ..est-il alors le bon ..?

    voir aussi l'utilisation de méthode .. qui est préférable à l'utilisation des goto et goSub qui ne sont que des "restes" d'anciens basics..

  13. #13
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut
    Merci pour ton aide!
    C'est vrai que mon code devrait etre réécrit mais je suis novice.

    J'ai ajouté les lignes de code que tu m'as indiqué, cependant, la macro plante pour paster le code client.



    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
    Sub Base()
     
    Application.ScreenUpdating = False
     
    Dim stNoClient As String
     
    Monfichier = Dir("C:\Test\*.xls", vbReadOnly)
     
    While Monfichier <> ""
        Workbooks.Open "c:\test\" & Monfichier
        Sheets("D1").Select
     
    Trouver:
        ligne = 14
        Do While Sheets("D1").Cells(ligne, 1) <> ""
            ligne = ligne + 1
            Range("A14").Select
            Range(Selection, Selection.End(xlDown)).Select
            Selection.Copy
        Loop
        stNoClient = Sheets("Client").Range("G10")
     
        Workbooks(2).Close SaveChanges:=False
        GoSub coller
        Monfichier = Dir()
     
    Wend
        Cells(ligne + 1, 2).Select
    Exit Sub
     
    coller:
        ligne = 4
        Do While Sheets("Feuil1").Cells(ligne, 2) <> ""
            ligne = ligne + 1
        Loop
        Cells(ligne, 2).Select
        ActiveSheet.Paste
        Sheets("Sheet1").Cells(ligne, 1) = stNoClient
        Return
     
     
    End Sub

  14. #14
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut
    cool merci !

  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
    Par défaut
    Tu ne dois pas avoir de code entre copier et coller.
    Je regarde (si bbil ne donne pas la solution avant )
    A+

    Tu es sûr d'avoir une feuille qui se nomme "Sheet1" ?
    Tu en as une qui s'appelle "Feuil1", mais Sheet1 est généralement issu de l'aide
    Tu dis

  16. #16
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut
    Sheet1, c'est parce que j'ai acheté mon PC kan j'etais a l'etranger, donc g office en anglais.

  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
    Par défaut
    Ce qui importe, c'est le nom de tes feuilles. Dans ton code, tu emploies "Feuil1" et "Sheet1"
    Les deux feuilles existent-elles ?
    A+

  18. #18
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut
    oui bien sur
    Renomme les a ta guise si tu veux. Je pourrais les changer après

  19. #19
    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
    Par défaut
    Ma question : Est-ce la même feuille ? Tu utilises les deux noms
    A+

  20. #20
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 23
    Par défaut
    pardon,
    non, sheet1 = fichier qui récupère les données

    Feuil1 = feuille des fichiers excel du dossier

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 02/02/2014, 04h13
  2. [VBA] Gérer les erreurs d'insertion dans la base de données
    Par robert_trudel dans le forum VBA Access
    Réponses: 3
    Dernier message: 04/12/2006, 12h45
  3. Creation d'une base de donnees en TXT [VBA-E]
    Par Adri1l dans le forum Excel
    Réponses: 1
    Dernier message: 08/08/2006, 16h06
  4. [VBA] Compacter base de donnée
    Par BaRonm3 dans le forum Access
    Réponses: 9
    Dernier message: 27/06/2006, 14h26
  5. taille maximale d'une base de donnée paradox
    Par Anonymous dans le forum Paradox
    Réponses: 5
    Dernier message: 14/02/2004, 17h39

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