Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/08/2011, 15h47   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 80
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 80
Points : 11
Points : 11
Par défaut On error goto ne fonctionne pas

Bonjour à tous,

j'ai un probleme à propos d'un On Error Goto avec ce code suivant
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Application.DisplayAlerts = False
Application.EnableEvents = False
 
For Each Nm In nclasseur.Names
 
 
         On Error GoTo erreur1
        If classeur.Worksheets("DT CC").Range(Nm.Name).HasFormula = True Then
        Else:
        classeur.Worksheets("Feuil1").Range(Nm.Name).Value = nclasseur.Worksheets("Feuil1").Range(Nm.Name).Value
 
        End If
 
erreur1:
 
Next Nm
 
Application.EnableEvents = True
Application.DisplayAlerts = True
En gros je voudrais que lorsque il y a une erreur dans le If ou dans le Else, ca ne fasse rien et que ca passe au Nm suivant pour finir la boucle.

J'utilise pour la premieère fois un On error goto donc je dois surement mal l'utiliser. Par exemple faut-il le déclarer dans les variables?

Merci de votre aide toujours aussi précieuse.

Tioch
tioch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 15h50   #2
Membre actif
 
Avatar de bastou93
 
Homme Bastien Bordas
Étudiant
Inscription : août 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : Homme Bastien Bordas
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2010
Messages : 204
Points : 184
Points : 184
Bonjour,

Je pense (pas testé) que pour ton cas On Error Resume Next me parrait suffisant, en cas d'erreur, il continu le code...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Application.DisplayAlerts = False
Application.EnableEvents = False
 
On Error Resume Next
For Each Nm In nclasseur.Names
	If classeur.Worksheets("DT CC").Range(Nm.Name).HasFormula = True Then
	Else:
		classeur.Worksheets("Feuil1").Range(Nm.Name).Value = nclasseur.Worksheets("Feuil1").Range(Nm.Name).Value
	End If
Next Nm
 
Application.EnableEvents = True
Application.DisplayAlerts = True
Devrai faire l'affaire.. De plus ton if est vraiment bizarre...
Pourquoi tester si c'est VRAI et rien faire et passer dans else et pas tester si c'est faux? j’émets juste une hypothèse plus logique à mon sens:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Application.DisplayAlerts = False
Application.EnableEvents = False
 
On Error Resume Next
For Each Nm In nclasseur.Names
	If classeur.Worksheets("DT CC").Range(Nm.Name).HasFormula = False Then
		classeur.Worksheets("Feuil1").Range(Nm.Name).Value = nclasseur.Worksheets("Feuil1").Range(Nm.Name).Value
	End If
Next Nm
 
Application.EnableEvents = True
Application.DisplayAlerts = True
Tiens moi au jus

Bon courage,
__________________
Bastien
bastou93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 16h02   #3
Candidat au titre de Membre du Club
 
Inscription : juin 2011
Messages : 80
Détails du profil
Informations forums :
Inscription : juin 2011
Messages : 80
Points : 11
Points : 11
Merci c'est ca pour le error goto
et merci pour la synthaxe
tioch est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 09h52   #4
Membre actif
 
Avatar de bastou93
 
Homme Bastien Bordas
Étudiant
Inscription : août 2010
Messages : 204
Détails du profil
Informations personnelles :
Nom : Homme Bastien Bordas
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : août 2010
Messages : 204
Points : 184
Points : 184
Pas de quoi, il faut toujours essayer d'aller au plus simple et mettre le moins de condition possible (quand tu peux bien sur )

Donc si tu as une structure comme ceci:

Code :
1
2
3
if toto=1 then
else
 CODE
Il y a un problème passe plutot par un différent (<>) que égale... etc
Et si tu as beaucoup de condition et tu ne peux pas faire autrement j'aime bien le Case pour sa lisibilité:

Code :
1
2
3
4
5
6
7
8
9
10
Select Case toto
case 1: 'si toto=1
CODE
case 2:
CODE
case 3:
CODE
case else: 'sinon
CODE
end select
Je trouve cela beaucoup plus lisible

Et pour les erreurs "On error", essaye de t'en servir le moins possible et surtout les GOTO après c'est le gros bazar dans ton code préfère par exemple mettre une condition exemple:

Tu veux ouvrir un fichier problème il existe une fois sur 2 donc d'aura une fois sur 2 une erreur bas code toi une fonction FICHIEREXIST test si le fichier existe si oui tu l'ouvre sinon tu ZAP.

Bon courage,
__________________
Bastien
bastou93 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h03.


 
 
 
 
Partenaires

Hébergement Web