XL 2013 "Argument ou appel de procédure incorrect"

Tubule

XLDnaute Nouveau
Bonjour,

Malgré de très nombreuses recherches sur des forums, je ne parviens toujours pas à résoudre mon problème ...
Je souhaite effectuer des sauvegardes successives d'un fichier dans un dossier de sauvegarde, mais je souhaite seulement avoir 2 fichiers de sauvegarde. Ainsi, j'ai défini la règle comme suit:
Si le jour de la sauvegarde est impair, le fichier s’appellera : XX_1. Sinon, ce sera : XXX_2.

Voici mon code :
VB:
Sub Sauvegarde()
'Sauvegardes automatiques du fichier
    Dim CheminSauvegarde As String, CheminCommun As String, Fichier As String, Fichier1 As String, Fichier2 As String
    Dim DateJour As Date

    CheminSauvegarde = "XXXX"
    CheminCommun = "XXXX"
    Fichier = Dir(CheminCommun & ActiveWorkbook.Name)
    Fichier1 = Dir(CheminSauvegarde & Left(Fichier, Len(Fichier) - 4) & "_1.xlsm") 'Sauvegarde 1
    Fichier2 = Dir(CheminSauvegarde & Left(Fichier, Len(Fichier) - 4) & "_2.xlsm") 'Sauvegarde 2
    DateJour = Left(Date, 2) 'Jour du mois
    
    Do While Len(Fichier) > 0 'le nom de fichier n'est pas vide

        If DateJour Mod 2 <> 0 Then 'Si aujourd'hui est un jour impair, on enregistre sous le format 1
            Application.DisplayAlerts = False 'Arrêt des messages pour écraser fichier
            ActiveWorkbook.SaveCopyAs CheminSauvegarde & Fichier1 'Enregistrement sous le nom de la sauvegarde 1
            Application.DisplayAlerts = True 'Alertes qui apparaissent de nouveau
            
        ElseIf DateJour Mod 2 = 0 Then 'Si aujourd'hui est un jour pair, on enregistre sous le format 2
            Application.DisplayAlerts = False 'Arrêt des messages pour écraser fichier
            ActiveWorkbook.SaveCopyAs CheminSauvegarde & Fichier2 'Enregistrement sous le nom de la sauvegarde 2
            Application.DisplayAlerts = True 'Alertes qui apparaissent de nouveau
            
        End If

        Fichier = Dir() 'passe au nom de fichier Excel suivant
    Loop
    
    ActiveWorkbook.Save 'sauvegarde du fichier actuel
    
    MsgBox ("Sauvegarde du fichier effectuée !")
    

End Sub

"Argument ou appel de procédure incorrect" est le message qui s'affiche après l'exécution de ce code. La ligne surlignée en jaune est celle-ci :

Code:
Fichier1 = Dir(CheminSauvegarde & Left(Fichier, Len(Fichier) - 4) & "_1.xlsm") 'Sauvegarde 1

Je ne comprends pas où est le problème : j'ai vu sur d'autres forums que certains avec des problèmes avec la fonctions Dir qui était appelée deux fois, mais ici ce n'est pas le cas pour Fichier1...
Pouvez-vous m'aider s'il vous plaît ?
J'ai placé le document en pièce jointe, si ça peut aider ..
Merci par avance :)
 

Pièces jointes

  • test.xlsm
    12.2 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Tubulle,
Pourquoi utilisez vous Dir sur ces trois lignes ?
On peut construire les noms de fichiers sans :
VB:
Fichier = CheminCommun & ActiveWorkbook.Name
    Fichier1 =  Left(Fichier, Len(Fichier) - 4) & "_1.xlsm" 'Sauvegarde 1
    Fichier2 =  Left(Fichier, Len(Fichier) - 4) & "_2.xlsm" 'Sauvegarde 2
CheminSauvegarde est inutile puisque vous sauvegardez en :
ActiveWorkbook.SaveCopyAs CheminSauvegarde & Fichier1
Ensuite il faut que CheminSauvegarde se termine par \
CheminSauvegarde = "XXXX" & "\"
 

Tubule

XLDnaute Nouveau
Bonjour!
Merci beaucoup pour votre aide Sylvanu.
Oui, j'avais bien mis le "\" chez moi lorsque j'avais entré les noms des chemins, mais merci du rappel.

Lorsque j'enlève le nom "CheminSauvegarde" dans la boucle Elseif ci-dessous :
VB:
 ElseIf DateJour Mod 2 = 0 Then 'Si aujourd'hui est un jour pair, on enregistre sous le format 2

            Application.DisplayAlerts = False 'Arrêt des messages pour écraser fichier

            ActiveWorkbook.SaveCopyAs [B]CheminSauvegarde[/B] & Fichier2 'Enregistrement sous le nom de la sauvegarde 2

            Application.DisplayAlerts = True 'Alertes qui apparaissent de nouveau

            

        End If

