Macro ouverture : fichier déjà ouvert

Brigitte

XLDnaute Barbatruc
Bonjour,

Mon époux m'a confié une jolie petite macro qui me permet en ouvrant le fichier dans lequel elle est, d'avoir une liste (pré remplie avec nom fichier et répertoire), de cocher les fichiers que je veux ouvrir... C bien pratique.
J'ai voulu rajouter une petite macro pour déprotéger les classeurs que cela ouvre, feuille par feuille (sans donner les noms : tous ces classeurs ont une protection de toutes les feuilles à la fermeture pour les autres utilisateurs que moi). Afin que je puisse tranquillement faire mes modifs. Ils se reprotègent à la fermeture.

Seulement depuis qu'on a rajouté la macro DEPROTEGER, le fichier bugge à partir d'une certaine ligne (un certain fichier et tous les autres derrière) la 15 notamment.
Cela me dit que le fichier est déjà ouvert (et idem pour tous les autres), mais pas pour les fichiers situés jusqu'à la ligne 14.

Voici le bug :

Workbooks.Open(Filename:="" & Repertoire & "" & Fichier & "", UpdateLinks:=0). _
RunAutoMacros Which:=xlAutoOpen

Auriez vous une idée de ce qui fait bugger ? j'ai volontairement désactivé la macro pour voir si ca marchait sans cela, et c'est nickel mais j'aimerais bien pouvoir l'utiliser.

MERCI d'avance.

ps : bien sûr pour essayer, il vous faut lister une vingtaine de fichiers (peut être faut il en protéger celui de la ligne 15 sur une feuille au moins) de votre pc... Ci joint la macro de mdf à cet effet.
 

Pièces jointes

  • _macro ouverture.xls
    69 KB · Affichages: 103
  • _macro ouverture.xls
    69 KB · Affichages: 111
  • _macro ouverture.xls
    69 KB · Affichages: 111
  • _mDFScanFichiers(detail).zip
    33.7 KB · Affichages: 36

Kiseki

XLDnaute Occasionnel
Re : Macro ouverture : fichier déjà ouvert

Bonjour à tous,

Je me demande si ce n'est pas le fait d'utiliser la variable i dans les deux procédures, donc dans ta procédure DEPROTEGER tu relance le i de ta boucle for de la procédure OUVERTURE et donc il refait les mêmes classeurs.

Essaye de l'exécuter pas à pas (F8) pour identifier le problème en ajoutant un debug.print i.
 

Pierrot93

XLDnaute Barbatruc
Re : Macro ouverture : fichier déjà ouvert

Re,

Je me demande si ce n'est pas le fait d'utiliser la variable i dans les deux procédure, donc dans ta procédure DEPROTEGER tu relance le i de ta boucle for de la procédure OUVERTURE et donc il refait les même classeur.

bien vu Kiseki:), il y a lieu de déporter sa déclaration dans les 2 procédures... et de la supprimer en tête de module
 

Brigitte

XLDnaute Barbatruc
Re : Macro ouverture : fichier déjà ouvert

Bonjour vous deux,

Oui mais concrètement, comment je fais ?

Code:
Dim Maxi As Integer
Dim Test As String
Dim Repertoire As String
Dim Fichier As String
Dim Zone As Range
Dim i As Variant
Sub Ouverture()
'
Maxi = Range("J1")
Set Zone = Range("B5:J" & Maxi & "")
    For i = 1 To Maxi
Test = Zone(i, 3)
Repertoire = Zone(i, 4)
Fichier = Zone(i, 2)
If Test = "Vrai" Then
    Workbooks.Open(Filename:="" & Repertoire & "" & Fichier & "", UpdateLinks:=0). _
        RunAutoMacros Which:=xlAutoOpen
'DEPROTEGER
End If
    Next i
MsgBox ("Macro terminée")
End Sub
Sub DEPROTEGER()
' Déprotection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
    Worksheets(i).Unprotect
Next i
End Sub

Car je ne sais pas faire.

Merci d'avance.
 

Pierrot93

XLDnaute Barbatruc
Re : Macro ouverture : fichier déjà ouvert

Re,

modifie comme suit :
Code:
Dim Maxi As Integer
Dim Test As String
Dim Repertoire As String
Dim Fichier As String
Dim Zone As Range
Sub Ouverture()
Dim i As Variant
Maxi = Range("J1")
Set Zone = Range("B5:J" & Maxi & "")
    For i = 1 To Maxi
Test = Zone(i, 3)
Repertoire = Zone(i, 4)
Fichier = Zone(i, 2)
If Test = "Vrai" Then
    Workbooks.Open(Filename:="" & Repertoire & "" & Fichier & "", UpdateLinks:=0). _
        RunAutoMacros Which:=xlAutoOpen
'DEPROTEGER
End If
    Next i
MsgBox ("Macro terminée")
End Sub
Sub DEPROTEGER()
Dim i As Variant
' Déprotection automatique de toutes les feuilles d'un classeur
Dim nombre As Integer
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For i = 1 To nombre
    Worksheets(i).Unprotect
Next i
End Sub
 

Kiseki

XLDnaute Occasionnel
Re : Macro ouverture : fichier déjà ouvert

Pour t'expliquer simplement : Il y a un conflit avec la variable i qui est utiliser dans les deux procédures.

Donc on fait en sorte que cette variable ne puissent pas s'étendre hors de sa procédure et ne gêne plus l'autre.
 

mcj1997

XLDnaute Accro
Re : Macro ouverture : fichier déjà ouvert

Bonsoir,

Je recherche sur le forum mais sans trouver le même fichier que celui de Brigitte "macro ouverture" mais pour fermer des fichiers avec le principe de case à cocher mais sans la déprotection. J'aurai en colonne C les fichiers ouverts et en E les adresses respectives.

Merci d'avance
 

Discussions similaires

Statistiques des forums

Discussions
312 443
Messages
2 088 472
Membres
103 862
dernier inscrit
pln47