OVH Cloud OVH Cloud

s'agit-il d'une lenteur fatale à cause du presse papier ??

15 réponses
Avatar
migmag
Bonjour à tous,
j'ai plus de 200 onglets par classeur à ajouter à partir d'un modèle (à
partir de liste différente pour chaque classeur).
Mon problème est que pour l'ajout, il me faut un temps fou car je suis
obligé de fermer excel et le réouvir après la création de chaque lot de 8
onglets.
J'ai su que c'est un problème de presse papier et j'ai utilisé des
instructions du type :
[iv65536].Copy
Application.CommandBars("Clipboard").Controls(4).Execute
Mais en vain.
je n'ai pas trouvé l'instruction efficace qui permet de l'effacer
merci d'avance

5 réponses

1 2
Avatar
MichDenis
Ceci vide le presse papier complètement
que le "copie" ait été fait à partir de l'interface Excel
où d'une autre application.

'à copie dans le haut d'un module Standard
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
'------------------
Sub ViderPressePapier()
OpenClipboard 0
EmptyClipboard
CloseClipboard
End Sub
'------------------



"migmag" a écrit dans le message de news:

Bonjour à tous,
j'ai plus de 200 onglets par classeur à ajouter à partir d'un modèle (à
partir de liste différente pour chaque classeur).
Mon problème est que pour l'ajout, il me faut un temps fou car je suis
obligé de fermer excel et le réouvir après la création de chaque lot de 8
onglets.
J'ai su que c'est un problème de presse papier et j'ai utilisé des
instructions du type :
[iv65536].Copy
Application.CommandBars("Clipboard").Controls(4).Execute
Mais en vain.
je n'ai pas trouvé l'instruction efficace qui permet de l'effacer
merci d'avance
Avatar
MichDenis
Cette méthode n'est pas valide pour toutes les versions d'excel.
De mémoire, elle fonction sous excel 2000 mais pas sous excel 2002
et encore moins pour excel 2003.


"jps" a écrit dans le message de news: eUBH0O$
bonjour migmag
ci-dessous copie d'une réponse produite il y a fort longtemps par le
révérend père Brossollette, seul ecclésiastique à avoir, avec benoît croix
bâton V, béni ce forume

la méthode classique (pour vider des cellules copiées)

application.cutcopymodeúlse

quel que soit le contenu (objets....)

Sub VidePP()

Dim rep As Boolean

With Application.CommandBars("clipboard")

rep = .Visible

If rep = False Then .Visible = True

If .FindControl(ID:634).Enabled = True Then .FindControl(ID:634).Execute

.Visible = rep

End With

End Sub



HTH

jps



"migmag" a écrit dans le message de news:

Bonjour à tous,
j'ai plus de 200 onglets par classeur à ajouter à partir d'un modèle (à
partir de liste différente pour chaque classeur).
Mon problème est que pour l'ajout, il me faut un temps fou car je suis
obligé de fermer excel et le réouvir après la création de chaque lot de 8
onglets.
J'ai su que c'est un problème de presse papier et j'ai utilisé des
instructions du type :
[iv65536].Copy
Application.CommandBars("Clipboard").Controls(4).Execute
Mais en vain.
je n'ai pas trouvé l'instruction efficace qui permet de l'effacer
merci d'avance


Avatar
jps
merci,denis pour ce "grain de sel"
en effet, chez moi, elle ne fonctionne pas mais c'était une piste, comme
aurait dit notre lakota dont je ne vois plus du tout les signaux de fumée et
ce n'est pas avec ce vent d'ouest que tu vas les voir, toi aussi, sauf à
faire le tour de la terre...
jps

"MichDenis" a écrit dans le message de news:

Cette méthode n'est pas valide pour toutes les versions d'excel.
De mémoire, elle fonction sous excel 2000 mais pas sous excel 2002
et encore moins pour excel 2003.


"jps" a écrit dans le message de news:
eUBH0O$
bonjour migmag
ci-dessous copie d'une réponse produite il y a fort longtemps par le
révérend père Brossollette, seul ecclésiastique à avoir, avec benoît croix
bâton V, béni ce forume

la méthode classique (pour vider des cellules copiées)

application.cutcopymodeúlse

quel que soit le contenu (objets....)

Sub VidePP()

Dim rep As Boolean

With Application.CommandBars("clipboard")

rep = .Visible

If rep = False Then .Visible = True

