OVH Cloud OVH Cloud

Copier sans code

6 réponses
Avatar
PM
Bonjour !

Je veux copier des feuilles d'un classeur dans un autre sans code, c'est à
dire sans macros et sans le code des feuilles (style SelectionChange, etc.).

Si je sélectionne le contenu, copie, puis recopie les tailles des lignes et
colonnes, c'est trop long (... et pas de belle programmation, beuh).

Si je copie les feuilles, j'élimine les macros, mais pas le code des
feuilles. En revanche, c'est relativement rapide (moins que de copier le
classeur, mais alors il me reste tout le code...).

Quelle est la bonne solution ?
Dois-je copier les feuilles puis en éliminer le code ? Mais comment ?
Dois-je copier le classeur puis en éliminer tout le code ? Mais comment ?

Merci des bons conseils de ceux qui savent !

6 réponses

Avatar
Bruno LOUIS
Salut,

J'ai un début d'idée, je me suis amusé à développer un petit truc :

1°) Je copie la feuille dans un nouveau classeur (on peut facilement adapter
le code si on souhaite copier dans un classeur existant).

2°) J'efface tous les codes de module attachés à des feuilles (si le
classeur qui reçoit la nouvelle feuille contient déjà déjà des feuilles
ayant du code il se trouvera également effacé : dans ce cas je pourrais
adapter ma macro).

Il doit être possible de faire plus court (peut-être) ...

Bon courage,

Bruno

Sub Macro()
Dim O As Object

Sheets("Feuil2").Copy 'à adapater en fonction de l'existence
'ou non classeur

With ActiveWorkbook.VBProject

For Each O In .VBComponents
If O.Type = 4 Then
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With
End If
Next

End With

End Sub


"PM" a écrit dans le message de news:
%
Bonjour !

Je veux copier des feuilles d'un classeur dans un autre sans code, c'est à
dire sans macros et sans le code des feuilles (style SelectionChange,
etc.).

Si je sélectionne le contenu, copie, puis recopie les tailles des lignes
et colonnes, c'est trop long (... et pas de belle programmation, beuh).

Si je copie les feuilles, j'élimine les macros, mais pas le code des
feuilles. En revanche, c'est relativement rapide (moins que de copier le
classeur, mais alors il me reste tout le code...).

Quelle est la bonne solution ?
Dois-je copier les feuilles puis en éliminer le code ? Mais comment ?
Dois-je copier le classeur puis en éliminer tout le code ? Mais comment ?

Merci des bons conseils de ceux qui savent !






Avatar
Bruno LOUIS
Autant pour moi, j'ai commis une erreur dans mon code, mieux vaut essayer ce
qui suit :
Sub Macro()
Dim O As Object

Sheets("Feuil2").Copy 'à adapater en fonction de l'existence
'ou non classeur

With ActiveWorkbook.VBProject
For Each O In .VBComponents
If O.Type <> 1 And O.Type <> 2 Then

With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With

End If
Next

End With

End Sub

Salutations

Bruno

"Bruno LOUIS" a écrit dans le message de news:
41b720f9$0$3437$
Salut,

J'ai un début d'idée, je me suis amusé à développer un petit truc :

1°) Je copie la feuille dans un nouveau classeur (on peut facilement
adapter le code si on souhaite copier dans un classeur existant).

2°) J'efface tous les codes de module attachés à des feuilles (si le
classeur qui reçoit la nouvelle feuille contient déjà déjà des feuilles
ayant du code il se trouvera également effacé : dans ce cas je pourrais
adapter ma macro).

Il doit être possible de faire plus court (peut-être) ...

Bon courage,

Bruno

Sub Macro()
Dim O As Object

Sheets("Feuil2").Copy 'à adapater en fonction de l'existence
'ou non classeur

With ActiveWorkbook.VBProject

For Each O In .VBComponents
If O.Type = 4 Then
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With
End If
Next

End With

End Sub



Avatar
Clément Marcotte
Bonjour,

Je pense qu'il y a quelque chose de ce genre chez Frédéric:

http://frederic.sigonneau.free.fr/VBE.htm


"PM" a écrit dans le message de
news:%
Bonjour !

Je veux copier des feuilles d'un classeur dans un autre sans code,
c'est à

dire sans macros et sans le code des feuilles (style
SelectionChange, etc.).


Si je sélectionne le contenu, copie, puis recopie les tailles des
lignes et

colonnes, c'est trop long (... et pas de belle programmation, beuh).

Si je copie les feuilles, j'élimine les macros, mais pas le code des
feuilles. En revanche, c'est relativement rapide (moins que de
copier le

classeur, mais alors il me reste tout le code...).

