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 :

Remplacer un fichier par un autre sans l'ouvrir [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 39
    Points : 27
    Points
    27
    Par défaut Remplacer un fichier par un autre sans l'ouvrir
    Bonsoir,

    j'ai déjà écumer un peu tous les forums, sans vraiment trouver les réponses à mon problème, donc je viens vous l'exposer:

    J'ai un fichier source dans un repertoire connu et fixe : C:\users\public\Fichier_source.xls
    J'ai un second fichier dans un répertoire inconnu que je doit remplacer par le fichier_source.xls mais avec son nom d'origine exemple xxx25846_fiche.xls.

    Je cherche un code afin qu'au lancement de ma macro, on me demande ou est le fichier à remplacer, puis remplace le fichier.

    Le top serait qu'après avoir effectuer ce remplacement, qu'il me demande par une msgbox si je veux ouvrir le fichier fraichement remplacé 'oui ou non'. Si non il ferme excel si oui il l'ouvre.

    Je précise que le remplacement de fichier doit être fait sans les ouvrir car ils ont des macros auto_open. J'ai trouver ça : mais ne s'applique pas dans mon cas car le répertoire du second fichier m'est inconnu et est variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oFSO.CopyFile("C:\users\public\Fichier_source.xls","I:\temp\xxx25846_fiche.xls",True)
    Avez-vous des propositions ?


  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Sub RenommeFichier()
    Dim fichSource As String, cheminDest As String, nomSource As String, nomDest
    Dim fichDest As Variant
    Dim objOFS As Variant
     
    fichSource = "C:\users\public\Fichier_source.xls"
    nomSource = Mid(fichSource, InStrRev(fichSource, "\") + 1)
    Set objOFS = CreateObject("Scripting.FileSystemObject")
    If objOFS.FileExists(fichSource) Then
        fichDest = Application.GetOpenFilename("Excel Files (*.xls), *.xls")
        If fichDest <> False Then
            cheminDest = Left(fichDest, InStrRev(fichDest, "\"))
            objOFS.moveFile fichSource, cheminDest
            Kill fichDest
            Name cheminDest & nomSource As fichDest
            If MsgBox("Voulez ouvrir le fichier qui vient d'être déplacé et renommé?", vbOKCancel) = vbOK Then Workbooks.Open fichDest
        End If
    End If
    Set objOFS = Nothing
    End Sub
    Ou aussi simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub renomme()
    Dim fichSource As String
    Dim fichDest As Variant
     
    fichSource = "C:\users\public\Fichier_source.xls"
    fichDest = Application.GetOpenFilename("Excel Files (*.xls), *.xls")
    If fichDest <> False Then
        Kill fichDest
        Name fichSource As fichDest
        If MsgBox("Voulez ouvrir le fichier qui vient d'être déplacé et renommé?", vbOKCancel) = vbOK Then Workbooks.Open fichDest
    End If
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Unpeccable ! J'ai tester la solution 2 (plus simple) ça fonctionne correctement sauf qu'il me supprime le fichier source

    Une petit plus-value si c'est pas trop compliquer à faire :

    prédéfinir un dossier dans lequel la boite doit s'ouvrir (un chemin par défaut en dur dans le code suffit) est-ce possible ?

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Sub RenommeFichier()
    Dim fichSource As String, cheminDest As String, nomSource As String, nomDest
    Dim fichDest As Variant
    Dim objOFS As Variant
     
    fichSource = "C:\Documents and Settings\Administrateur\Bureau\DATA\B_CSF\ActCtrl06-07.xls"
    nomSource = Mid(fichSource, InStrRev(fichSource, "\") + 1)
    cheminDest = "C:\Documents and Settings\Administrateur\Bureau"
    ChDir cheminDest
    Set objOFS = CreateObject("Scripting.FileSystemObject")
    If objOFS.FileExists(fichSource) Then
        fichDest = Application.GetOpenFilename("Excel Files (*.xls), *.xls")
        If fichDest <> False Then
            cheminDest = Left(fichDest, InStrRev(fichDest, "\"))
            objOFS.copyfile fichSource, cheminDest
            Kill fichDest
            Name cheminDest & nomSource As fichDest
            If MsgBox("Voulez ouvrir le fichier qui vient d'être déplacé et renommé?", vbYesNo) = vbYes Then Workbooks.Open fichDest
        End If
    End If
    Set objOFS = Nothing
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    C'est bon pour le fichier source, il ne le supprime plus

    Merci beaucoup !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Bonsoir,

    Je reviens sur le message, car il reste une chose qui ne fonctionne pas :

    Après s'être exécuter normalement, le code demande si je veux lancer le nouveau fichier ainsi obtenu. Si je valide, il m'ouvre correctement le fichier, sauf que celui-ci contient une macro auto_open qui refuse de s'ouvrir automatiquement.

    Elle se lance que si je le fais manuellement. J'ai essayé de l'intégrer dans le code mais je reviens à mon problème de nom de fichier variable:

    Le nouveau code serai :

    application.run "NOM DU FICHIER"!auto_open
    Mais avec NOM DU FICHIER renseigné automatiquement ...

  7. #7
    Membre expérimenté Avatar de Vadorblanc
    Profil pro
    Inscrit en
    Février 2008
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 309
    Points : 1 482
    Points
    1 482
    Par défaut
    Bonsoir
    J'avais le même problême sur un changement de nom du fichier avec la macro qui cherchait le même nom du fichier:Application.Run"Nom du fichier" que j'ai changé par 'Call' 'nom de la macro' et tout était ok ensuite.
    La ligne de code 'Application.Run' est une ligne de code généré par l'éditeur de macro Excel qu'il faut changer impérativement par la commande 'Call'
    Cordialement
    ! Quand tu es arrivé au sommet de la montagne, continue de grimper !

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Ce serait moi, je remplacerais la macro Auto_Open (obsolète) par l'événement Open de l'objet ThisWorkbook.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/08/2009, 21h32
  2. remplacer un fichier par un autre
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/05/2007, 09h22
  3. comment remplacer un caractere par un autre dans un fichier txt
    Par uzumaki_naruto dans le forum Langage
    Réponses: 6
    Dernier message: 24/07/2006, 13h33
  4. Réponses: 9
    Dernier message: 22/05/2006, 12h21
  5. Remplacer un mot par un autre dans un fichier
    Par vbcasimir dans le forum Linux
    Réponses: 8
    Dernier message: 25/04/2006, 12h08

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