If .FindControl(ID:634).Enabled = True Then
.FindControl(ID:634).Execute

.Visible = rep

End With

End Sub



HTH

jps



"migmag" a écrit dans le message de
news:

Bonjour à tous,
j'ai plus de 200 onglets par classeur à ajouter à partir d'un modèle (à
partir de liste différente pour chaque classeur).
Mon problème est que pour l'ajout, il me faut un temps fou car je suis
obligé de fermer excel et le réouvir après la création de chaque lot de 8
onglets.
J'ai su que c'est un problème de presse papier et j'ai utilisé des
instructions du type :
[iv65536].Copy
Application.CommandBars("Clipboard").Controls(4).Execute
Mais en vain.
je n'ai pas trouvé l'instruction efficace qui permet de l'effacer
merci d'avance






Avatar
migmag
Merci à tous mais le pb n'est pas résolu.

cdlt
migmag


Ceci vide le presse papier complètement
que le "copie" ait été fait à partir de l'interface Excel
où d'une autre application.

'à copie dans le haut d'un module Standard
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
'------------------
Sub ViderPressePapier()
OpenClipboard 0
EmptyClipboard
CloseClipboard
End Sub
'------------------



"migmag" a écrit dans le message de news:

Bonjour à tous,
j'ai plus de 200 onglets par classeur à ajouter à partir d'un modèle (à
partir de liste différente pour chaque classeur).
Mon problème est que pour l'ajout, il me faut un temps fou car je suis
obligé de fermer excel et le réouvir après la création de chaque lot de 8
onglets.
J'ai su que c'est un problème de presse papier et j'ai utilisé des
instructions du type :
[iv65536].Copy
Application.CommandBars("Clipboard").Controls(4).Execute
Mais en vain.
je n'ai pas trouvé l'instruction efficace qui permet de l'effacer
merci d'avance





Avatar
LSteph
Il me semble avec une soluce de MichDenis on est sûr maintenant!
... pour être plus précis en copiant iv65536
ne devait pas être bien plus lourd

...et c'est là que Lapalisse revient, en proposant à nouveau
que cela ne vient pas de là c'est que cela vient d'ailleurs

-Si tu stockes des variables objet qui ne sont pas libérées.
-Si tu utilises Excel97 il y a le bug bien connu de numérotation des feuilles par vba lorsqu'on fait du activesheet.copy
-...etc...
...donc par rapport à ma première hypothèse puisque la seconde est

écartée
on ne voit pas de variables objet dans ton code mais
on ne voit pas non plus tout y être déclaré alors
essaye à tout hasard
en mettant l'en haut du module

Option explicit

puis dans ton code en typant ctr as long ce sera moins lourd qu'un variant

'...
Dim Tableau() As String, ctr as long

Cordialement.

lSteph

Sub Ajouter_test()

ActiveCell.CurrentRegion.Select
Dim Tableau() As String
ReDim Tableau(1 To ActiveCell.CurrentRegion.Count)
'Sheet.Columns(colHeader(3) & ":" & colHeader(3)).Select

For ctr = 1 To ActiveCell.CurrentRegion.Count
Tableau(ctr) = ActiveCell.CurrentRegion(ctr)

Next

For ctr = 1 To ActiveCell.CurrentRegion.Count

Sheets("Modèle_test").Copy , Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = Tableau(ctr)

[iv65536].Copy

Next

End Sub





Merci à tous mais le pb n'est pas résolu.

cdlt
migmag


Ceci vide le presse papier complètement
que le "copie" ait été fait à partir de l'interface Excel
où d'une autre application.

'à copie dans le haut d'un module Standard
Private Declare Function OpenClipboard Lib "user32" _
(ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
'------------------
Sub ViderPressePapier()
OpenClipboard 0
EmptyClipboard
CloseClipboard
End Sub
'------------------



"migmag" a écrit dans le message de news:

Bonjour à tous,
j'ai plus de 200 onglets par classeur à ajouter à partir d'un modèle (à
partir de liste différente pour chaque classeur).
Mon problème est que pour l'ajout, il me faut un temps fou car je suis
obligé de fermer excel et le réouvir après la création de chaque lot de 8
onglets.
J'ai su que c'est un problème de presse papier et j'ai utilisé des
instructions du type :
[iv65536].Copy
Application.CommandBars("Clipboard").Controls(4).Execute
Mais en vain.
je n'ai pas trouvé l'instruction efficace qui permet de l'effacer
merci d'avance







1 2