Quelle est la bonne solution ?
Dois-je copier les feuilles puis en éliminer le code ? Mais comment
?

Dois-je copier le classeur puis en éliminer tout le code ? Mais
comment ?


Merci des bons conseils de ceux qui savent !






Avatar
PM
Merci Bruno ! Merci Clément !

C'est ce que je cherchais. Merci beaucoup beaucoup.
Mais j'ai un problème de mise en oeuvre (nul n'est parfait, pas même
microsoft... et même le code de Frédéric Sigonneau...).

Quand j'arrive sur :

With ActiveWorkbook.VBProject

...VBA plante. Premier message :
"Erreur 1004 : L'accès par programme au projet VB n'est pas fiable"

Je refais F8 pour exécuter à nouveau la ligne. Second message : La méthode
VBProject de ... a échoué.

Je me suis imaginé que je devrais peut-être commencer par donner un nom et
sauvegarder le classeur qui reçoit la copie. (C'est ça la naïveté ??) Je
fais et je place l'effacement des lignes de codes après.
Et là, mystère, mystère, il passe sur la ligne ci-dessus puis saute plus
loin dans la sub, passant gaillardement au dessus du end with et même d'un
end sub.

Au total, donc, ça ne marche pas pour l'instant. Je demeure avec les codes
de mes feuilles.
Je suis pourtant persuadé que ce que vous m'avez indiqué est la bonne
méthode, rapide et nette...

Je soumets donc ce pb à la sagacité des experts !


"Bruno LOUIS" a écrit dans le message de news:
41b730e2$0$22176$
Autant pour moi, j'ai commis une erreur dans mon code, mieux vaut essayer
ce qui suit :
Sub Macro()
Dim O As Object

Sheets("Feuil2").Copy 'à adapater en fonction de l'existence
'ou non classeur

With ActiveWorkbook.VBProject
For Each O In .VBComponents
If O.Type <> 1 And O.Type <> 2 Then

With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With

End If
Next

End With

End Sub

Salutations

Bruno

"Bruno LOUIS" a écrit dans le message de news:
41b720f9$0$3437$
Salut,

J'ai un début d'idée, je me suis amusé à développer un petit truc :

1°) Je copie la feuille dans un nouveau classeur (on peut facilement
adapter le code si on souhaite copier dans un classeur existant).

2°) J'efface tous les codes de module attachés à des feuilles (si le
classeur qui reçoit la nouvelle feuille contient déjà déjà des feuilles
ayant du code il se trouvera également effacé : dans ce cas je pourrais
adapter ma macro).

Il doit être possible de faire plus court (peut-être) ...

Bon courage,

Bruno

Sub Macro()
Dim O As Object

Sheets("Feuil2").Copy 'à adapater en fonction de l'existence
'ou non classeur

With ActiveWorkbook.VBProject

For Each O In .VBComponents
If O.Type = 4 Then
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With
End If
Next

End With

End Sub







Avatar
Frédéric Sigonneau
Bonsoir,

"Erreur 1004 : L'accès par programme au projet VB n'est pas fiable"


C'est un problème de réglage de séurité par défaut (depuis Excel 2002). Il faut
cocher la case 'Faire confiance au projet Visual Basic' dans OutilsOptions
onglet Sécurité, bouton Sécurité des macros, onglet Sources Fiables.

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Merci Bruno ! Merci Clément !

C'est ce que je cherchais. Merci beaucoup beaucoup.
Mais j'ai un problème de mise en oeuvre (nul n'est parfait, pas même
microsoft... et même le code de Frédéric Sigonneau...).

Quand j'arrive sur :

With ActiveWorkbook.VBProject

....VBA plante. Premier message :
"Erreur 1004 : L'accès par programme au projet VB n'est pas fiable"

Je refais F8 pour exécuter à nouveau la ligne. Second message : La méthode
VBProject de ... a échoué.

Je me suis imaginé que je devrais peut-être commencer par donner un nom et
sauvegarder le classeur qui reçoit la copie. (C'est ça la naïveté ??) Je
fais et je place l'effacement des lignes de codes après.
Et là, mystère, mystère, il passe sur la ligne ci-dessus puis saute plus
loin dans la sub, passant gaillardement au dessus du end with et même d'un
end sub.

Au total, donc, ça ne marche pas pour l'instant. Je demeure avec les codes
de mes feuilles.
Je suis pourtant persuadé que ce que vous m'avez indiqué est la bonne
méthode, rapide et nette...

Je soumets donc ce pb à la sagacité des experts !


"Bruno LOUIS" a écrit dans le message de news:
41b730e2$0$22176$

Autant pour moi, j'ai commis une erreur dans mon code, mieux vaut essayer
ce qui suit :
Sub Macro()
Dim O As Object

Sheets("Feuil2").Copy 'à adapater en fonction de l'existence
'ou non classeur

With ActiveWorkbook.VBProject
For Each O In .VBComponents
If O.Type <> 1 And O.Type <> 2 Then

With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With

End If
Next

End With

End Sub

Salutations

Bruno

"Bruno LOUIS" a écrit dans le message de news:
41b720f9$0$3437$

Salut,

J'ai un début d'idée, je me suis amusé à développer un petit truc :

1°) Je copie la feuille dans un nouveau classeur (on peut facilement
adapter le code si on souhaite copier dans un classeur existant).

