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 :

Recopier un fichier en le renommant [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Par défaut Recopier un fichier en le renommant
    Bonjour à tous,

    J'ai un fichier de modele de feuille de temps que j'appelle FdT_2012_MODELE.xls qui est stocker dans "D:\FdT_2012\FdT_2012_MODELE.xls"
    Je voudrai recopier ce fichier pour chacun des utilisateurs de mon département et le mettre dans le répertoire correspondant au service concerné.
    Je voudrai donc boucler sur ce type d'instruction,
    FileCopy "D:\FdT_2012\FdT_2012_MODELE.xls", "D:\FdT_2012\FdT2012_BE\FdT_2012_TOTO.xls"
    sachant que mes deux fichiers sont fermés.
    Dans le fichier excel qui contient le code VBA j'ai en feuille "Janv2012" un tableau avec une colonne pour les noms(1) et une pour les répertoires d'arrivée(4).

    J'ai commencé un bout de programmation mais je cale...

    Est-ce que quelqu'un a déjà rencontré ce type de manipulation et/ou pourrait m'aider.

    D'avance merci
    Véronique

    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
     
    Option Explicit
    Sub DeploiementFdTJanv2012()
     
    Dim PremLigne As Integer, DerLigne As Integer, Ligne As Integer, N°Ligne As Integer, i As Integer, j As Integer
    Dim valeur() As Variant
    Dim cel As Object
     
     
    'Calcul du nombre de ligne à lire
    Sheets("Janv2012").Activate
    PremLigne = Range("A1").End(xlDown).Row + 1
    DerLigne = Range("A65536").End(xlUp).Row
     
    'Lecture ligne par ligne du tableau
    For Ligne = PremLigne To DerLigne
        'Lecture cellule par cellule des lignes du tableau
        i = 0
        For Each cel In Range(Cells(Ligne, 1), Cells(Ligne, 4))
             i = i + 1
             valeur(i) = cel
        Next cel
    Next Ligne
     
     
    FileCopy "D:\FdT_2012\FdT_2012_MODELE.xls", "D:\FdT_2012\FdT2012_BE\FdT_2012_TOTO.xls"
    End Sub

  2. #2
    Membre expérimenté
    Inscrit en
    Juillet 2007
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 239
    Par défaut
    Bonjour,

    j'ai pas lu le code en détail , ni exécuté mais il y a une erreur sur la variable valeur qui est un tableau mais dont la dimension n'est pas défini ( faut faire un redim par exemple).
    Pour chaque ligne tu réécrase valeur (i) ?.
    Tu ne décris pas comment tu nommes le fichier recopié ( ..toto..)


    Si je comprend bien ton problème , en colonne 1 tu as le nom du fichier à copier et en colonne 4 , le répertoire.

    tu peux faire ç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
     
     
    'debut identique à ton code
     
    For Ligne = PremLigne To DerLigne
     
    if len (cells ( ligne , 1).value ) > 0 and len (cells ( ligne , 4).value ) > 0 then 
     
     
    FileCopy "D:\FdT_2012\"  &  cells ( ligne , 1).value   , "D:\FdT_2012\" & cells ( ligne , 4).value   &  "FdT_2012_TOTO.xls"
     
     
    end if 
     
    Next Ligne
    c'est une trame de départ...
    Ensuite il vaut mieux prévoir un if ...fileexists (.... pour tester si le fichier existe vraiment dans le répertoire avant de lancer une commande

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans ton code, quel est le but de lire les cellules des colonnes A&D de la feuille Janv2012 ?
    Parce-que tu lis ces cellules mais après ?
    Que veux tu faire exactement ?
    Copier les colonnes A & D de la feuille Janv2012 du fichier FdT_2012_MODELE.xls vers un autre classeur nommé FdT_2012_TOTO.xls et se trouvant dans un autre répertoire.
    Le nom du réperoire d'arrivée est il fixe ?
    Même question pour le nom du fichier.
    Petite remarque : Tu parles de modèle mais tu utilises un fichier xls et pas un fichier xlt. Est-ce par ignorance de l'existence de modèle dans Excel ou par volonté ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre confirmé
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Par défaut modification de 2 cellules et du nom de feuille
    Bonjour,
    Merci pour vos réponses.
    Le répertoire n'est pas fixe, il se trouve en colonne 4 de mon fichier (concaténation avec nom de service) et le nouveau nom en colonne 5 (concaténation avec nom de famille).
    J'utilise effectivement un fichier xls pour que ce soit plus facile à gérer. J'ai mis le code qui semble fonctionner en-dessous. Par contre le HIC c'est que je ne sais pas comment faire pour ne rien faire qd le fichier d'arrivée existe déjà pour ne pas l'écraser...

    Je voudrai aussi modifier 2 cellules dans mon fichier d'arrivée :
    - La cellule A1 du fichier d'arrivée qui contient le Prénom de la personne et que je vais chercher dans la colonne B du fichier qui contient le code VBA
    - La cellule C1 du fichier d'arrivée qui contient le NOM de la personne et que je vais chercher dans la colonne A du fichier qui contient le code VBA

    et je voudrai également renommer la feuille qui s'appelle MODELE dans le nouveau fichier par NOM (valeur extraite de la colonne A).

    Je ne sais pas comment faire ceci sans ouvrir les fichiers....

    Merci de votre aide.
    Véronique


    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 DeploiementFdTJanv2012()
     
    Dim PremLigne As Integer, DerLigne As Integer, Ligne As Integer, N°Ligne As Integer, i As Integer, j As Integer
    Dim valeur() As Variant
    Dim cel As Object
     
     
    'Calcul du nombre de ligne à lire
    Sheets("Janv2012").Activate
    PremLigne = Range("A1").End(xlDown).Row + 1
    DerLigne = Range("A65536").End(xlUp).Row
     
    For Ligne = PremLigne To DerLigne
     
        If Len(Cells(Ligne, 1).Value) > 0 And Len(Cells(Ligne, 4).Value) > 0 Then
     
     
            FileCopy "D:\FdT_2012\FdT_2012_MODELE.xls", Cells(Ligne, 4).Value & "\" & Cells(Ligne, 5).Value
     
        End If
     
    Next Ligne
     
    End Sub

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour lire et écrire dans un classeur fermé voici un tuto à lire mais rien ne t'empêche d'ouvrir le classeur sans que ce ne soit visible.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre confirmé
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Par défaut Aïe Aïe Aïe
    Bonjour,
    Voila la réponse que je craignais. J'ai déjà regardé plusieurs fois ce tuto mais je n'y comprends pas grand chose...
    Je m'y replonge encore une fois...
    Veronique

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Quel est le problème d'ouvrir un classeur si tu le rends invisible. As-tu une contrainte technique particulière.
    Pour renommer un fichier fermé, tu as l'instruction Name
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Renomme()
     Dim myFolder As String: myFolder = "Z:\Tests\"
     Dim OldName As String: OldName = "Exemple.xls"
     Dim NewName As String: NewName = "120403 Exemple.xls"
     Rename myFolder & OldName, myFolder & NewName
    End Sub
    Sub Rename(OldName As String, NewName As String)
     Name OldName As NewName
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre confirmé
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Par défaut j'ai du mal à suivre ...
    Bonjour,

    Merci pour vos réponses mais j'ai du mal à suivre....
    Je reprends ce que je veux faire.
    Je ne veux pas du tout rendre le classeur invisible, il y a peut être des bouts de code écrit que je ne maitrise pas et qui vous a laissé penser ceci....

    Je reprends mes buts.....
    Nous remplissons des feuilles de temps qui sont des classeurs excel individuels.
    Les éléments qui rendent ces classeurs individuels sont le nom du classeur (attaché au nom de la personne).
    Chaque classeur se différencie des autres par une feuille au nom de la personne ( 2 autres sont cachées), et 2 cellules sur cette feuille, l'une portant le prénom de la personne et l'autre le NOM.

    Pour créer ces 98 feuilles individuelles, j'ai créer une feuille MODELE.xls que je cherche à dupliquer....
    J'ai donc pour cela dans le classeur excel contenant ma macro (macrofdt.xls) un onglet "Janv2012" contenant la table des noms, prénoms, services des individus.

    Avec le bout de macro précédentes, j'arrive à créer mes fichiers TOTOn.xls et les mettre aux bons endroits.

    Maintenant je voudrais individualiser les fichiers sans les ouvrir. C'est à dire renommer 2 cellules dont je puise les valeurs dans l'onglet "Janv2012" de macrofdt.xls ainsi que l'onglet "MODELE"de TOTOn.xls avec le NOM de la Personne qui figure dans l'onglet "Janv2012" de macrofdt.xls.

    Voila, j'espère que j'ai été plus claire dans mes explications....

    Merci encore pour l'aide que vous pouvez m'apporter, ainsi que pour votre patience, je n'ai pas votre expérience d'excel et de VBA .....


    Veronique

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 184
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je reprends ce que je veux faire.
    Je ne veux pas du tout rendre le classeur invisible, il y a peut être des bouts de code écrit que je ne maitrise pas et qui vous a laissé penser ceci....
    La raison pour laquelle j'ai proposé cette solution, c'est parce-que tu veux laisser les classeurs fermés.
    Dans ce cas là, il y a la solution qui est décrite dans le document Lire et écrire dans les classeurs fermés et la FAQ mais qui semble te rebuter et j'en conviens surtout si tu ne maitrises pas VBA.
    Je suppose que la raison qui pousse à travailler avec des classeurs fermés, c'est pour éviter de ralentir l'exécution du programme par l'affichage intempestif des écrans.
    Une alternative à ce qui est décrit plus haut est d'ouvrir une instance Excel que l'on rend invisble.
    Voici un code qui permet d'ouvrir une application Excel en le rendant invisible par l'utilisateur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub ApplicationExcel()
     Dim app As New Excel.Application: app.Visible = False
     Dim wkbTemp As Excel.Workbook: Set wkbTemp = app.Workbooks.Open(Filename)
     '
     '  Ici placer le code d'écriture / lecture
     '
     wkbTemp.Close SaveChanges:=False
     app.Quit: Set app = Nothing
    End Sub
    [EDIT] Attention que s'il y a interruption du programme pendant l'exécution, la deuxième instance d'Excel sera invisible mais toujours ouverte.
    Il est donc fortement conseillé de tester avec la propriété Visible de l'objet Application à True (app.Visble = True)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Membre confirmé
    Profil pro
    Ingénieur Support BE
    Inscrit en
    Décembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Support BE

    Informations forums :
    Inscription : Décembre 2011
    Messages : 79
    Par défaut Copie de fichier résolue
    Bonjour,
    L'intérêt était effectivement de gagner du temps en n'ayant pas toutes ces ouvertures et fermetures de fichiers.
    Je vais donc faire me passer de ce type de programmation trop sioux pour moi pour l'instant.
    Par contre comme j'ai réussi à copier le fichier avec les infos de Code Facile, je vais fermer la discussion et en rouvrir une autre car je galère parce qu'il faut que je balade des infos à travers 3 fichiers....
    Merci à tous de votre aide et à bientôt sur une autre discussion.
    Véronique

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

Discussions similaires

  1. Recopié un fichier au format U en binaire sous ZOS
    Par Kyle Katarn dans le forum z/OS
    Réponses: 6
    Dernier message: 12/11/2008, 10h49
  2. Réponses: 2
    Dernier message: 01/10/2008, 11h15
  3. [OpenOffice][Tableur] Cppie fichier ods et renommer en zip
    Par bibi73 dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 13/02/2008, 15h25
  4. Recopie de fichiers :date de création du fichier perdue
    Par mugwump dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 30/08/2007, 17h17
  5. création script korn shell de recopie de fichiers
    Par jeje4 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 29/03/2007, 08h38

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