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 01/02/2012, 10h55   #1
Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : janvier 2010
Messages : 176
Points : 67
Points : 67
Par défaut Appel macro erreur

Bonjour à toutes et à tous,

Il m'arrive quelque chose d'assez mystérieux, je vous le soumets !
Après ouverture de mon classeur, j'exécute le code suivant pour "nettoyer" certaines cellules:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
Sub ReinitialiserTout()
ActiveSheet.Unprotect ("test")
 
With Range("A6:G21")
    .UnMerge
    .ClearContents
    .Interior.ThemeColor = xlThemeColorDark1
End With
 
ActiveSheet.Protect Password:="test", DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Une erreur 400 apparaît, au niveau de ".UnMerge" (ou ".ClearContents" si je mets Unmerge en commentaire).
Maintenant, si je lance ensuite la macro suivante:

Code :
1
2
3
4
5
6
7
8
9
 
Sub genererLignesDonnees()
Worksheets(3).Protect Password:="test", UserInterfaceOnly:=True
 
Call ReinitialiserTout
 
[...]
 
End Sub
Je n'ai plus d'erreur associée à l'exécution de ReinitialiserTout!
Enfin, si je continue à utiliser mon classeur et que je reviens "plus tard" lancer ReinitialiserTout, ça fonctionne impec'...

Pourquoi donc cette erreur après ouverture du classeur, au lancement de la macro ?

Si vous avez un avis, je suis preneur
Merci d'avance !
d0n32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 20h56   #2
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Citation:
Pourquoi donc cette erreur après ouverture du classeur?
Dans quelle évènement est appelé ReinitialiserTout() ?
Dans Workbook_Open() du classeur ou bien sur un Worksheet_Activate d'une feuille ?

Peut être que l'erreur est liée au fait que ligne 5 "With Range("A6:G21")", le Range n'est associé à aucune feuille.
Est-ce qu'avec ce code ci-dessous, l'erreur est la même ?
Code :
1
2
3
4
5
6
7
8
9
10
11
Sub ReinitialiserTout()
    ActiveSheet.Unprotect ("test")
 
    With ActiveSheet.Range("A6:G21")
       .UnMerge
       .ClearContents
       .Interior.ThemeColor = xlThemeColorDark1
    End With
 
    ActiveSheet.Protect Password:="test", DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
Est-ce que c'est volontaire de toujours utiliser la 3ème feuille dans genererLignesDonnees(),
alors que ReinitialiserTout() travaille sur la feuille courante ?
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 16h55   #3
Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : janvier 2010
Messages : 176
Points : 67
Points : 67
Merci pour ta réponse !
Cette modification ne change pas l'erreur, mais rend le code plus cohérent.
ReinitialiserTout() est appelé sur une feuille (à savoir la 3ème, tout comme genererLignesDonnees()) , après clic sur bouton.
d0n32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 10h11   #4
Membre du Club
 
Homme
Inscription : janvier 2010
Messages : 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : janvier 2010
Messages : 176
Points : 67
Points : 67
De manière assez mystérieuse, la commande suivante permet de se passer du message d'erreur:
Remplacer
Code :
1
2
3
4
5
6
 
Sub ReinitialiserTout()
ActiveSheet.Unprotect ("test")
 [...]
 ActiveSheet.Protect Password:="test", DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
par
Code :
1
2
3
4
5
 
Sub ReinitialiserTout()
Worksheets(3).Protect Password:="test", UserInterfaceOnly:=True
 [...]
End Sub
Si quelqu'un peut m'expliquer en quoi cela pouvait être source d'erreur..
Merci
d0n32 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 17h20.


 
 
 
 
Partenaires

Hébergement Web