2°) J'efface tous les codes de module attachés à des feuilles (si le
classeur qui reçoit la nouvelle feuille contient déjà déjà des feuilles
ayant du code il se trouvera également effacé : dans ce cas je pourrais
adapter ma macro).

Il doit être possible de faire plus court (peut-être) ...

Bon courage,

Bruno

Sub Macro()
Dim O As Object

Sheets("Feuil2").Copy 'à adapater en fonction de l'existence
'ou non classeur

With ActiveWorkbook.VBProject

For Each O In .VBComponents
If O.Type = 4 Then
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With
End If
Next

End With

End Sub











Avatar
PM
Eh bien, c'est là qu'on voit l'expert...
Chapeau ! Personne n'a répondu sur les autres forums où j'ai placé mon SOS.
Et mille millions de mille... mercis !!



"Frédéric Sigonneau" a écrit dans le message de
news:
Bonsoir,

"Erreur 1004 : L'accès par programme au projet VB n'est pas fiable"


C'est un problème de réglage de séurité par défaut (depuis Excel 2002). Il
faut cocher la case 'Faire confiance au projet Visual Basic' dans
OutilsOptions onglet Sécurité, bouton Sécurité des macros, onglet Sources
Fiables.

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

Merci Bruno ! Merci Clément !

C'est ce que je cherchais. Merci beaucoup beaucoup.
Mais j'ai un problème de mise en oeuvre (nul n'est parfait, pas même
microsoft... et même le code de Frédéric Sigonneau...).

Quand j'arrive sur :

With ActiveWorkbook.VBProject

....VBA plante. Premier message :
"Erreur 1004 : L'accès par programme au projet VB n'est pas fiable"

Je refais F8 pour exécuter à nouveau la ligne. Second message : La
méthode VBProject de ... a échoué.

Je me suis imaginé que je devrais peut-être commencer par donner un nom
et sauvegarder le classeur qui reçoit la copie. (C'est ça la naïveté ??)
Je fais et je place l'effacement des lignes de codes après.
Et là, mystère, mystère, il passe sur la ligne ci-dessus puis saute plus
loin dans la sub, passant gaillardement au dessus du end with et même
d'un end sub.

Au total, donc, ça ne marche pas pour l'instant. Je demeure avec les
codes de mes feuilles.
Je suis pourtant persuadé que ce que vous m'avez indiqué est la bonne
méthode, rapide et nette...

Je soumets donc ce pb à la sagacité des experts !


"Bruno LOUIS" a écrit dans le message de news:
41b730e2$0$22176$

Autant pour moi, j'ai commis une erreur dans mon code, mieux vaut essayer
ce qui suit :
Sub Macro()
Dim O As Object

Sheets("Feuil2").Copy 'à adapater en fonction de l'existence
'ou non classeur

With ActiveWorkbook.VBProject
For Each O In .VBComponents
If O.Type <> 1 And O.Type <> 2 Then

With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With

End If
Next

End With

End Sub

Salutations

Bruno

"Bruno LOUIS" a écrit dans le message de news:
41b720f9$0$3437$

Salut,

J'ai un début d'idée, je me suis amusé à développer un petit truc :

1°) Je copie la feuille dans un nouveau classeur (on peut facilement
adapter le code si on souhaite copier dans un classeur existant).

2°) J'efface tous les codes de module attachés à des feuilles (si le
classeur qui reçoit la nouvelle feuille contient déjà déjà des feuilles
ayant du code il se trouvera également effacé : dans ce cas je pourrais
adapter ma macro).

Il doit être possible de faire plus court (peut-être) ...

Bon courage,

Bruno

Sub Macro()
Dim O As Object

Sheets("Feuil2").Copy 'à adapater en fonction de l'existence
'ou non classeur

With ActiveWorkbook.VBProject

For Each O In .VBComponents
If O.Type = 4 Then
With O.CodeModule
If .CountOfLines > 0 Then .DeleteLines 1, .CountOfLines
End With
End If
Next

End With

End Sub