> Tous les forums > Forum Bureautique
 vba fonction on error resume next et excel 2013 non commercial?Sujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
deb56
  Posté le 12/09/2015 @ 14:21 
Aller en bas de la page 
Petit astucien

Bonjour à tous.

2 questions:

1. J'ai trouvé sur internet la fonction On Error Resume Next qui semblait répondre à mon problème: ouvrir un classeur, mais, s'il est déjà ouvert, passer directement à l'étape suivante de sélectionner une feuille dans ce classeur. Mais cette fonction ne fonctionne pas avec mon Excel 2003. Est-ce normal? Si oui, à partir de quelle version cette fonction marche-t-elle?

2. Voulant tester mes macros VBA écrites dans Excel 2003 sur des versions ultérieures, j'envisage d'acquérir EXcel 2013 en parallèle avec Excel 2003. Est-ce problématique? Et qu'est-ce que EXCEL 2013 NON COMMERCIAL par rapport à 2013 sans précision? Limites d'usage?

Merci de vos prochaines réponses. Cordialement. deb56

Publicité
Titus68
 Posté le 12/09/2015 à 15:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Cette fonction marche depuis toujours. Il faut la placer avant l'instruction qui va planter. Après l'instruction qui va planter il est possible de tester l'erreur pour faire des actions.

Pour annuler le on error resume next faire un on error goto 0

on error resume next

toto=150/0 ' division par 0 => erreur

if err.number<>0 then

msgbox "Erreur " & err.number & " - " & err.description

exit sub ' ou autre

else

msgbox "OK"

...

end if

Pour la question purement excel, je ne pense pas qu'il y ait de problème entre 2003 et 2013 mais si ferrand passe par là, lui saura sans aucun doute te répondre.

deb56
 Posté le 12/09/2015 à 18:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour, Titus68. Et merci pour cette réponse rapide.

J'avais effectivement placé la fonction avant la possible erreur.

J'avais compris que On Error Resume Next faisait passer automatiquement, en cas d'erreur, la macro à la ligne suivante (dans mon cas, la sélection de la feuille du Classeur déjà ouvert). Le problème est que, si le Classeur est déjà ouvert, Excel m'ouvre la boîte de dialogue pour le signaler avec l'option "Oui", ce qui écrase les entrées précédentes, et l'option "Non" qui arrête la macro (ce que je ne veux pas) en me disant que l'ouverture a échoué (bien sûr!). Mais je vois que tu rajoutes une fonction Si pour préciser où aller si erreur. Ce que je n'avais pas fait. Je vais tester ça.

On Error GoTo 0 arrête bien la macro, non? Or, je ne veux pas l'arrêter mais poursuivre avec la ligne suivante. Est-ce que l'alternative On error GoTo 1, en plaçant 1 avant cette ligne suivante est possible? Il me semble que j'avais testé ça, mais que ça n'avait pas empêché la boîte de dialogue d'erreur d'Excel de s'ouvrir.

Bref je teste et je te tiens au courant. Encore merci et Bonne soirée. deb56

deb56
 Posté le 12/09/2015 à 19:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bravo, Titus68.

Ca marche OK avec la précision dans la fonction If. Merci beaucoup.

Je laisse le sujet ouvert pour le moment, pour espérer une réponse sur EXCEL 2013 NON COMMERCIAL.

Bon WE. deb56

Titus68
 Posté le 12/09/2015 à 21:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Merci.

Juste une précision : en fait on error resume next fera que toutes les erreurs qui apparaitront après le on error resume next seront ignorées, il passera simplement à l'instruction suivante en cas d'erreur.

Parfois c'est pratique mais il peut alors arriver, par exemple, que tu fasses un calcul qui engendre une erreur (par exemple tu calcules avec une zone non numérique) et le script va se poursuivre normalement mais, avec on error resume next, le résultat du calcul ne sera pas celui souhaité. C'est pour cela qu'en remettant parfois on error goto 0 cela annule le on error resume next et ainsi permet au script de redétecter les erreurs (utile pour du debogage notamment).

