Message Excel

  • Initiateur de la discussion Dominique
  • Date de début
D

Dominique

Guest
Bonjour,

Voilà mon problème.
J'ai fais une macro qui me demande via la fenêtre Excel "enregistrer sous" un nom de fichier pour enregistrer.
Si le nom de fichier n'existe pas, pas de problème.
Mais si le nom de fichier existe alors Excel me pose la question classique (enregister? Oui, Non, Annuler).
Comment fait-on pour gérer les réponses de ce type de message?

Une autre question du même type.
Excel m'informe que le contenu du presse papier est trop grand et qu'il va le vider.
Comment gérer l'action sur OK.

Pour des raisons de sécurité, je ne souhaite pas shunter les réponses par une gestion des erreurs, mais réellement répondre à la question ou simuler le clic sur OK.

Merci à tous pour votre aide et bonne soirée.
 
@

@+Thierry

Guest
Bonjour Dominique, le Forum

Ta question est un peu ambigue. En fait pour le premier cas de figure, il suffit de faire le test si le Classeur existe si tu ne veux pas shunter les messages d'erreurs par une gestion d'erreur bête et méchante.

Maintenant c'est un peu tordu ton idée de répondre aux messages... On peut utiliser des "SendKeys" mais çà fait assez bricolage, et niveau sécurité c'est tout aussi peu fiable que de mettre DisplayAlerts à False sans même savoir ce qui se passe.

Non l'idéal et de faire un vrai gestionnaire d'erreur, voici un exemple :
Option Explicit
Sub SaveThisBook()
Dim TheFullPath As String

TheFullPath = "C:\Mes Documents\TotoTest2.xls" '<<< Ici ta variable du chemin/nom fichier

On Error GoTo ErrorHandler
Workbooks.Open TheFullPath
ActiveWorkbook.Close 0
Application.DisplayAlerts = False
ThisWorkbook.SaveAs TheFullPath
Application.DisplayAlerts = True

Exit Sub
ErrorHandler:
If Err = 1004 Then
ThisWorkbook.SaveAs TheFullPath
Else
MsgBox "Une Erreur Non Gérée s'est produite " & Err.num & " " & Err.Description
End If
End Sub

Pour l'alerte de ClipBoard, c'est différent, je dois partir là, mais si je me souviens bien j'avais vu différents moyens, dont le plus simple est de vider le presse papier, et je crois même aussi qu'on peut faire un turn off de cette alerte.. mais je ne sais plus où... lol (Je crois même qu'elle se turn off toute seule après un certains nombre de réponses négatives !)

Bon Appétit
@+Thierry
 
R

Roland

Guest
Bonsoir à tous

Pour vider une presse-papier trop volumineux, un moyen simple certe pas trés subtil mais efficace

Range("A1").Copy (en espérant qu'il n'y ai pas une lettre à grand-mère dans la cellule ......)


Roland
 
D

Dominique

Guest
Merci pour vos conseils.

Roland, merci pour ton astuce, elle me plait bien. Je vais l'essayer demain.
Pour info.: il existe une fonction de désactivation du copier, mais ma bécane ralentit.

Thierry, je ne penses pas que je vais adopter ta solution, car je ne suis pas pour la gestion des erreurs, ça fait des programmes pas très propres. Mais tu m'as donné une idée. Si ca marche je l'expliquerai.

Bonne nuit.
 
@

@+Thierry

Guest
Bonjour Dominque, Roland, le Forum

Je ne suis pas tout à fait d'accord Dominique. Il ne faut pas tout confondre, il y a des gestions d'erreur à éviter, surtout celles qui consistent à mettre du On Error Resume Next à tous bouts de champs, afin de "passer coûte que coûte", çà c'est certain que çà peut engendrer des résultats on ne peut plus "aléatoires".

Il y a aussi les codes qui renvoient à des labels avec on Error GoTo "Debut:"... "Centre:"... "Retour:"... Etc:...dans tous les sens et çà aussi, c'est à éviter.

Par contre une vraie gestion d'erreur n'est pas "sale" ! Et en prime, selon les cas, c'est bien plus rapide de générer (événetuellement) une erreur et de savoir la gérer que de boucler sur une grosse collection pour tester l'existence d'un objet. (Voir, entre autre, le site de Laurent Longre)

Mais pour conclure, le VBA étant un language complet, il permet à tout un chacun de programmer selon son niveau et ses compétences ainsi que selon son propre style.

Bonne Journée
@+Thierry
 
D

Dominique

Guest
Bonsoir à tous,

Comme tu le stipules dans ton mail, il existe autant de façons de programmer que de programmeurs. Je vais donc faire un tour sur le site que tu me conseilles.
En gérant les erreurs j'ai peur de laisser passer de "vraies" erreurs. Ta solution permet-t-elle d'éviter ce problème?

Bonne soirée à tous,
Merci,
Dominique
 
T

Ti

Guest
Utiliser la gestion d'erreurs pour s'éviter des dizaines de lignes de codes, je le fais constamment, mais comme tu le soulignes Dominique, cela nécessite que tu saches précisément ce qui est susceptible d'arriver.
Par ailleurs, ce genre d'astuce s'utilise toujours dans des cas très précis (par exemple pour tester si un objet ou un tableau est initialisé, ce qui nécessiterait sinon un ensemble de tests quelquefois compliqués), aussitôt après, tu remets ta gestion d'erreurs "classique".
Le mieux est encore d'ailleurs d'utiliser une fonction spécifique qui réalisera ce test. Ainsi, ayant son propre gestionnaire d'erreur (désactivé donc pour la circonstance) elle n'interférera pas avec le gestionnaire d'erreur de ta procédure principale.
 
@

@+Thierry

Guest
Bonsoir Ti, Dominique, Roland, le Forum

Et bien voilà, Ti a bien résumé ce que j'ai essayé de t'expliquer, et l'idée de passer par des functions est comme à l'habitude de Ti, bien entendu géniale !!!

Bon, et bien je vous laisse pour quelques jours dans le forum, car là je m'en va !!!

mais ce n'est qu'un au-revoir

à bientôt et soyez sages !!! et attention aux beaux ris !!!

@+Thierry
 
Q

Que veux tu réellement faire

Guest
Bonjour tout le monde,

Pour ma part, je programme essentiellement à l'aide de l'enregistreur de macro. Ceci me permet de trouver les fonctions prinsipales à utiliser.

Si te veux coller les données d'une cellule dans une variable ne passe pas par le presse papier. Utilise ceci: Variable = Range("Cellule").Value.
J'étais passé par le presse papier car je désirais coller une feuille entière d'un classeur dans un autre et je n'avais rien trouvé de mieux (rapidité essentiellement).

Bonne soirée à tous,
Dominique
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 276
Messages
2 086 714
Membres
103 377
dernier inscrit
fredy45