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 :

Exportation des données d'un Fichier .csv dans des fichiers Excel via une Macro.


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut Exportation des données d'un Fichier .csv dans des fichiers Excel via une Macro.
    Bonjour,

    Je débute sur les macros VBA sous EXCEL.

    Je souhaiterai via un fichier .csv qui contient :

    NomfichierEXCEL|NomOnglet|Ligne|Colonne|Valeur
    NomfichierEXCEL|NomOnglet|Ligne|Colonne|Valeur

    Remplir les valeurs dans le fichier excel, onglet, ligne et colonne.

    Pouvez-vous me dire comment m'y prendre.

    Pour info : il existe 4 fichiers Excel, qui contiennent environ 400 onglets.

    Merci.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Pouvez-vous me dire comment lancer une focntion d'un module lors de l'ouverture d'un fichier excel?

    Merci.

  3. #3
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    en plaçant votre code sur l'événement Workbook_Open du dit classeur.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Merci pour la réponse...

    Cependant, j'a effectivement trouvé la méthode "Workbook_Open" d'une feuille mais pas celle du classeur.

    Pouvez-vous me dire comment faire exectement?

    Merci d'avance.

  5. #5
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Ajoute du code sur ThisWorkbook dans VBE.
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  6. #6
    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 144
    Points
    20 144

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Merci pour vos réponses et pour ce lien. j'ai enfin réussi à lancer des fonction au démarrage.

    Cependant j'aurai encore une question :

    Comment je peux affectuer une valeur à une cellule dont je connais
    - le nom du fichier EXCEL
    - l'onglet(feuille)
    - la ligne
    - et la colonne.

    Voici ce que j'ai essayé mais cella ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(NomOnglet).Cells(NomLigne, NomColonne) = Value
    Merci

  8. #8
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    Bonjour,

    C'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil").Cells(NUMERO_LIGNE, NUMERO_COLLONE) = ...
    Tapes sur F1 sur le mot clé que tu ne connais pas et accède à l'aide...

    A+

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Ca ne fonctionne pas.

    Voici le code que j'ai écris jusqu'a présent :
    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
     
    Dim LigneCSV As String, NoLigne As Long, NoLigneCVS As Integer
    Dim TableauLignesCSV, TableauValeurLigne
    Dim NomFichier, NomOnglet, NumLigne, NoColonne, Valeur
    Dim Chemin, NomFichCSV, NomFichEXCEL
     
    Chemin = "...."
    NomFichCSV = "Test.csv" 'ou .txt
    NomFichEXCEL = ""
     
        Dim i As Integer
        i = 0
        Open Chemin & NomFichCSV For Input As #1
        While Not EOF(1)
            Input #1, LigneCSV
            TableauLignesCSV = Split(LigneCSV, ";")
            For NoLigneCVS = 0 To UBound(TableauLignesCSV)
                TableauValeurLigne = Split(TableauLignesCSV(NoLigneCVS), "|")
                NomOnglet = TableauValeurLigne(1)
                NumLigne = TableauValeurLigne(2)
                NoColonne = TableauValeurLigne(3)
                Valeur = TableauValeurLigne(4)
     
                If NomFichEXCEL = "" Or TableauValeurLigne(0) <> NomFichEXCEL Then
                    NomFichier = TableauValeurLigne(0)
                    'Ouvrir le fichier Excel
     
                    'Insertion de la valeur dans la cellule
                    Sheets(NomOnglet).Cells(NumLigne, NoColonne) = Value
                Else
     
                End If
            Next
        Wend
        Close #1
    PS : La fonction F1 ne fonctionne pas sur mon poste.

  10. #10
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    Re,

    Moi j'aurais fait comme ça :

    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
     
     
        Dim objFSO As New Scripting.FileSystemObject
        Dim objWbk As New Excel.Workbook
        Dim objSheet As New Excel.Worksheet
        Dim objWbk1 As New Excel.Workbook
        Dim objSheet1 As New Excel.Worksheet
     
        strCheminS = "Chemin de ton CVS"
        strFeuil = "Le nom de ta feuil CSV"
        If (objFSO.FileExists(strCheminS)) Then
             Set objWbk = Workbooks.Open(strCheminS)
             Set objSheet = objWbk.Sheets(strFeuil)
             objSheet.Activate
             Set objWbk1 = Workbooks.Open("Chemin de Destination")
             Set objSheet1 = objWbk1.Sheets("Feuille de Destination")
             For i = 2 To 10000
                 If (objSheet.Cells(i, 1) <> "") Then
                     strTab = Split(objSheet.Cells(i, 1), ";")
                     objSheet1.Cells(NumLigne, NumCol) = strTab(1)
                 End If
            Next i
     
           objWbk.Close False
           Set objWbk = Nothing
           objWbk1.Close True, strCheminD
           Set objWbk1 = Nothing
       Else
             MsgBox "Fichier Non Trouvé !"
       End If

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Merci pour les réponses...

    J'en m'inspire pour mon code, cepandant je n'arrive toujours pas à trouver la solution(que je dois rendre pour ce soir).

    voici une partie de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set objWbk1 = Workbooks.Open(Chemin & "\" & NomFichier)
                    Set objSheet1 = objWbk1.Sheets(NomOnglet)
     
                    objSheet1.Cells(NumLigne, NoColonne) = Valeur
    une erreur apparait sur cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objSheet1.Cells(NumLigne, NoColonne) = Valeur
    Quelqu'un aurait une idée..

    Merci d'avance.

  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
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour récupérer un csv, tout dépend de ta version d'office. Jète un oeil ici.
    Si ça ne te va pas, tu as la solution consistant à l'ouvrir en tant que txt.
    Tu dis et je te passe le code.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Pour l'ouverture du fichier .csv je n'ai aucun problème.

    Mon problème est lorsque que je veux mettre une valeur dans une cellule de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set objWbk1 = Workbooks.Open(Chemin & "\" & NomFichier)
                    Set objSheet1 = objWbk1.Sheets(NomOnglet)
     
                    objSheet1.Cells(NumLigne, NumColonne) = Valeur
    Pour rappel ma valeur, le num de la ligne, le num de la colonne, le nom de l'onglet(feuille) et le nom de mon fichier Excel ce trouve dans mon fichier Excel de la manier suivante (séparé par des |) :

    NomfichierEXCEL|NomOnglet|Ligne|Colonne|Valeur;
    NomfichierEXCEL|NomOnglet|Ligne|Colonne|Valeur;

  14. #14
    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 543
    Points
    15 543
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim NomsDivers as variant
    NomsDivers = Split("NomfichierEXCEL|NomOnglet|Ligne|Colonne|Valeur;","|")
    NomFich = NomsDivers(0)
    NomOnglet = NomsDivers(1)
    NoLig = Val(NomsDivers(2))
    NoCol = Val(NomsDivers(3))
    Valeur = Replace(NomsDivers(4),";","")
    Après, tu sauras quoi en faire ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Merci ouskel'n'or... Mais cette partie est déja faite...

    En fait, il me reste toujours la partie permettant de mettre la valeur dans la cellule voulu :

    Voici comment je me suis pris jusqu'à présent mais cela ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Set objWbk1 = Workbooks.Open(Chemin & "\" & NomFichier)
                    Set objSheet1 = objWbk1.Sheets(NomOnglet)
                     If Not objSheet1 Is Nothing Then
                        MsgBox "La feuille existe dans le classeur."
                        'Insertion de la valeur dans la cellule
                        'Sheets(NomOnglet).Cells(NumLigne, NumColonne) = Valeur
                        objSheet1.Cells(NumLigne, NumColonne) = Valeur
                     Else
                        MsgBox "La feuille n'existe pas dans le classeur."
                    End If
    La feuille existe bien mais la valeur ne veut pas se mettre dans la cellule je ne sais pas pourquoi...

  16. #16
    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 543
    Points
    15 543
    Par défaut
    Ajoute Value
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objSheet1.Cells(NumLigne, NumColonne).value = Valeur
    Parfois, dans certains cas (!!!) il le faut. Et ne me demande pas de préciser, je n'ai pas identifié les conditions...
    A tout hasard
    Tu dis
    A+

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Et non ça ne fonctionne pas non plus pourtant la feuille existe bien...

  18. #18
    Membre averti
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Points : 396
    Points
    396
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objSheet1.Cells(NumLigne, NumColonne) = Valeur
    Pour rappel ma valeur, le num de la ligne, le num de la colonne, le nom de l'onglet(feuille) et le nom de mon fichier Excel ce trouve dans mon fichier Excel de la manier suivante (séparé par des |) :

    NomfichierEXCEL|NomOnglet|Ligne|Colonne|Valeur;
    NomfichierEXCEL|NomOnglet|Ligne|Colonne|Valeur;
    Fait tout d'abord un MsgBox de NumLigne, NumColonne pour voir ce qu'il y a dedans...

    Essayes de parcourir ton fichier ou il y a les données, de faire un Split("Ta_Ligne", "|") et de le mettre dans un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Set objWbk1 = Workbooks.Open(Chemin & "\" & NomFichier)
    Set objSheet1 = objWbk1.Sheets(NomOnglet)
    If Not objSheet1 Is Nothing Then
       MsgBox "La feuille existe dans le classeur."
       'Insertion de la valeur dans la cellule
       MsgBox NumLigne & ", " & NumColonne 
       objSheet1.Cells(NumLigne, NumColonne) = Valeur
    Else
       MsgBox "La feuille n'existe pas dans le classeur."
    End If
    Tu peux utiliser les objets FSO (Scripting.FileScriptingObject) pour tester l'existance de ton fichier (référence Microsoft Scripting Runtime)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim objFSO as New Scripting.FileSystemObject
    ' [...]
    If (objFSO.FileExists(Chemin & "\" & NomFichier)) Then
    '[...]
    Else
         Msgbox "Fichier Introuvable !"
    End If
    J'ai aussi d'autres questions :
    - Le fichier de destination est-il aussi en csv (ou séparé par des "|") ?
    - Est ce que tu sauves bien à la fin les changements ?

  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 543
    Points
    15 543
    Par défaut
    Citation Envoyé par mathieu44800
    Fait tout d'abord un MsgBox de NumLigne, NumColonne pour voir ce qu'il y a dedans...
    +1 ou un debug.print.
    Tu ne nous dis pas comment tu lis ta ligne "NomfichierEXCEL|NomOnglet|Ligne|Colonne|Valeur;"... Ça aussi ce serait intéressant.

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    180
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 180
    Points : 61
    Points
    61
    Par défaut
    Merci pour l'intérêt sur mon problème...

    Concernant l'erreur liée au code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    objSheet1.Cells(NumLigne, NumColonne) = Valeur
    cela était lié au faite que les paramétre NumLigne et NumColonne étaient des string et non pas des integer....


    Comment je fait pour sauvegarder le fichier ?

    et enfin non le fichier n'est pas en .csv mais des fichier excel (lister dans le fichier .csv.) ... D'ailleur comment je peux savoir que le fichier est déja ouvert?

    Merci d'avance.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/04/2011, 11h30
  2. Réponses: 10
    Dernier message: 22/03/2011, 23h40
  3. [MySQL] Exporter le contenu d'un champ email dans un fichier csv
    Par thamis dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 12/01/2010, 16h17
  4. Réponses: 3
    Dernier message: 11/06/2007, 11h20
  5. fichier CSV modification des données.
    Par suya95 dans le forum Excel
    Réponses: 8
    Dernier message: 26/07/2006, 12h22

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