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 :

Macro Import de donnees de plusieurs fichier excel ds une base de donnees


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 4
    Points
    4
    Par défaut Macro Import de donnees de plusieurs fichier excel ds une base de donnees
    Bonjour a tous !

    Voila j'avais a recuperer des milliers de donnees se trouvant dans des centaines de feuilles excel, pour faire une base de donnee contenu dans un seul fichier.

    J'ai un ami qui m'a aider a faire la macro sous VBA.

    Il m'a explique vite fait mais etant newbie et ne demandant qu'a apprendre, lui n'ayant pas le tps de vraiment mexpliquer vu que se serais par telephone, jen appel a vous.

    J'ai joint en piece jointe les codes utiliser. je ne connais pas le language utiliser et aurais souhaiter avoir une explication pr la pluspars des codes (Filenae, ", ',=,&, etc...)utiliser pr pvoir faire par moi meme une autre base de donnee similaire.

    Merci a tous ceux qui pourront m'aider
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    Bonsoir


    Tu peux par exemple utiliser le modèle ADO afin d'extraire des données dans plusieurs classeurs fermés



    Nécessite d'activer la référence "Microsoft ActiveX Data Objects x.x Library".

    Dans l'éditeur de macros:
    Menu Outils.
    Références.
    Coche la ligne "Microsoft ActiveX Data Objects x.x Library".
    Clique sur le bouton OK pour valider



    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Option Explicit
    Option Base 1
     
     
    Sub ChercheFichiersFermes()
        Dim Source As ADODB.Connection
        Dim Rst As ADODB.Recordset
        Dim ADOCommand As ADODB.Command
        Dim Fichier As String, Direction As String, texte_SQL As String
        Dim X As Integer, NbFichiers As Integer
        Dim i As Long
        Dim Tableau() As String
     
        Application.ScreenUpdating = False
     
        Direction = Dir(ThisWorkbook.Path & "\*.xls")
        'liste tous les classeurs du répertoire
        Do While Len(Direction) > 0
            NbFichiers = NbFichiers + 1
            ReDim Preserve Tableau(1 To NbFichiers)
            Tableau(NbFichiers) = Direction
            Direction = Dir()
        Loop
     
        If NbFichiers > 0 Then
            'boucles sur les classeurs fermés
            For X = 1 To UBound(Tableau)
     
                'Pour ne pas prendre en compte le classeur contenant la macro
                If Tableau(X) <> ThisWorkbook.Name Then
     
                    'Définit le chemin
                    Fichier = ActiveWorkbook.Path & "\" & Tableau(X)
     
                    'Connexion au classeur fermé
                    Set Source = New ADODB.Connection
                    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                        "Data Source=" & Fichier & _
                        ";Extended Properties=""Excel 8.0;HDR=No;"";"
     
                    'Récupère les données de la plage A2:B10, dans la feuille
                    'nommée Feuil1, dans chaque classeur
                    Set ADOCommand = New ADODB.Command
     
                    With ADOCommand
                        .ActiveConnection = Source
                        .CommandText = "SELECT * FROM [Feuil1$A2:B10]"
                    End With
     
                    Set Rst = New ADODB.Recordset
                    Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
     
                    Set Rst = Source.Execute("[Feuil1$A2:B10]")
     
                    i = Range("A65536").End(xlUp).Row + 1
                    'Ecrit le résultat de la requète dans la feuille da calcul active
                    Cells(i, 1).CopyFromRecordset Rst
     
                    Rst.Close
                    Source.Close
                    Set Source = Nothing
                    Set Rst = Nothing
                    Set ADOCommand = Nothing
     
                End If
            Next X
        End If
     
        Application.ScreenUpdating = True
    End Sub


    http://silkyroad.developpez.com/VBA/ClasseursFermes/



    bonne soirée
    michel

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    salut
    la macro que t'a passé ton ami récupere un certain nombre de cellule dans un fichier donné. c'est une sorte de programme d'importation qui ne concerne qu'un seul fichier. en gros si tu es novice :
    tu connais le nom du fichier a importer. en l'occurence dans le programme de ton ami, c'est la date
    tu importe un certain nombre de cellule (76)
    fin
    il te manque pour mene ton projet a terme
    une "boucle " qui prend tout tes fichiers en compte

    question : es que :je te cite "des milliers de donnees se trouvant dans des centaines de feuilles excel" se trouve dans plusieur fichier( je suppose que oui) et surtout es ce que toutes ces donées se trouvent a la même place sur chaque fichier. et si oui, je te propose de t'interresser a ce post
    fais moi signe si ça te semble correspondre a ce que tu cherche

  4. #4
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Merci a vous deux, je vais etudier un peu tt ca et je reviens vers vous !

  5. #5
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Salut Alsimbad et merci de me proposer ton aide.

    Jai un nouveau truc a faire dans le meme genre et un peu plus complex bien que moins de donnees a recuperer.

    Alors je texplique, faut suivre :

    Le classeur Origin & Plant Cover dans le Fichier bean coverage : cest lui qui va recevoir les donnees (en tous 9 somme de donnees venant d'autres fichiers excel)

    Les cellules qui vont recevoir les donnees sont :
    C11,c12,c13,C14
    C19,C20,C21,C22
    C38


    Les donnees proviennent de deux autres fichiers
    2007beanstorplan6083 : classeur "(c) stock estimate fut." et classeur "Bean storage overview"

    et lautre fichier se nomme Daily-stock05 et les donnees sont dans le classeur "Stock available"

    Dc dans le le classeur "(c) stock estimate fut." du fichier 2007beanstorplan6083, je veux additonner les donnees situe en B5 et R5 et importer la somme en C11 dans le classeur Origin & Plant Cover.

    la somme des cellules B6+b7+b8 st importer en C12

    la somme des cellules b4+r4 st importer en C13

    la somme des cellules b8+r8 st importer en C14


    Dc dans le le classeur "Bean storage overview" du fichier 2007beanstorplan6083, je veux importer

    la cellule E5 et limporter en C19
    la somme des cellules e6+e7 soit importer en C20
    la cellule E4 soit importer en C21
    La cellule E8 .....................C22


    Et enfin jaimerais que dans le classeur "Stock available" du fichier "Daily-stock05"

    la somme des cellules D16+L16 arrivent dans la cellule C38 du classeur Origin & Plant Cover dans le Fichier bean coverage :


    Voila pas complique

    bon dis moi si cest faisable,a pres je me reserve une aprem pr etudier ton code


    Bon mes fichier sont trop gros pour etre mis en piece jointe
    Fichiers attachés Fichiers attachés

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    salut usualpierrot
    je t'ai proposé mon aide pace dans le cadre d'importer des données de plusieurs fichiers, j'avais fais un code qui pouvait t'aider, mais je t'ai pas proposé de faire ton code.
    j'ai jeté un oeil a ton fichier, tout est dedans, tu a déja les bases pour ouvrir un fichier, écrire la formule dans les bones cellules, que veut tu de plus ? pas que je passe mon 15 aout a faire ton code quand même ? si ?
    pas de probleme par contre, si tu fais un truc je veux bien me résever un moment pour l'étudier

  7. #7
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Slt,

    alors jai tjrs besoin dextraire des donnes de 2 fichier differents, dc ton code peux minteresser.

    Ensuite 2 questions,

    par exemple je veux qu'en C11 apparaisse la somme de la cellule B1+B2 venant dun autre fichier

    Comment cela se traduit par un code.

    Car je narrive ni a addtionner ni a dire je veux ke ca arrive en C11

    MErci

  8. #8
    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 es en de bonnes main alors je n'interviendrai que pour une question de syntaxe afin que tes explications soient plus claire : Tu utilises les termes "Fichier" et "Classeur". C'est la même chose si le fichier est un classeur Excel. Je pense que tu voulais parler de "feuille de calculs" ou, selon certains, "d'onglets".
    A toutes fins utiles

  9. #9
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Effectivement jai fait des erreurs :

    fichier : workbook
    onglet ou feuille de calcul : worksheet

    Par contre pour ma derniere question, je pense que qqun dexperimenter peux repondre assez rapidement,non ?

  10. #10
    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
    Soit plus général dans ta question, là je t'avoue que je m'y perds avec les noms de feuilles et de classeurs.
    Ex :
    J'ai plusieurs classeurs, CL1, CL2... CL12, j'ai dans chaque classeur une feuil1, feuil2, feuil3
    Je veux copier... etc...
    Bon courage et bonne chance.

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    tu as deux possibilités en ce qui concerne la somme des cellules
    soit tu écris dans ton fichhier destination la formule complete, ce qui t donnera un cellule liées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cells (1,1). formulalocal = "= tonfichier!tononglet!tacellule"
    pour la syntaxe exacte, tu ouvre tes fichier et tu écris ta formule, ensuite tu la copiecolle dans le code VBa
    ou en 2, tu prens ces deux valeur comme des variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    a = tonclasseur1.tononglet.tacellule
    b = tonclasseur2.tononglet.tacellule
    c = a + b
    cells(1,1) = c
    ps : pour le code d'import, je suis pas chez moi jusqu'a lundi, je peus pas pour l'instant

  12. #12
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    ok pr la somme bon jai fait un code qui marche, bon il vaut ce quil vaut mais le resultat est la.

    Cependant pour la ligne 38, jaimerais qu'excel ne recherche que les cellules du workbook ouvert sans avoir a specifier la date ou le numero apres le nom. Je sais cest pas super clair

    Voila ce que jai trouve mais qui ne fonctionne pas :

    "At the moment, to find list files that contain WIP in the filename I have to put *wip*"

    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
    Sub PierreMenager()
    '
    ' PierreMenager Macro
    ' Macro recorded 8/15/2007 by PM
    '
    ' Keyboard Shortcut: Ctrl+p
    '
    Filename1 = InputBox("Please, type the date. ( Ex: 0608 )", "Information Requested")
    Filename = "2007BeanStorPlan" & Filename1 & ".xls"
    
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "](c) stock estimate fut.'!R5C2+'[" & Filename & "](c) stock estimate fut.'!R5C18"
        Range("C11").Select
        Range("C12").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "](c) stock estimate fut.'!R6C18+'[" & Filename & "](c) stock estimate fut.'!R7C18+'[" & Filename & "](c) stock estimate fut.'!R6C2+'[" & Filename & "](c) stock estimate fut.'!R7C2"
        Range("C13").Select
     
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "](c) stock estimate fut.'!R4C2+'[" & Filename & "](c) stock estimate fut.'!R4C18"
        Range("C14").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "](c) stock estimate fut.'!R8C2+'[" & Filename & "](c) stock estimate fut.'!R8C18"
        Range("C19").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "]Bean storage overview'!R4C5"
        Range("C19").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "]Bean storage overview'!R5C5"
        Range("C20").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "]Bean storage overview'!R6C5+'[" & Filename & "]Bean storage overview'!R7C5"
        Range("C21").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "]Bean storage overview'!R4C5"
       Range("C22").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "]Bean storage overview'!R8C5"
        Range("C38").Select
        ActiveCell.FormulaR1C1 = _
            "='[Daily-stock05.xls]Stock available'!R16C4+'[Daily-stock05.xls]Stock available'!R16C12"
        ActiveWindow.SmallScroll Down:=-3
        ActiveWindow.ScrollColumn = 5
        ActiveWindow.ScrollColumn = 1
        ActiveWindow.SmallScroll Down:=-18
    End Sub

  13. #13
    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
    Juste deux petites choses qui ne résoudront pas ton pb mais bon...
    Ta première cellule n'est pas précisée... c'est risqué, ta formule peut se coller n'importe où :
    ActiveCell.FormulaR1C1 = _
    "='[" & Filename & "](c) stock estimate fut.'!R5C2+'[" & Filename & "](c) stock estimate fut.'!R5C18"
    Ensuite tu n'es pas obligé de sélectionner une cellule pour placer ta formule dedans
    Range("C12").Select
    ActiveCell.FormulaR1C1 = _
    "='[" & Filename & "](c) stock estimate fut.'!R6C18+'[" & Filename & "](c) stock estimate fut.'!R7C18+'[" & Filename & "](c) stock estimate fut.'!R6C2+'[" & Filename & "](c) stock estimate fut.'!R7C2"
    Tu peux remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range("C12").FormulaR1C1 = _
            "='[" & Filename & "](c) stock estimate fut.'!R6C18+'[" & Filename & "](c) stock estimate fut.'!R7C18+'[" & Filename & "](c) stock estimate fut.'!R6C2+'[" & Filename & "](c) stock estimate fut.'!R7C2"
    Ça évite les mouvements de feuille et accélère les procédures
    Pour ce qui est de ta question
    Cependant pour la ligne 38, jaimerais qu'excel ne recherche que les cellules du workbook ouvert sans avoir a specifier la date ou le numero apres le nom. Je sais cest pas super clair
    C'est pas hyper très clair, en effet . Je pense que tu parles de la formule en rouge... (???) et même en supposant... je ne comprends pas ce que tu veux supprimer dedans...

  14. #14
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Effectivement ma premiere cellule nest pas precise, je vias modifier ca, je contournais le pbm jusqu'a maintenant.

    Pour la ligne en rouge, en fait je veux que les datas provenant du workbook Daily-stock et de la feuille 'Stock available', vienne se mettre en cellule 38.

    Juske la cest ce quil se passe, le pbm est que jai specifier Dailystock05 ce sera dc specifik a ce fichier. moi je veux que excel me trouve tt seul tout les fichier comportant Daily-stock dans leur nom et que apres je choisisse celui que je souhaite

  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
    Vérifie mais je crois que le code suivant nécessite la validation la référence "Microsoft Scripting Runtime" dans l'éditeur VBA -> Outils -> Référence.
    Sinon, le principe : Lister les fichiers du répertoire et placer dans une listbox, elle-même dans un userform, tous les fichiers commençant par Daily-stock.
    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
    Sub ListerLesFichiers()
    With Excel.Application.FileSearch
       .NewSearch
       .LookIn = "D:\xls"
       .SearchSubFolders = True
       .Filename = "*.xls"
       If .Execute() > 0 Then
          For i = 1 To .FoundFiles.Count
             if instr (.FoundFiles(i),"Daily-stock") = 1 then
                  me.Listfich.additem .FoundFiles(i)
             endif
          Next i
       End If
    End With
    End Sub
    Reste plus qu'à sélectionner le bon fichier dans la liste

  16. #16
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Ok merci,

    juste ds mon code je peux la rajouter ou ?

  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
    De quel code parles-tu ?
    Pour ouvrir l'userform dans lequel tu auras mis ta liste, c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Load Userform1
    Userform1.show
    Tu mets ça dans ta macro quand tu as besoin d'ouvrir ton fichier
    Dans userform1_Activate (ou initialize) tu fais un appel à la macro ListerLesFichiers
    Les fichiers de ton répertoire vont s'afficher
    Pour ouvrir le bon fichier, tu mets le code dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private sub ListBox1_clic()
    procédure que tu termines par
    avand le end sub (...)
    Ainsi l'userform se refermera et "ta" procédure qui a ouvert l'userform pourra se poursuivre...

    A question nébuleuse, réponse obscure

  18. #18
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Euh pourquoi cette etrange impression davoir la solution sous les yeux et de ne pas arriver a lexploiter

    Alors je vais essayer de poser une question plus claire pr avoir une reponse du meme type

    Donc moi j'ai fait ce code :

    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
    49
    50
    Sub PierreMenager()
    '
    ' PierreMenager Macro
    ' Macro recorded 8/15/2007 by PM
    '
    ' Keyboard Shortcut: Ctrl+p
    '
    Filename1 = InputBox("Please, type the date. ( Ex: 0608 )", "Information Requested")
    Filename = "2007BeanStorPlan" & Filename1 & ".xls"
    
        Range("C11").FormulaR1C1 = _
            "='[" & Filename & "](c) stock estimate fut.'!R5C2+'[" & Filename & "](c) stock estimate fut.'!R5C18"
        Range("C12").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "](c) stock estimate fut.'!R6C18+'[" & Filename & "](c) stock estimate fut.'!R7C18+'[" & Filename & "](c) stock estimate fut.'!R6C2+'[" & Filename & "](c) stock estimate fut.'!R7C2"
        Range("C13").Select
        'Application.Run Range("AUTOSAVE.XLA!mcs02.OnTime")
        'Application.Run Range("AUTOSAVE.XLA!mcs02.OnTime")
        'Application.Run Range("AUTOSAVE.XLA!mcs02.OnTime")
        'Application.Run Range("AUTOSAVE.XLA!mcs02.OnTime")
        'Application.Run Range("AUTOSAVE.XLA!mcs02.OnTime")
        'Application.Run Range("AUTOSAVE.XLA!mcs02.OnTime")
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "](c) stock estimate fut.'!R4C2+'[" & Filename & "](c) stock estimate fut.'!R4C18"
        Range("C14").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "](c) stock estimate fut.'!R8C2+'[" & Filename & "](c) stock estimate fut.'!R8C18"
        Range("C19").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "]Bean storage overview'!R4C5"
        Range("C19").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "]Bean storage overview'!R5C5"
        Range("C20").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "]Bean storage overview'!R6C5+'[" & Filename & "]Bean storage overview'!R7C5"
        Range("C21").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "]Bean storage overview'!R4C5"
       Range("C22").Select
        ActiveCell.FormulaR1C1 = _
            "='[" & Filename & "]Bean storage overview'!R8C5"
        Range("C38").Select
        ActiveCell.FormulaR1C1 = _
            "='[Daily-stock05.xls]Stock available'!R16C4+'[Daily-stock05.xls]Stock available'!R16C12"
        ActiveWindow.SmallScroll Down:=-3
        ActiveWindow.ScrollColumn = 5
        ActiveWindow.ScrollColumn = 1
        ActiveWindow.SmallScroll Down:=-18
    End Sub
    Jai donc un souci au niveau de ma cellule 38 et tu as bien compris la question concernant le listage des fichier pour que excel puisse recuperer les donnees du fichier que jaurais selectionner.

    cependant comment integerer proprement ce code ?

    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
    Sub ListerLesFichiers()
    With Excel.Application.FileSearch
       .NewSearch
       .LookIn = "D:\xls"
       .SearchSubFolders = True
       .Filename = "*.xls"
       If .Execute() > 0 Then
          For i = 1 To .FoundFiles.Count
             if instr (.FoundFiles(i),"Daily-stock") = 1 then
                  me.Listfich.additem .FoundFiles(i)
             endif
          Next i
       End If
    End With
    End Sub

    concernant ton dernier post

    De quel code parles-tu ?
    Pour ouvrir l'userform dans lequel tu auras mis ta liste, c'est

    Code :
    Load Userform1
    Userform1.showTu mets ça dans ta macro quand tu as besoin d'ouvrir ton fichier
    Dans userform1_Activate (ou initialize) tu fais un appel à la macro ListerLesFichiers
    Les fichiers de ton répertoire vont s'afficher
    Pour ouvrir le bon fichier, tu mets le code dans

    Code :
    Private sub ListBox1_clic()procédure que tu termines par

    Code :
    Unload Userform1avand le end sub (...)
    Ainsi l'userform se refermera et "ta" procédure qui a ouvert l'userform pourra se poursuivre...

    A question nébuleuse, réponse obscure

    euh cest en complement du code ListerLesFichiers ou pas ?


    Bref tu vois jsuis pas nul mais presque. Dc cest ma question est clair comment integrer proprement a ma macro ce que tu mas donner.

  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
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok. Comme je te vois perplexe, je vais tâcher d'être plus clair.
    Dans le module contenant ta macro, tu fais deux choses
    1 - Tu déclares une variable publique en tête de module
    Public NomFich as workbook
    2 - tu places la macro ListerLesFichiers.
    Dans ton projet VBA tu insères un userform (Userform1) Editeur VBA -> Insérer -> Userform
    Dans l'userform, tu places une listbox (baptisé "Listfich") nom que tu retrouves dans la macro ListerLesFichiers)
    Dans l'événement Activate ou Initialize de l'userform, tu appelles la macro ListerLesFichiers (tu testes mais Userform1_Activate() devrait être bon)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private sub Userform1_Activate()
    ListerLesFichiers
    End sub
    Je passe à ta macro.
    AVANT cette ligne,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range("C38").FormulaR1C1 = _
            "='[Daily-stock05.xls]Stock available'!R16C4+'[Daily-stock05.xls]Stock available'!R16C12"
    tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Load Userform1
    Userform1.show
    Ce code interrompt provisoirement la macro pour afficher l'userform et ta liste.

    Retour dans l'userform :
    Dans l'événement MouseUp de la listbox (préférable à l'événement click) tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private sub ListFich_MouseUp()
         NomFich = me.ListFich.list(me.Listfich.listindex)
         Unload me
    end sub
    Sauf erreur, ce code place le nom du fichier sélectionné dans NomFich et ferme l'userform.

    Retour à ta macro, tu modifies ta ligne déjà citée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Range("C38").FormulaR1C1 = _
            "='[" & NomFich & "]Stock available'!R16C4+'[" & NomFich & "]Stock available'!R16C12"
    Je pense n'avoir rien oublié mais cépassur
    Tu testes et tu nous dis.
    A+

    Edit
    Juste une erreur : Je suppose que tu dois ajouter le chemin au nom de fichier
    Ce chemin, tu l'as puisque la macro qui liste les fichiers l'utilise.
    Pour le récupérer tu as plusieurs solutions, soit tu l'insères en dur dans chaque macro, soit tu crées une variable public (NomRep) que tu utilises partout,
    soit tu le définis une fois et le passe en paramètre à la macro listerLesFichiers

    Pour simplifier, je le déclarerais en Public avec NomFich et je le renseignerais en tête de ta macro.
    Enfin, à la sortie de ListFich_MouseUp() et avant Unload me, j'ajouterais simplement
    NomFich = NomRep & NomFich

  20. #20
    Candidat au Club
    Inscrit en
    Août 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 15
    Points : 4
    Points
    4
    Par défaut
    Bon jai tester mais pfff jen chie pr foutre les code a la bonne place dans ma macro.


    Pourrias tu si ta 5 min mettre en verre la ou je dois placer chaque element, pcq si joublie des bout ou que je les fous au mavais endroit, mais jsuis completement perdu.


    Enfin au pire ca fera pas et ils feront a la main le calcul de la cellule 38

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/03/2015, 19h45
  2. Importer les données d'un fichier csv dans une base de données
    Par Invité dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 08/06/2010, 13h54
  3. Réponses: 4
    Dernier message: 08/01/2009, 15h01
  4. Réponses: 3
    Dernier message: 27/07/2007, 13h06
  5. Réponses: 1
    Dernier message: 28/04/2006, 16h17

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