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

10 réponses

1 2
Avatar
jps
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
LSteph
Bonjour,

"cela marche fort bien"
théoriquement si tu as copié iv65536

et que comme je le suppose
cette cellule est vide tu as donc effectivement du même coup
vidé ton presse papier.
Cela peut se vérifier en essayant de coller.

Le problème est sans doute ailleurs.

Cordialement.

lSteph


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
... pour être plus précis en copiant iv65536 ton presse papier contient
quand même une cellule vide mais rien d'autre.*

Il faudrait que tu en donnes un peu plus sur ton code et ta version
plusieurs hypothèses:
-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...

Cordialement.

lSteph



*exemple en mettant des x en [a1:g10]:

Sub test()
[a1:g10].Copy
ActiveSheet.Paste Destination:=[h1]
'on vient de coller les petits x
[a1:g10].Copy
[iv65536].Copy
ActiveSheet.Paste Destination:=[i2]
'on vient de faire un trou en i2
End Sub

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 jps
J'ai repris les lignes allanat de sub vidpp etc..
j'ai eu des messages d'erreur de syntaxe.

salutations



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
Voilà le code utilisé :
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

cordialement

migmag


.... pour être plus précis en copiant iv65536 ton presse papier contient
quand même une cellule vide mais rien d'autre.*

Il faudrait que tu en donnes un peu plus sur ton code et ta version
plusieurs hypothèses:
-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...

Cordialement.

lSteph



*exemple en mettant des x en [a1:g10]:

Sub test()
[a1:g10].Copy
ActiveSheet.Paste Destination:=[h1]
'on vient de coller les petits x
[a1:g10].Copy
[iv65536].Copy
ActiveSheet.Paste Destination:=[i2]
'on vient de faire un trou en i2
End Sub

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
alors, migmag, c'est que les voies du Seigneur sont impénétrables....désolé
jps

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

Merci jps
J'ai repris les lignes allanat de sub vidpp etc..
j'ai eu des messages d'erreur de syntaxe.

salutations



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
LSteph
Ok ,sauf cette question
est-ce que tu utilises Excel 97 pour faire cela
Si oui regarde les numéro de feuilles obtenus dans l'explorateur de projet

-Voici comment traiter les feuilles d'un tel classeur
....
Dim i as integer, ws as Worksheet
'...

On Error Resume Next
i = 0
For Each ws In ActiveWorkbook.Worksheets
i = i + 1
ws.Parent.VBProject.VBComponents(ws.CodeName) _
.Properties("_CodeName") = "Feuil" & i
On Error GoTo 0
Next ws
'...

-Voici peut-être comment intégrer à ta macro

'...
Sheets(Sheets.Count).Name = Tableau(ctr)
On Error Resume Next
With Sheets(Sheets.Count)
.Parent.VBProject.VBComponents(.CodeName) _
.Properties("_CodeName") = "Feuil" & Sheets.Count + 1
End With
On Error GoTo 0
'...

'Cdlt.

'lSteph


Voilà le code utilisé :
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

cordialement

migmag


.... pour être plus précis en copiant iv65536 ton presse papier contient
quand même une cellule vide mais rien d'autre.*

Il faudrait que tu en donnes un peu plus sur ton code et ta version
plusieurs hypothèses:
-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...

Cordialement.

lSteph



*exemple en mettant des x en [a1:g10]:

Sub test()
[a1:g10].Copy
ActiveSheet.Paste Destination:=[h1]
'on vient de coller les petits x
[a1:g10].Copy
[iv65536].Copy
ActiveSheet.Paste Destination:=[i2]
'on vient de faire un trou en i2
End Sub

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
Pour excel, j'utilise 2003
pour les noms des feuilles à ajouter, ils sont pris à partir d'une liste.

cdlt
migmag


Ok ,sauf cette question
est-ce que tu utilises Excel 97 pour faire cela
Si oui regarde les numéro de feuilles obtenus dans l'explorateur de projet

