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 22/11/2011, 17h50   #1
Membre régulier
 
Inscription : janvier 2003
Messages : 254
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 254
Points : 76
Points : 76
Bonjour,
J'ai un plantage ératique sur une Appli Excel.
Ce plantage survient lorsque j'ajoute par le code une feuille et que je la nomme.

Code :
1
2
3
Sheets("Feuil3").Select
Sheets.Add
ActiveSheet.Name = "maFeuille"
Ce code situé dans un classeur .Xlt plante avec l'erreur 1004, lorsque je le lance en automatique mais pas avec le debugguer. (dans ce cas il marche)
Je ne peux donc voir exactement quel est le bug, (je suis arrivé à fixer la position du bug en mettant des MsgBox pour suivre le fonctionnement du programme en dehors du mode debug.)
J'attends vos idées.
Merci d'avance.
comme de bien entendu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 18h19   #2
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut heu

bonjour

essaie plutot ca:

Code :
1
2
3
4
 
 Sheets.Add After:=Sheets(Sheets.Count)  'traduction: ajoute un sheet apres le dernier sheets
 
sheets(Sheets.Count).Name = "maFeuille"' le nom du sheets(le dernier )="mafeuille"
il n'y a pas besoins de selectionner la derniere feuille pour en ajouter une

la constante 'sheets.count" veut dire "nombre de sheets"et donc ce chiffre correspond a l'index du dernier sheet


au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/11/2011, 10h02   #3
Membre régulier
 
Inscription : janvier 2003
Messages : 254
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 254
Points : 76
Points : 76
Bonjour,

En fait je n'avais pas indiqué précisement mon code. Voici le code
en question qui va planter dans les conditions suivantes :
1./ J'ai lancé le XLT, j'ai effectué des process autres de comptabilité dans le
classeur.
3./ Ensuite j'ai réenregistré en XLT.
Si dans ce cas je passe par le code ci dessous, je vais avoir l'erreur 1004
sur ActiveSheet.Name = "Fiche Tarifaire", si je passe en mode debug
je n'aurais pas l'erreur. (j'ai identifié la position de l'erreur en disposant des MsgBoxdans le code)

Alors que si je modifie mon XLT, et que j'enregistre en XLT (en ne lancant pas les autres process de compta)
Si après je lance le XLT, je n'aurais pas l'erreur lorsque je lance le process. C'est comme si il gardait en mémoire un état qui bloque le fonctionnement, lors du déroulement du process.
Et ceci n'est pas lié aux feuilles pré-existantes lors de l'execution du code puissque je fais un Delette sur ces feuilles.

Voila c'est un peu compliqué à comprendre mais si vous avez des idées.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
On Error Resume Next
    Application.DisplayAlerts = False
    Sheets("Bon de Commande").Delete
    Sheets("Fiche Tarifaire").Delete
    Sheets("Synthèse Financière").Delete
    Application.DisplayAlerts = False
 
   On Error GoTo 0
 
    Sheets.Add After:=Sheets("Proposition commerciale")
    ActiveSheet.Name = "Bon de Commande"
    Sheets.Add After:=Sheets("Bon de Commande")
    ActiveSheet.Name = "Fiche Tarifaire"
Merci d'avance de vos idées.

A patricktoulon, merci de ta réponse mais dans le cas précis il faut que ma feuille Fiche Tarifaire soit située précisement à droite de "Bon de Commande".
comme de bien entendu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 13h36   #4
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour j'ai repris ton idée avec une autre méthode

avec cette méthode il n'y a pas d'erreur a gérer

une boucle sur tout les sheets et si le nom est trouver on le supprime

le principe de cette boucle est un peu particulière par ce que j'y aie inséré une autre boucle a l'aide goto retourne ("repart a la ligne "retourne")
de façon a avoir le sheets.count a chaque boucle ça évite une erreur

sans ça le sheetscount est faux dès la première suppression d'un sheets

j'espère que tu aura compris

avec cette méthode si le sheets n'existe pas il continu et ne bug pas


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
 
Sub supprime_et_recréé_le_sheets()
Application.DisplayAlerts = False
nom_sheets_a_supprimer = Array("Fiche Tarifaire", "Bon de Commande", "Synthèse Financière") 'ici les nom des sheets concernés dans un array
e = 0
retourne:
nombre = Sheets.Count
For i = 1 To nombre
    'puisqu'il y a 3 nom a supprimer les array commence de zero a X donc 0 c'est le premier array
   If Sheets(i).Name = nom_sheets_a_supprimer(e) Then
    Sheets(i).Delete
    e = e + 1
    GoTo retourne
      End If
 Next i
     Sheets.Add After:=Sheets("Proposition commerciale")
    ActiveSheet.Name = "Bon de Commande"
    Sheets.Add After:=Sheets("Bon de Commande")
    ActiveSheet.Name = "Fiche Tarifaire"
 
End Sub
je vais essayer de simplifier encore plus le code mais celui la est deja parfaitement fonctionnel
allez au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/11/2011, 14h39   #5
Membre régulier
 
Inscription : janvier 2003
Messages : 254
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 254
Points : 76
Points : 76
Bonjour,
Merci bien. Mais en fait le problème était autre, lors du Before_Close
du classeur, je masquais l'ensemble des feuilles (sauf une) pour ne pas les montrer au démarrage.
Et j'ai utilisé à mauvais essient, dans une boucle un xlVeryHidden.
Code :
sheets(i).visible = xlVeryHidden.
Je viens de faire un essai avec :
Code :
sheets(i).visible = false
Et là tout fonctionne, autrement dit les feuilles sont correctement supprimées, et donc peuvent être renommées que je sois en XLT ou XLS.

Merci de ton aide patrick.
comme de bien entendu est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/11/2011, 17h25   #6
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

Citation:
Envoyé par comme de bien entendu Voir le message
Bonjour,

Je viens de faire un essai avec :
Code :
sheets(i).visible = false
Et là tout fonctionne, autrement dit les feuilles sont correctement supprimées, et donc peuvent être renommées que je sois en XLT ou XLS.

Merci de ton aide patrick.
hop!hop!hop! absolument pas les sheets ne sont pas supprimés mais cachés

la je ne comprend plus ce que tu veux faire ca n'a plus rien a voir avec l'énoncer de ton post

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon 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 17h25.


 
 
 
 
Partenaires

Hébergement Web