Ca fonctionne mais du coup ça n'enregistre pas le fichier où je voudrais (ce qui est logique, puisque je ne dis pas à l'ordinateur que je voudrais enregistrer une copie du fichier dans CheminSauvegarde) ! Donc comment faire pour enregistrer une copie d'un fichier dans un dossier spécifique ?

Par ailleurs, lorsque j'enlève ce fameux "Cheminsauvegarde", une autre erreur apparaît cette fois sur la fin de la boucle Do While : "Argument ou appel de procédure incorrect " :
Code:
Fichier = Dir()

Par ailleurs, quand je l'enlève, ça fait une boucle infinie et ça bloque Excel (logique aussi, ceci dit...)


Enfin, lorsque je laisse "CheminSauvegarde" dans cette ligne de code :
Code:
ActiveWorkbook.SaveCopyAs CheminSauvegarde & Fichier1
L'ordinateur ne reconnaît pas le chemin et me demande si je l'ai modifié ou supprimé ... C'est incompréhensible !

Auriez-vous une idée s'il vous plaît ? Je n'y comprends plus rien ..!
Merci

NB: Vous trouverez ci-joint le fichier "corrigé".
 

Pièces jointes

  • test.xlsm
    12.4 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Un point m'échappe.Vous voulez faire une sauvegarde de votre fichier courant.

Vous faites Fichier = CheminCommun & ActiveWorkbook.Name, donc par définition Len(Fichier)>0

A quoi sert le : Do While Len(Fichier) > 0 puisque de toute façon vous traitez le fichier courant ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Second point, ActiveWorkbook.SaveCopyAs CheminSauvegarde & Fichier1 ne peut conduire qu'à une erreur. Par ex :

CheminSauvegarde = "C:\"
CheminCommun = "C:\"

Fichier = CheminCommun & ActiveWorkbook.Name donc Fichier = "C:\test (19).xlsm"

Donc ActiveWorkbook.SaveCopyAs CheminSauvegarde & Fichier1 devient

ActiveWorkbook.SaveCopyAs "C:\C:\test (19).xlsm" donc ce chemin est faux puisqu'il répète deux fois la racine.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
J'ai mis le fichier "à ma sauce", la sauvegarde s'effectue bien à l'emplacement demandé.
( Pensez à modifier les chemins CheminSauvegarde et CheminCommun )
Ou encore un peu simplifié en V20.
 

Pièces jointes

  • test (19).xlsm
    17.2 KB · Affichages: 2
  • test (20).xlsm
    17 KB · Affichages: 2

Tubule

XLDnaute Nouveau
Bonjour,
Un point m'échappe.Vous voulez faire une sauvegarde de votre fichier courant.

Vous faites Fichier = CheminCommun & ActiveWorkbook.Name, donc par définition Len(Fichier)>0

A quoi sert le : Do While Len(Fichier) > 0 puisque de toute façon vous traitez le fichier courant ?

Bonjour Sylvanu,
Merci beaucoup pour votre réponse.
En fait, je cherche à étudier les 2 fichiers de sauvegarde dans le dossier de sauvegarde. Donc je fais une boucle classique adaptée à cette action :

VB:
Do While Len(Fichier) > 0
        'On écrit ici ce qu'on veut dans la boucle
        
        Fichier = Dir() 'On passe au fichier suivant'
    Loop
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Désolé alors je n'ai rien compris. Je pensais que suivant le jour pair ou impair, il fallait faire une sauvegarde du fichier courant avec un indice _1 ou _2, à l'endroit demandé.
Mais en quoi mes fichiers ne répondent pas au besoin ?
J'ai testé, la sauvegarde s'effectue bien où j'ai demandé.
Désolé de ne pouvoir plus vous aider.
( ceci dit, malgré mon incompréhension, je persiste sur la pertinence du post #5)
 

Tubule

XLDnaute Nouveau
J'ai mis le fichier "à ma sauce", la sauvegarde s'effectue bien à l'emplacement demandé.
( Pensez à modifier les chemins CheminSauvegarde et CheminCommun )
Ou encore un peu simplifié en V20.

Merci beaucoup!
En fait, le chemin commun n'est pas utile, j'ai juste remplacé CheminCommun par CheminSauvegarde et ça fonctionne ! Mille mercis pour votre aide, vous être trop fort :)
 

Tubule

XLDnaute Nouveau
Désolé alors je n'ai rien compris. Je pensais que suivant le jour pair ou impair, il fallait faire une sauvegarde du fichier courant avec un indice _1 ou _2, à l'endroit demandé.
Mais en quoi mes fichiers ne répondent pas au besoin ?
J'ai testé, la sauvegarde s'effectue bien où j'ai demandé.
Désolé de ne pouvoir plus vous aider.
( ceci dit, malgré mon incompréhension, je persiste sur la pertinence du post #5)
Oui, c'était tout à fait pertinent je vous confirme !!
 

Discussions similaires

Statistiques des forums

Discussions
303 640
Messages
2 012 836
Membres
219 429
dernier inscrit
Remy.d