-Voici comment traiter les feuilles d'un tel classeur
.....
Dim i as integer, ws as Worksheet
'...

On Error Resume Next
i = 0
For Each ws In ActiveWorkbook.Worksheets
i = i + 1
ws.Parent.VBProject.VBComponents(ws.CodeName) _
..Properties("_CodeName") = "Feuil" & i
On Error GoTo 0
Next ws
'...

-Voici peut-être comment intégrer à ta macro

'...
Sheets(Sheets.Count).Name = Tableau(ctr)
On Error Resume Next
With Sheets(Sheets.Count)
..Parent.VBProject.VBComponents(.CodeName) _
..Properties("_CodeName") = "Feuil" & Sheets.Count + 1
End With
On Error GoTo 0
'...

'Cdlt.

'lSteph


Voilà le code utilisé :
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

cordialement

migmag


.... pour être plus précis en copiant iv65536 ton presse papier contient
quand même une cellule vide mais rien d'autre.*

Il faudrait que tu en donnes un peu plus sur ton code et ta version
plusieurs hypothèses:
-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...

Cordialement.

lSteph



*exemple en mettant des x en [a1:g10]:

Sub test()
[a1:g10].Copy
ActiveSheet.Paste Destination:=[h1]
'on vient de coller les petits x
[a1:g10].Copy
[iv65536].Copy
ActiveSheet.Paste Destination:=[i2]
'on vient de faire un trou en i2
End Sub

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
pour les noms des feuilles à ajouter, ils sont pris à partir d'une liste.
Ce dont je parle n'a rien à voir avec ce que l'on indique sur l'onglet .Name


Le bug est sur le vrai nom de la feuille pour vb .CodeName

Oublions cela! C'était une hypothèse si excel97.

@+


Pour excel, j'utilise 2003
pour les noms des feuilles à ajouter, ils sont pris à partir d'une liste.

cdlt
migmag


Ok ,sauf cette question
est-ce que tu utilises Excel 97 pour faire cela
Si oui regarde les numéro de feuilles obtenus dans l'explorateur de projet

-Voici comment traiter les feuilles d'un tel classeur
.....
Dim i as integer, ws as Worksheet
'...

On Error Resume Next
i = 0
For Each ws In ActiveWorkbook.Worksheets
i = i + 1
ws.Parent.VBProject.VBComponents(ws.CodeName) _
..Properties("_CodeName") = "Feuil" & i
On Error GoTo 0
Next ws
'...

-Voici peut-être comment intégrer à ta macro

'...
Sheets(Sheets.Count).Name = Tableau(ctr)
On Error Resume Next
With Sheets(Sheets.Count)
..Parent.VBProject.VBComponents(.CodeName) _
..Properties("_CodeName") = "Feuil" & Sheets.Count + 1
End With
On Error GoTo 0
'...

'Cdlt.

'lSteph


Voilà le code utilisé :
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

cordialement

migmag


.... pour être plus précis en copiant iv65536 ton presse papier contient
quand même une cellule vide mais rien d'autre.*

Il faudrait que tu en donnes un peu plus sur ton code et ta version
plusieurs hypothèses:
-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...

Cordialement.

lSteph



*exemple en mettant des x en [a1:g10]:

Sub test()
[a1:g10].Copy
ActiveSheet.Paste Destination:=[h1]
'on vient de coller les petits x
[a1:g10].Copy
[iv65536].Copy
ActiveSheet.Paste Destination:=[i2]
'on vient de faire un trou en i2
End Sub

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 jps pour la volonté du partage du savoir..

Migmag


alors, migmag, c'est que les voies du Seigneur sont impénétrables....désolé
jps

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

Merci jps
J'ai repris les lignes allanat de sub vidpp etc..
j'ai eu des messages d'erreur de syntaxe.

salutations



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












1 2