Fermeture d'un excel protéger

Résolu
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 - 9 mai 2011 à 14:06
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 - 9 juin 2011 à 16:03
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

Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
7 juin 2011 à 14:49
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
3
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
9 mai 2011 à 16:01
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
0
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
9 mai 2011 à 16:15
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 !
0
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
9 mai 2011 à 16:47
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
9 mai 2011 à 17:27
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
0
cs_cheyenne Messages postés 693 Date d'inscription samedi 18 mai 2002 Statut Membre Dernière intervention 17 avril 2017 2
9 mai 2011 à 19:34
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
0
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
9 mai 2011 à 20:17
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...
0
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
9 mai 2011 à 20:50
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
0
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
9 mai 2011 à 22:29
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...
0
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
10 mai 2011 à 12:08
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 ?
0
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
7 juin 2011 à 09:54
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 juin 2011 à 10:22
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 juin 2011 à 10:30
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
0
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
7 juin 2011 à 11:26
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 juin 2011 à 11:57
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
0
Phalalis Messages postés 83 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 19 février 2012 1
7 juin 2011 à 13:24
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.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
9 juin 2011 à 16:03
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+
0
Rejoignez-nous