Après le on error goto 0, le script s'arrêtera effectivement dès lors qu'une erreur sera trouvée.

Il est même possible de faire un débranchement en cas d'erreur dans le script :

on error goto toto

.....

exit sub

toto:

msgbox "Erreur rencontrée" ...

end sub

ferrand
 Posté le 12/09/2015 à 21:33 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

Salut Titus, je passais

Si j'ai bien lu, tu veux utiliser une instruction de gestion d'erreur dans un cas qui n'en déclenche pas...

Si tu ouvres un classeur qui est déjà ouvert, si le classeur est sans modification, il sera à nouveau ouvert sans autre signalisation, s'il a subi des modifications depuis son ouverture, tu auras un message t'informant que tu perdrais les modifs si tu persistes, mais tu peux persister ou abandonner (NB- un classeur peut être considéré modifié dès ouverture sans que tu y touches, et même sans macro, il suffit d'une formule qui se recalcule...)

C'est pourquoi en général on teste si le classeur est ouvert par une boucle, si le nom est trouvé, on l'active et si pas trouvé on l'ouvre. Par contre, ton système fonctionnerait si tu veux ouvrir un classeur qui n'existe pas : là erreur, tu peux renvoyer sur une étiquette, créer le classeur, et revenir à la ligne suivante...

Aucune nouveauté dans la gestion d'erreur depuis 2003 :

On Error GoTo étiquette t'envoie vers une étiquette sous laquelle tu traites l'erreur [l'emplacement de l'étiquette : son nom suivi de : (deux-points)
Les instructions Resume et Resume Next te font revenir si tu les utilises respectivement sur la ligne d'erreur et sur la suivante.

On Error Resume Next te fait passer à la ligne suivante où soit tu traites l'erreur en vérifiant s'il y en a une (If Err.Number > 0...), soit tu laisses poursuivre (connaissant les cas où l'erreur va se produire et sachant que le programme peut continuer.

On Error GoTo 0 annule la gestion d'erreur lancée antérieurement.

Cordialement

Titus68
 Posté le 12/09/2015 à 21:48 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

salut Ferrand

On a failli attendre !

ferrand
 Posté le 12/09/2015 à 22:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Je suis dans mes bagages mais je fais quelques pauses.

deb56
 Posté le 12/09/2015 à 22:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonsoir, Titus et Ferrand.

Merci de ces informations complémentaires. Maintenant, ça fonctionne très bien, sans perte de données et sans apparition de l'alerte Excel sur l'ouverture d'un classeur déjà ouvert. La vérification de l'erreur était manifestement manquante. C'est tout bon!

Ferrand, je pense aussi que faire fonctionner alternativement 2 versions d'Excel ne devrait pas poser de problème. Mais peux-tu me le confirmer? Et qu'est-ce qu'EXCEL 2013 Non Commercial? Présente-t-il des limites de fonctionnement par rapport à EXCEL 2013 sans précision? En dehors de finalités commerciales que je n'ai pas, bien sûr. Et de son prix quasiment divisé par 2.

Merci de ta prochaine réponse.

Et bon WE à tous les 2. deb56

Publicité
Titus68
 Posté le 12/09/2015 à 22:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bon WE également ...

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Excel 2013 sous Windowss 8.1
EXCEL: Fonction DATEDIF
VBA Excel valeur en fonction de cellules
Excel 2013 Bug a l'ouverture des document / page vierge
Excel 2013 - Création pyramide des Ages
Astuce - Remplissage instantané Excel 2013
excel 98 & 2013 - images insérées comptées
Apprendre à compter à Excel 2013 ;-)
bouton fractionnement disparu dans excel 2013
Excel 2013 - Macros
Plus de sujets relatifs à vba fonction on error resume next et excel 2013 non commercial?
 > Tous les forums > Forum Bureautique