Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

3 réponses
Avatar
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

3 réponses

Avatar
michdenis
Bonjour 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" a écrit dans le message de news:%
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
Avatar
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" a écrit dans le message de
news:Osz$
Bonjour 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" a écrit dans le message de
news:%

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






Avatar
michdenis
Bonjour Domi,

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" a écrit dans le message de news:
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" a écrit dans le message de
news:Osz$
Bonjour 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" a écrit dans le message de
news:%

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