VBA : Big plantage ddans mon code ... ou est l'erreur ?
Le
Domi

Bonsoir à tous,
Mon code de copie de feuille tournait parfaitement bien jusqu'au moment ou
j'ai inséré les 3 lignes permettant de virer le code dans le module de la
feuille copiée (proposé dans le forum il y a quelques jours)
Sheets("AMModele").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("AMModele").[AE1]
'Supprime de la nouvelle feuille créée toutes les formules pour ne conserver
que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
'Suppression de toutes les Shapes
ActiveSheet.DrawingObjects.Delete
End With
'Suppression du code de module de la feuille copiée
With
ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With
'Plantage complet de l'applic et je me fais ejecterd'EXCEL si je rajoute la
ligne suivante (anodine pourtant non ?)
Sheets("BASE").Select 'Ca plante quelle que soit la feuille que je
selectionne ensuite et sur n'importe quel micro
Message : Erreur d'execution 2147417848 (80010108)
La méthode 'Activate' de l'objet_'worksheet' à échoué (idem si Select à la
place d'activate)
Plantage et ejection d'Excel !
Config Excel 2000/Wk2
Merci pour votre aide
Domi
Mon code de copie de feuille tournait parfaitement bien jusqu'au moment ou
j'ai inséré les 3 lignes permettant de virer le code dans le module de la
feuille copiée (proposé dans le forum il y a quelques jours)
Sheets("AMModele").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("AMModele").[AE1]
'Supprime de la nouvelle feuille créée toutes les formules pour ne conserver
que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
'Suppression de toutes les Shapes
ActiveSheet.DrawingObjects.Delete
End With
'Suppression du code de module de la feuille copiée
With
ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With
'Plantage complet de l'applic et je me fais ejecterd'EXCEL si je rajoute la
ligne suivante (anodine pourtant non ?)
Sheets("BASE").Select 'Ca plante quelle que soit la feuille que je
selectionne ensuite et sur n'importe quel micro
Message : Erreur d'execution 2147417848 (80010108)
La méthode 'Activate' de l'objet_'worksheet' à échoué (idem si Select à la
place d'activate)
Plantage et ejection d'Excel !
Config Excel 2000/Wk2
Merci pour votre aide
Domi
Quand tu copies ta feuille, il y a création d'un nouveau classeur contenant la feuille copiée.
à la fin de l'opération, c'est ce nouveau classeur qui est actif ....et normalement, il ne devrait contenir que la
feuille copiée.
Avant de sélectionner une feuille appartenant au premier classeur, tu dois d'abord l'activer et ensuite sélectionner la
feuille.
En début de procédure :
Dim Nom as String
Nom = ThisWorkbook.name
Application.ScreenUpdating = False
'Ta procédure
'Remplace par ceci où tu éprouves des difficultés.
Workbooks(Nom).activate
Worksheets("Base").select
Salutations!
"Domi" Bonsoir à tous,
Mon code de copie de feuille tournait parfaitement bien jusqu'au moment ou
j'ai inséré les 3 lignes permettant de virer le code dans le module de la
feuille copiée (proposé dans le forum il y a quelques jours)
Sheets("AMModele").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("AMModele").[AE1]
'Supprime de la nouvelle feuille créée toutes les formules pour ne conserver
que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
'Suppression de toutes les Shapes
ActiveSheet.DrawingObjects.Delete
End With
'Suppression du code de module de la feuille copiée
With
ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With
'Plantage complet de l'applic et je me fais ejecterd'EXCEL si je rajoute la
ligne suivante (anodine pourtant non ?)
Sheets("BASE").Select 'Ca plante quelle que soit la feuille que je
selectionne ensuite et sur n'importe quel micro...
Message : Erreur d'execution 2147417848 (80010108)
La méthode 'Activate' de l'objet_'worksheet' à échoué (idem si Select à la
place d'activate)
Plantage et ejection d'Excel !
Config Excel 2000/Wk2
Merci pour votre aide
Domi
Je recopie la macro dans son intégralité si ça peut aider à élucider le
mystère.
Au cas ou je peux envoyer mon classeur (rien de secret et 100 ko)
Sub EnregistrerAM()
Dim Nom As String
Nom = ThisWorkbook.Name
Dim oSheet As Worksheet
Dim DejaLa As Boolean
DejaLa = False
'On verifie qu'une feuille n'esiste pas déjà avec ce n°
If [AE1] = "" Then Exit Sub
For Each oSheet In Worksheets
If oSheet.Name = Worksheets("AMModele").Range("AE1").Value Then
DejaLa = True
Exit For
End If
Next
'On verifie que le n° ne figure pas déjà dans la base
With Worksheets("AMModele")
If Not IsError(Application.Match(.Range("AE1"), Range("ListeNumBase"),
0)) Or DejaLa Then
MsgBox "Création impossible, enregistrement déjà existant...!"
Exit Sub
Else
MsgBox "Ok, ce n° ne figure pas dans la base"
End If
End With
'Création de la feuille copiée
Sheets("AMModele").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("AMModele").[AE1]
'Supprime de la nouvelle feuille créée toutes les formules pour ne conserver
que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
'Suppression de toutes les Shapes
ActiveSheet.DrawingObjects.Delete
End With
'Suppression du code de module de la feuille copiée
With
ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With
Workbooks(Nom).Activate
Worksheets("Base").Select 'BIG PLANTAGE...
IncrementationAM
End Sub
Merci pour votre aide
Domi
"michdenis" news:Osz$
J'ai testé la toute dernière section du code que je t'ai demandé de modifier et je n'ai eu aucun problème (excel 2002)
Si tu exécutes la macro en pas en pas, Est-ce que le classeur qui contient la feuille que tu veux sélectionner est bien
celui qui est actif juste avant l'exécution de la ligne de code " Worksheets("Base").Select " ?
As-tu vérifié que tu n'as pas laissé un espace avant ou après le nom de la feuille dans l'onglet de celle-ci ?
Est-ce une feuille masquée ? Où a-t-elle d'autres caractéristiques particulières ?
La seule chose que je peux te recommander c'est ceci et c'est à tout hasard,
Juste avant la fameuse ligne de code qui fait planter ton programme, ajoute ceci :
Application.ActiveWindow.Activate
Si cela ne fonctionne pas, tu peux toujours m'envoyer ton fichier (version légère... ce n'est pas vraiment les données
des feuilles qui soient intéressantes dans ce cas ci ...à cette adresse :
Salutations!
"Domi" Hélas ça plante toujours au même endroit...
Je recopie la macro dans son intégralité si ça peut aider à élucider le
mystère.
Au cas ou je peux envoyer mon classeur (rien de secret et 100 ko)
Sub EnregistrerAM()
Dim Nom As String
Nom = ThisWorkbook.Name
Dim oSheet As Worksheet
Dim DejaLa As Boolean
DejaLa = False
'On verifie qu'une feuille n'esiste pas déjà avec ce n°
If [AE1] = "" Then Exit Sub
For Each oSheet In Worksheets
If oSheet.Name = Worksheets("AMModele").Range("AE1").Value Then
DejaLa = True
Exit For
End If
Next
'On verifie que le n° ne figure pas déjà dans la base
With Worksheets("AMModele")
If Not IsError(Application.Match(.Range("AE1"), Range("ListeNumBase"),
0)) Or DejaLa Then
MsgBox "Création impossible, enregistrement déjà existant...!"
Exit Sub
Else
MsgBox "Ok, ce n° ne figure pas dans la base"
End If
End With
'Création de la feuille copiée
Sheets("AMModele").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("AMModele").[AE1]
'Supprime de la nouvelle feuille créée toutes les formules pour ne conserver
que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
'Suppression de toutes les Shapes
ActiveSheet.DrawingObjects.Delete
End With
'Suppression du code de module de la feuille copiée
With
ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
End With
Workbooks(Nom).Activate
Worksheets("Base").Select 'BIG PLANTAGE...
IncrementationAM
End Sub
Merci pour votre aide
Domi
"michdenis" news:Osz$