Procédure incomprise
Bonjour à tous,
Je travaille sur des fichiers excel créés et mis à jour par des personnes avec qui je n'ai pas de contact. J'ai donc des problèmes pour l'appropriation des fichiers et des codes. Notamment avec une procédure qui est appelé dans pas mal de macro, avec "Call", et qui m'empêche d'exécuter ces macros car celle-ci ne "fonctionne pas".
J'espère que vous avez compris mon problème, je souhaiterez donc que quelqu'un arrive à m'expliquer ce que fait la procédure et pourquoi elle ne fonctionne pas:
Je précise que "FichierEstOuvert" est une fonction de type booléen qui renvoie True si le fichier est ouvert et False s'il est fermé.
Public Sub Ouvrir_Archives()
Dim Nom_fichier As String
10 nom_chemin = ActiveWorkbook.Path & "\"
Nom_fichier = nom_chemin & "fichier1.xls"
If FichierEstOuvert(Nom_fichier) = True Then
Application.StatusBar = "Macro en cours, veuillez patienter..."
Secondes = 1
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
GoTo 10
Else
Workbooks.Open (nom_chemin & "\fichier1.xls")
Workbooks("Archives_Suivi_Pieces.xls").Activate
ActiveWorkbook.RunAutoMacros xlAutoOpen
End If
If FichierEstOuvert(Nom_fichier) = False Then GoTo 10
Application.StatusBar = False
End SubBonjour, pour le workbook open il y un "\" de trop car il existe déjà dans nom_chemin
Et pour la rédaction j'écrirai plutôt ainsi puisque votre variable chemin + nom fichier existe déjà :
Workbooks.Open Filename:= Nom_fichier
à la place de
Workbooks.Open (nom_chemin & "\fichier1.xls")Personnellement j'aurai codé dans l'autre sens ( si fichier fermé alors on ouvre ) sinon le code continue...
çà évite les go to 10 les loops et compagnie.
Celà reste étrange quand même de voir tester si fichier ouvert = non ....
Puis refaire le même test si fichier ouvert = oui ???
Dans la logique : Test si fichier ouvert=non .. alors on ouvre et puis on continue le code.
pas besoin de retester si fichier ouvert=oui.
Je changerai tout le code par :
Public Sub Ouvrir_Archives()
Dim Nom_fichier As String ' Déclaration de la variable Nom_Fichier et chemin du fichier
'Chemin du fichier = même chemin que le classeur actuellement ouvert
nom_chemin = ActiveWorkbook.Path & "\"
'Nom_fihier à ouvrir = chemin précédemment trouvé + "fichier1.xls"
Nom_fichier = nom_chemin & "fichier1.xls"
'CONDITION Si fichier n'est pas ouvert alors ouvrir
If FichierEstOuvert(Nom_fichier) = False Then
Workbooks.Open Filename:=Nom_fichier
Workbooks("Archives_Suivi_Pieces.xls").Activate
End If
'Ensuite la procédure continue il devient inutile de tester l'inverse : FichierEstOuvert(Nom_fichier) = True
'Evidemment si dans le premier test le fichier n'était pas False alors c'est qu'il est True. pas besoin de vérifier.
ActiveWorkbook.RunAutoMacros xlAutoOpen
Application.StatusBar = "Macro en cours, veuillez patienter..."
Secondes = 1
Début = Timer
Fin = Début + Secondes
Do Until Timer >= Fin
DoEvents
Loop
Application.StatusBar = False
End SubOk super merci beaucoup Xmenpl, votre réponse résout mon problème et m'a permis en plus de comprendre votre raisonnement.
Comment puis-je utiliser cette procédure depuis une macro n'appartenant pas au même projet VBA ?
De plus, est-ce que vous savez ce que signifie ce bout de code ? j'ai du mal à le comprendre:
Dim fs, f ' On déclare les variables
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(nom_complet) ' retourne le nom du fichier
f.Attributes = f.Attributes And Not 1 'ReadOnly