Fermeture d'un excel protéger [Résolu]

Signaler
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012
-
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
-
Bonjour,

Je suis face à un problème que je ne sais résoudre. Je vous explique :

J'ai un Fichier XLS (que je nomme D) qui va copier des données contenue dans un autre fichier XLS (que je nomme S).

Le souci est le suivant.
Lorsque j'essaye de fermer le fichier S j'ai le message suivant :
Impossible de définir la propriété Text de la class Characters


En farfouillant un peu j'ai vu que la protection de la feuille entre en conflit.

Or je n'ai pas moyen de la déverrouillé car je n'ai pas le mdp (et je ne souhaite pas y recourir).

Ce que je trouve bizarre c'est qu'en mode enregistrement de macro j'arrive a le fermer. Mais pas lorsque je suis dans mon code.

Code généré
Windows("MonFic.xls").Activate
ActiveWindow.Close


Code écrit
Windows(ActiveWorkbook.Name).Activate
ActiveWindow.Close False



Une suggestion ?

17 réponses

Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Bon c'est méchant comme solution mais voila ce que je fait...

http://www.vbfrance.com/codes/OTER-PROTECTION-FEUILLE-GRACE-BUG-EXCEL_50949.aspx
Messages postés
29570
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
20 septembre 2020
337
Bonjour,

A tout hasard essayes d'utiliser la fonction workbooks.close
et aussi de désactiver les messages d'alertes.

Application.DisplayAlerts = False
Workbooks("Mon_Classeur").Close
Application.DisplayAlerts = True


Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Pour ce qui est de l'appel des méthodes du workbooks j'ai testé ca ne fonctionne pas...

Pour ce qui est du diplayAlerts, je viens de le mettre...et lorsque il est censé se retrouvé false...il reste True...

Je ne comprend pas tout la...

En tout cas merci de t'intéresser !
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Je ne comprend vraiment plus grand chose la...

Le displayAlert ne s'affecte pas...
J'ai tester en voulant intercepté l'erreur avec un on error goto Tag ou encore avec un resume next mais l'erreur n'est pas intercepté...

Par contre après le plantage si je stop le déroulement de la macro le fichier que je doit fermer se ferme bien...

Lapin compris
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Je met mon code du DisplayAlerts pour faire voir que je ne suis pas complétement tombé sur la tète...

Public Sub Alerte()
    If Application.DisplayAlerts = False Then
         Application.DisplayAlerts = True
    Else
        Application.DisplayAlerts = False
    End If
End Sub
Messages postés
693
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
17 avril 2017
2
Bonjour,

Essayes, pour voir, d'inverser l'ordre de fermeture des fichiers.
Tu fermes S à partir de l'éditeur de code ou par un bouton sur une feuille de D ?

Pour ta Sub Alerte, tu peux résumer tes cinq lignes en une seule :
Application.DisplayAlerts = Not Application.DisplayAlerts


Cheyenne
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Je n'ouvre et ne ferme qu'un seul fichier...

Si tu préfère mon fichier D pilote le S via le code.

Bon un peu plus de code !!!

Public Sub CopieOnglet()
On Error GoTo Tag

'Déclaration de mes variables

    Alerte
    NomFicD = ActiveWorkbook.Name
    Fichier = Application.GetOpenFilename("Tous les fichiers (*.*),*.*")
  'Condition IF
    Workbooks.Open (Fichier)
  'Copie de Range
    Workbooks(NomFicD).Activate
   'PasteSpecial du range
    Workbooks(NomFicS).Close False
    Alerte
    End If
Exit Sub

Tag:
Resume Next
End Sub


Merci pour la syntaxe du display...mais ça ne me résout pas mon problème...La procédure du display s’exécute bien mais reste tout le temps a vrai (peut importe la syntaxe)

Malgré le tag d'erreur, l'erreur me demande un débogage (ne prend pas en compte le On error !!)
Si je fait quitter au moment de l'erreur, l’exécution s’arrête et le fichier plante a la fermeture se ferme...

La ou c'est hallucinant...c'est que si j'enregistre une macro ou je sélectionne le fichier et le ferme...Si je call la macro créée ça plante...
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Donc pour résumé...

Le verrouillage du Fichier S, empêche la bonne exécution de la macro qui plante au moment de sa fermeture.

