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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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 ..?

  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
    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é.

  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
    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...?

  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 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

  10. #10
    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

  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
    Dsl, c vrai que pour moi c clair...
    Alors dans le code,

    Export = feuille ou les produits commandés se trouvent en colonne A a partir de la ligne 14
    Client = feuille ou se trouve le code client en G10 (je ne l'ai pas mentionné dans mon code car je n'ai pas trouvé la ligne de commande)

    Sheet1 = Feuille qui récupère les données de Export et Client
    Dis moi si je nesuis pas clair
    d'avance merci

  12. #12
    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
    Bon, je corrige le code en conséquence. Dans le tien, NomClient et données étaient dans deux feuilles séparées, CE QUE JE NE COMPRENAIS PAS
    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
    Option Explicit
    Sub Baseb()
    Dim Monfichier, PremLigneVideFeuil1 As Long, PremLigneVideFeuil1Sheet1 As Long
    Application.ScreenUpdating = False
    Dim stNoClient As String
        Monfichier = Dir("C:\Test\*.xls", vbReadOnly)
        While Monfichier <> ""
            'Recherche de la 1ère ligne vide dans la feuille où on COLLE
            PremLigneVideFeuil1 = ThisWorkbook.Sheets("Sheet1").Range("A65535").End(xlUp).Row + 1
            'Ouverture du fichier où on copie les données trouvées
            Workbooks.Open "c:\test\" & Monfichier
            Sheets("D1").Activate
            stNoClient = Sheets("Client").Range("G10")
    'On copie 'on est dans Sheets("Export")
            Worksheets("Export").Range(Cells(14, 1), Cells(Range("A14").End(xlDown).Row, 1)).Copy
    'on colle dans Feuil1 de "thisworkbook" : Classeur contenant les macros
            ThisWorkbook.Sheets("Sheet1").Activate
            Cells(PremLigneVideFeuil1, 2).Select
            ActiveSheet.Paste
    'On place dans Sheet1 "thisworkbook" le nom du client ???????
            ThisWorkbook.Sheets("Sheet1").Cells(PremLigneVideFeuil1, 1) = stNoClient
    'Fermeture de Monfichier
            'Workbooks(Monfichier).Close False
            Monfichier = Dir()
        Wend
    End Sub
    Tu dis
    A+

  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
    Pour que tout soit plus clair, je t'ai joint un exemple.

    Le fichier "Regroupement" est celui qui doit servir a tout consolider en base de données

    Le fichier "Données" est un exemple de fichier que j'aimerais consolider. J'en ai plusieurs présents dans un dossier. Les données se trouvent au mm endroit dans chaque fichier.

    En fait, l'idée c'est koi:

    Un client commande plus ou moins de produits dans la feuille Export (il peut en commander 1 comme plusieurs = dans ce cas, il y aura plus ou moins de lignes)

    Cependant, dans le fichier Regroupement, j'aimerais qu'a chaque nom de produit commandé que l'on a rapatrié, indiquer en face le numéro du client concerné.

    Tout ce que j'ai réussi (c sur ke c pas le top de la programmation) a faire pour le moment, c'est rapatrier les noms de produits commandés. Je suis bloqué pour coller le numéro du client en face de chaque produit commandé.
    Fichiers attachés Fichiers attachés

  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
    j'ai essayé d'avancer avec la macro que tu as modifié, cependant, le code client ne se colle pas bien.

    Je n'arrive pas a affecter le code client correspondant aux noms des produits commandés

  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
    J'espère que tu ne t'es pas impatienté, je m'étais absenté
    J'ai ouvert tes fichiers et voici le code.
    Dans ton code tu avais une feuille D1... elle est passé où
    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
    Option Explicit
    Sub Base()
    Dim Monfichier, PremLigneVideFeuil1 As Long, PremLigneVideFeuil1Sheet1 As Long
    Application.ScreenUpdating = False
    Dim stNoClient As String
        Monfichier = Dir("C:\Test\*.xls", vbReadOnly)
        While Monfichier <> ""
            'Recherche de la 1ère ligne vide dans la feuille où on COLLE
            PremLigneVideFeuil1 = ThisWorkbook.Sheets("Sheet1").Range("B65535").End(xlUp).Row + 1
            'Ouverture du fichier où on copie les données trouvées
            Workbooks.Open "c:\test\" & Monfichier
            Sheets("Export").Activate
            stNoClient = Sheets("Client").Range("G10")
    'On copie 'on est toujours dans Sheets("D1")
            Range(Cells(14, 1), Cells(Range("A14").End(xlDown).Row, 1)).Copy
    'on colle dans Feuil1 de "thisworkbook" : Classeur contenant les macros
            ThisWorkbook.Sheets("Sheet1").Activate
            Cells(PremLigneVideFeuil1, 2).Select
            ActiveSheet.Paste
    'On place le nom du client dans Sheet1 de "thisworkbook"
            ThisWorkbook.Sheets("Sheet1").Cells(PremLigneVideFeuil1, 1) = stNoClient
    'Fermeture de Monfichier
            'Workbooks(Monfichier).Close False
            Monfichier = Dir()
        Wend
    End Sub
    Ainsi c'est plus adapté
    A+

  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
    Merci bcp Ouskel, ca marche !! Depuis le temps ke j'étais bloqué!

    Juste un dernier truc, j'ai testé avec ta macro, le code client apparait en face du premier produit kil a commandé, mais en face de toutes les lignes.

    Je vais y aller a la barbare, c'est à dire faire une macro qui sélectionne la colonne A > F5 > Cellules vides > = cellule du dessus.

    Si tu as une meilleure idée, n'hésite pas, enttk, encore merci pour ton aide!

  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
    Non, je n'ai pas ce phénomène.
    Efface toutes les données dans ton fichier regroupement et relance ta macro
    Tu dis
    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
    j'ai réessayé, et j'ai toujours ce pb.... De tte facon, c pas très grave, je sais comment faire maintenant pour empecher ce phénomene

  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
    Mon code ne fait pas "ça", en fait, il ne peut pas faire ça, tu es sûr de n'avoir rien changé ?
    A+

+ Répondre à la discussion
Cette discussion est résolue.

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