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 pour écrire sur plusieurs fichiers


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2013
    Messages : 48
    Par défaut Macro pour écrire sur plusieurs fichiers
    Bonjour à tous !

    Je chercherai à faire une macro VBA qui me permettrait de pouvoir marquer des informations sur plusieurs fichiers présents dans un répertoire bien défini selon les informations et critères présents dans un fichier (voir fichier Macrodiligences.xlm ci-joint).

    Je pense avoir déjà quelques indications pour réaliser cette macro, mais comme je suis vraiment débutant en vba c'est assez confus dans ma tête .

    Alors premièrement pour que la macro trouve l'endroit où sont les fichiers à modifier je pensais utiliser un code dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chem = "Z:\SAUV2016\DILIG2016\
    les fichiers à modifier se trouve dans la colonne "FICHIER DILIGENCE" présent colonne D du fichier [attachment=1]MacroDiligences.xlsm[/attachment]. Donc il faudrait que la macro ouvre ces fichiers un par un. Inscrive les données présents dans les colonnes A, B et E. Pour exemple de la colonne A le code je pensais à un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    L = Sheets("Modele").Range("A65536").End(xlUp).Row 
    Sheets("Modele").Range("A" & L + 1) = "L'information présent dans la colonne date"

    Vous pouvez voir un exemple du 1er fichier à modifier dans l'exemple (fichier ronald.xls ci-joint).

    Je voudrais juste que la macro ne fasse pas des modifs de fichier quand il y a une croix dans la colonne C "Clos"

    Merci d'avance pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé Avatar de Neutthsch
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2016
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 105
    Par défaut petit Tuto!
    Salut ExcelLiod,

    Pour ce qui est de la manipulation des fichiers je te conseille ce tuto.
    Lis ça tranquillement, fait des essais et reviens dans le coin si t'as toujours besoin d'aide.

    ATTENTION : Je conseille la manipulation de fichier en mode bac à sable. Tu créés un dossier fictif avec des fichiers fictifs et tu ne travailles que sur cette destination pour t’entraîner. Tu ne changeras le chemin d’accès qu'une fois le code maîtrisé. on a vite fait d'altérer des données avec codes là

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si le nom des fichiers est intégralement écrit dans une colonne de son fichier Excel, il ne me semble pas nécessaire de boucler sur la liste des fichier avec FSO ?

    voici un exemple pas super optimisé, à bien sûr adapter :

    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
    Sub MesEcrits()
    Dim CELL_SOURCE As Range
    Dim WB_DEST As Workbook
    Dim CELL_DEST As Range
    Dim PLAGE_SOURCE As Range
    Const CHEMIN_DOSSIER As String = "Z:\SAUV2016\DILIG2016\"
     
    Application.ScreenUpdating = False
     
    With ThisWorkbook.Worksheets("Feuil1")
        'filtre automatique pour ne prendre que les lignes sans X en colonne C
        With .Range("A1")
            .AutoFilter
            .AutoFilter 3, "<>X"
        End With
     
        'l'ensemble des lignes non clôturées
        Set PLAGE_SOURCE = .UsedRange.Columns(1).SpecialCells(xlCellTypeVisible)
    End With
     
    ' boucle sur chaque ligne
    For Each CELL_SOURCE In PLAGE_SOURCE.Cells
        If CELL_SOURCE.Row > 1 And CELL_SOURCE.Offset(0, 3).Value <> "" Then
            ' ouverture du fichier
            Set WB_DEST = Workbooks.Open(CHEMIN_DOSSIER & CELL_SOURCE.Offset(0, 3).Value)
     
            With WB_DEST.Worksheets("Modele")
                ' positionnement sur la première ligne vide en colonne A
                Set CELL_DEST = .Cells(.Rows.Count, 1).End(xlUp)(2)
            End With
     
            ' écriture des données
            With CELL_DEST
                .Value = CELL_SOURCE.Value
                .Offset(0, 1).Value = CELL_SOURCE.Offset(0, 1).Value
                .Offset(0, 2).Value = CELL_SOURCE.Offset(0, 4).Value
            End With
     
            ' si tu veux marquer un "X" sur la ligne que tu viens d'écrire
            CELL_SOURCE.Offset(0, 2).Value = "X"
     
            ' fermeture et sauvegarde du fichier
            WB_DEST.Close True
        End If
    Next CELL_SOURCE
     
     
    With ThisWorkbook
        ' retrait du filtre automatique
        .Worksheets("Feuil1").Range("A1").AutoFilter
        ' enregistrement
        .Save
    End With
     
    Application.ScreenUpdating = True
    End Sub

    il est IMPORTANT que le nom du fichier dans ta colonne D :

    - soit bien écrit
    - comporte l'extension (.xls ou .xlsx ou .xlsm etc...)

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Novembre 2013
    Messages : 48
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    si le nom des fichiers est intégralement écrit dans une colonne de son fichier Excel, il ne me semble pas nécessaire de boucler sur la liste des fichier avec FSO ?

    voici un exemple pas super optimisé, à bien sûr adapter :

    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
    Sub MesEcrits()
    Dim CELL_SOURCE As Range
    Dim WB_DEST As Workbook
    Dim CELL_DEST As Range
    Dim PLAGE_SOURCE As Range
    Const CHEMIN_DOSSIER As String = "Z:\SAUV2016\DILIG2016\"
     
    Application.ScreenUpdating = False
     
    With ThisWorkbook.Worksheets("Feuil1")
        'filtre automatique pour ne prendre que les lignes sans X en colonne C
        With .Range("A1")
            .AutoFilter
            .AutoFilter 3, "<>X"
        End With
     
        'l'ensemble des lignes non clôturées
        Set PLAGE_SOURCE = .UsedRange.Columns(1).SpecialCells(xlCellTypeVisible)
    End With
     
    ' boucle sur chaque ligne
    For Each CELL_SOURCE In PLAGE_SOURCE.Cells
        If CELL_SOURCE.Row > 1 And CELL_SOURCE.Offset(0, 3).Value <> "" Then
            ' ouverture du fichier
            Set WB_DEST = Workbooks.Open(CHEMIN_DOSSIER & CELL_SOURCE.Offset(0, 3).Value)
     
            With WB_DEST.Worksheets("Modele")
                ' positionnement sur la première ligne vide en colonne A
                Set CELL_DEST = .Cells(.Rows.Count, 1).End(xlUp)(2)
            End With
     
            ' écriture des données
            With CELL_DEST
                .Value = CELL_SOURCE.Value
                .Offset(0, 1).Value = CELL_SOURCE.Offset(0, 1).Value
                .Offset(0, 2).Value = CELL_SOURCE.Offset(0, 4).Value
            End With
     
            ' si tu veux marquer un "X" sur la ligne que tu viens d'écrire
            CELL_SOURCE.Offset(0, 2).Value = "X"
     
            ' fermeture et sauvegarde du fichier
            WB_DEST.Close True
        End If
    Next CELL_SOURCE
     
     
    With ThisWorkbook
        ' retrait du filtre automatique
        .Worksheets("Feuil1").Range("A1").AutoFilter
        ' enregistrement
        .Save
    End With
     
    Application.ScreenUpdating = True
    End Sub

    il est IMPORTANT que le nom du fichier dans ta colonne D :

    - soit bien écrit
    - comporte l'extension (.xls ou .xlsx ou .xlsm etc...)
    Merci infiniment ! ça fonctionne nickel ta macro et j'ai beaucoup appris sur les codes que t'utilises un grand merci !!!!!

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

Discussions similaires

  1. [XL-2010] Macro Modification multiple sur plusieurs fichiers
    Par tbuhagiar dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/10/2013, 12h58
  2. idee pour traitement sur plusieurs fichier excel
    Par jumpman dans le forum VB.NET
    Réponses: 0
    Dernier message: 28/10/2009, 19h38
  3. Création de fichiers batch pour écrire sur SQLPlus
    Par seb591 dans le forum Sql*Plus
    Réponses: 10
    Dernier message: 22/05/2007, 11h46
  4. écrire sur plusieurs lignes dans un fichier
    Par kenny49 dans le forum Langage
    Réponses: 3
    Dernier message: 06/04/2007, 11h47
  5. Macros sur Plusieurs fichiers Excel
    Par Echizen1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/06/2006, 11h21

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