Le display (comme le screenupdate d'ailleurs) ne change jamais de valeurs! De plus le On error n'intercepte pas l'erreur généré !

Si je teste ma macro en pas a pas pour un autre fichier (je saute les étapes de copier coller) il s'ouvre et se ferme bien mais le display ne change toujours pas
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Bon j'ai continué a tester mon display et je me rend compte qu'il le fait trop bien...en mettant la valeur dans une variable temporaire puis msgbox je me rend compte qu'il change de valeur.

Mais pourtant l'erreur 1004 "Propriété Text de classe Characters" est quand même retourné au moment de la fermeture

J'ai supprimé le message du presse papier avec Application.CutCopyMode

Lorsque je debug l'erreur il me positionne sur la ligne de close et m’empêche de sauté la ligne ou de revenir en arrière...

Si je quit, le fichier se ferme (ce qui est quand même le résultat attendu).

Merci de votre patience...
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Un petit up...

Je ne comprend pas pourquoi alors que le display est mis a false j'ai quand même le message d'erreur

De plus j'ai un On error qui n'est pas pris en compte sur cette erreur ! Pourquoi ?
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Up

Le message d'erreur est toujours le même : Impossible de définir la propriété Text de la class Characters

Ce message arrive au moment de la fermeture du fichier S. Il vient du fait que la feuille du fichier S est protégé.

Que je mette le displayAlerts a False ne change rien, l'erreur est tout de même remonté.

Une idée
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Bonjour,

je pense que tu as un objet dont la propriété text a une valeur non acceptable (plusieurs raisons possibles en fonction de l'objet, qui peut être un TextFrame, un Chart, ...)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Il est par ailleurs probable (puisque restent inopérants tant ta gestion d'erreur que l'inhibition des messages d'alerte) que la chose se passe dans un fil distinct (il est à ce propos à noter que les calculs d'Excel se font dans un fil distinct, notamment pour le calcul résultant de formules et/ou de fonctions personnalisées).
A toi de chercher en analmysant tout ton classeur, point par point (tant la partie excel que le code VBA)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Merci de ta réponse, mais a tu lu le début du sujet ?

L'erreur survient sur le code suivant :
Workbooks(NomFicS).Close False


Cette ligne est censé fermé le fichier (aucun calcul). Or comme le fichier que j'essaye de fermé à sa feuille protégé, ca plante. Si je le fait sur un fichier non protégé sa passe tout seul.

Et je n'ai pas la possibilité de déprotégé la feuille (ce qui aurait été la solution).

De plus, lorsque le message d'erreur apparait, si je ne débugue pas et que je fait fin...Le fichier se ferme tout de même (ce qui est le résultat attendu)

J'ai testé en mettant un On error Resume Next, mais c'est comme si il n'etait pas pris en compte.

Malgrés un ApplicationDisplay et un ScreenUpdating mis tout les 2 a false, l'erreur remonte quand même

En espérant avoir été clair

Cdt
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
J'avais bien lu.
Mais le fait que la chose arrive au moment du Close n'est pas, en lui seul, révêlateur de ce que font les fils en cours.


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Messages postés
83
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
19 février 2012

Les fils en cours ? je ne comprend pas. Je n'ai pas d'objet particulier au cours de cette macro !!

Ce qui me fait tiqué est que sur un classeur non protégé mon close marche impeccable.

De plus en enregistrant une macro, j'arrive bien a le fermé sans erreur, mais dés que j'exécute le code généré ca plante.
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

je viens juste de tomber sur ton poste et je me pose quelques questions :

- le fichier S (que je crois être le fichier source) est-il modifié lors de l’exécution de la macro ? (il me semble avoir compris que non...)
- quelle méthode utilises-tu pour ouvrir le fichier S ? donne du code !
- je suis d'accord avec ucfoutu sur le fait que ce fichier S que tu ne modifies pas, apparemment, est vu par excel comme un fichier que tu tentes de modifier.
cela peu venir d'un objet contenu dans le fichier comme une image un graphique ou autre. à tu ce type d'objet dans ton fichier ?

Dans tous les cas cela ce produit car quelque chose veut modifier une propriété de text d'une valeur ou d'un objet qui n'est pas du text !
Dans pas de mal cas excel interprete ce type de demande par une conversion mais quand l'objet en question est verrouillé ça plante.

La solution serait peut être:

par un cumul de ce qui suit:

- ouvrir le fichier source en "read only" (lecture seul)
- Application.Calculation = xlCalculationManual (désactive le calcul automatique)
- Application.CalculateBeforeSave = false (interdit le recalcule à la fermeture du fichier)
- Application.AutomationSecurity = msoAutomationSecurityForceDisable (si le fichier source contient des macros elles seront désactivées)

A+