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

PasteSpecial ??

12 réponses
Avatar
Michel MORICE
Bonsoir ou bonjour à tous.

En VBA sur Excel 2000

Malgré l'aide en ligne et l'assistant aux syntaxes, je n'arrive pas à faire
fonctionner la copie d'une zone dans une feuille alors que tout me paraît
simple et conforme.
Je place dans le presse-papier une zone de 10 cellules par exemple.
Je selectionne une nouvelle cellule.
Au moment d'exécuter la ligne suivante, cela se plante:

Zone.PasteSpecial Paste:=xlPasteAll

Avec le message suivant:

La méthode PasteSpecial de la classe Range a échoué.

Ayant épuisé toutes mes cartouches, si quelqu'un pouvait éclairer ma
lenterne nocture.

Merci

Michel

2 réponses

1 2
Avatar
Michel MORICE
Suite à vos conseils j'ai écrit ma routine ainsi:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If EnCours Then
With Range(Cells(Target.Row, y), Cells(Target.Row + xFin - xDebut,
y))
Sheets(.Parent.Name).Paste '******* génère l'erreur "La méthode
Paste de la classe WorkSheet a échoué".
End With
End If
End Sub

Cela se plante toujours mais lorsque j'arrête le débogueur le cut et la
replacement se sont bien exécutés.

Merci de votre patience et de vos aides

Michel


"MichDenis" a écrit dans le message de news:
%23t$
Voici 4 procédures fonctionnelles qui peuvent t'aider.

Si tu veux utiliser la méthode "Cut" de l'objet "Range"
pour coller le presse papier par la suite sur une autre
plage de cellule tu devrais utiliser quelque chose comme suit :

'---------------------------------
Sub tets()
Range("A1:A10").Cut
With Range("C1")
.Select
' Sheets(.Parent.Name).Paste est équivalent à
Sheets("NomFeuille").Paste
Sheets(.Parent.Name).Paste
End With
End Sub
'---------------------------------
Sub tets1()
Range("A1:A10").Cut
With Range("C1:C10")
.Select
Sheets(.Parent.Name).Paste
End With
End Sub
'---------------------------------

========================================== > Pour utiliser la méthode PasteSpecial de l'objet "range"
cela fonctionne seulement si tu as utiliser "Copy" et non "Cut"

Si tu sélectionnes une plage de cellule et que tu appelles la commande
Couper du menu édition.... et que tu sélectionnes une cellule et que tu
tentes d'appeler la méthode "Collage spécial" du menu édition...cette
dernière est en grisée et n'est pas disponible. Si au lieu de la commande
couper tu as copier ta plage de cellules dans le presse papier alors là
tu auras droit au collage spécial. VBA n'est seulement le reflet de ce que
tu peux observer comme tu dis manuellement.
'--------------------------------
Sub tets2()
Range("A1:A10").Copy
With Range("C1:C10")
.PasteSpecial Paste:=xlPasteAll
End With
End Sub
'---------------------------------
Sub tets3()
Range("A1:A10").Copy
With Range("C1")
.PasteSpecial Paste:=xlPasteAll
End With
End Sub
'---------------------------------





"Michel MORICE" a écrit dans le message de news:
48022bd7$0$863$
Je ne pense pas que le presse-papier soit vidé car si j'annule l'erreur et
que je fais "collé" manuellement, alors ma zone se déplace bien.

J'ai essayé de spécifier la feuiile comme ci-après:
Set Zone = Sheets(3).Range(Cells(Target.Row, y), Cells(Target.Row + xFin -
xDebut, y))

Cela ne change rien.
La feuille n'est pas non plus protégé.

Merci de votre aide

Michel

"Daniel.C" a écrit dans le message de news:

Si tu fais un copy manuel, quelle est la séquence d'exécution des macros
?
Il est vraisemblable que le presse-papiers est vidé par une macro.
Daniel
"Michel MORICE" a écrit dans le message de news:
48013967$0$875$
Bonsoir Daniel

Zone un bien un objet de type Range.
J'ai essayé la copie sur une cellule ou sur un range de même taille, le
résultat est le même.
J'ai aussi essayé Selection. PasteSpecial toujours la même erreur.

Je dois avoir un vrai problème de compréhension mais j'aimerais savoir

il se situe.

Ci-après mon code complet, si vous avez une idée.

Dim EnCours As Boolean
Dim xDebut As Integer, xFin As Integer
Dim x As Integer, y As Integer, Couleur As Integer
Dim Zone As Range
'***********************************
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
Dim Fin As Boolean
If Target.Interior.ColorIndex <> xlColorIndexNone Then
x = Target.Row: y = Target.Column: Couleur >>> Target.Interior.ColorIndex
Fin = False
Do
If Cells(x - 1, y).Interior.ColorIndex = Couleur Then
x = x - 1
Else
xDebut = x
Fin = True
End If
Loop Until Fin
Fin = False
Do
If Cells(x + 1, y).Interior.ColorIndex = Couleur Then
x = x + 1
Else
xFin = x
Fin = True
End If
Loop Until Fin
Range(Cells(xDebut, y), Cells(xFin, y)).Cut
EnCours = True
End If
Cancel = True
End Sub
'**********************************
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If EnCours Then
Set Zone = Range(Cells(Target.Row, y), Cells(Target.Row + xFin -
xDebut, y))
Zone.Select
Selection.PasteSpecial Paste:=xlPasteAll '******* génère
l'erreur "La méthode PasteSpecial de la classe Range a échoué".
End If
End Sub

Merci

Michel

"Daniel.C" a écrit dans le message de news:

Bonsoir.
A tout hasard :
Selection.PasteSpecial Paste:=xlPasteAll
sauf si ce n'est pas cela que tu veux faire. Que représente Zone ?
A-t-elle la même taille que la zone copiée ?
Cordialement.
Daniel
"Michel MORICE" a écrit dans le message de news:
47ffe6f4$0$903$
Bonsoir ou bonjour à tous.

En VBA sur Excel 2000

Malgré l'aide en ligne et l'assistant aux syntaxes, je n'arrive pas à
faire fonctionner la copie d'une zone dans une feuille alors que tout
me paraît simple et conforme.
Je place dans le presse-papier une zone de 10 cellules par exemple.
Je selectionne une nouvelle cellule.
Au moment d'exécuter la ligne suivante, cela se plante:

Zone.PasteSpecial Paste:=xlPasteAll

Avec le message suivant:

La méthode PasteSpecial de la classe Range a échoué.

Ayant épuisé toutes mes cartouches, si quelqu'un pouvait éclairer ma
lenterne nocture.

Merci

Michel




















Avatar
Michel MORICE
Finalement en recherchant dans l'aide en ligne je viens de trouver une façon
de faire qui va bien:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If EnCours Then
ActiveSheet.Paste Destination:=Range(Cells(Target.Row, y),
Cells(Target.Row + xFin - xDebut, y))
EnCours = False
End If
End Sub

Je vous remercie de m'avoir aider.
Vos conseils sont toujours enrichissants.

Bonne soirée à tous

Michel

"MichDenis" a écrit dans le message de news:
%23t$
Voici 4 procédures fonctionnelles qui peuvent t'aider.

Si tu veux utiliser la méthode "Cut" de l'objet "Range"
pour coller le presse papier par la suite sur une autre
plage de cellule tu devrais utiliser quelque chose comme suit :

'---------------------------------
Sub tets()
Range("A1:A10").Cut
With Range("C1")
.Select
' Sheets(.Parent.Name).Paste est équivalent à
Sheets("NomFeuille").Paste
Sheets(.Parent.Name).Paste
End With
End Sub
'---------------------------------
Sub tets1()
Range("A1:A10").Cut
With Range("C1:C10")
.Select
Sheets(.Parent.Name).Paste
End With
End Sub
'---------------------------------

========================================== > Pour utiliser la méthode PasteSpecial de l'objet "range"
cela fonctionne seulement si tu as utiliser "Copy" et non "Cut"

Si tu sélectionnes une plage de cellule et que tu appelles la commande
Couper du menu édition.... et que tu sélectionnes une cellule et que tu
tentes d'appeler la méthode "Collage spécial" du menu édition...cette
dernière est en grisée et n'est pas disponible. Si au lieu de la commande
couper tu as copier ta plage de cellules dans le presse papier alors là
tu auras droit au collage spécial. VBA n'est seulement le reflet de ce que
tu peux observer comme tu dis manuellement.
'--------------------------------
Sub tets2()
Range("A1:A10").Copy
With Range("C1:C10")
.PasteSpecial Paste:=xlPasteAll
End With
End Sub
'---------------------------------
Sub tets3()
Range("A1:A10").Copy
With Range("C1")
.PasteSpecial Paste:=xlPasteAll
End With
End Sub
'---------------------------------





"Michel MORICE" a écrit dans le message de news:
48022bd7$0$863$
Je ne pense pas que le presse-papier soit vidé car si j'annule l'erreur et
que je fais "collé" manuellement, alors ma zone se déplace bien.

J'ai essayé de spécifier la feuiile comme ci-après:
Set Zone = Sheets(3).Range(Cells(Target.Row, y), Cells(Target.Row + xFin -
xDebut, y))

Cela ne change rien.
La feuille n'est pas non plus protégé.

Merci de votre aide

Michel

"Daniel.C" a écrit dans le message de news:

Si tu fais un copy manuel, quelle est la séquence d'exécution des macros
?
Il est vraisemblable que le presse-papiers est vidé par une macro.
Daniel
"Michel MORICE" a écrit dans le message de news:
48013967$0$875$
Bonsoir Daniel

Zone un bien un objet de type Range.
J'ai essayé la copie sur une cellule ou sur un range de même taille, le
résultat est le même.
J'ai aussi essayé Selection. PasteSpecial toujours la même erreur.

Je dois avoir un vrai problème de compréhension mais j'aimerais savoir

il se situe.

Ci-après mon code complet, si vous avez une idée.

Dim EnCours As Boolean
Dim xDebut As Integer, xFin As Integer
Dim x As Integer, y As Integer, Couleur As Integer
Dim Zone As Range
'***********************************
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
Dim Fin As Boolean
If Target.Interior.ColorIndex <> xlColorIndexNone Then
x = Target.Row: y = Target.Column: Couleur >>> Target.Interior.ColorIndex
Fin = False
Do
If Cells(x - 1, y).Interior.ColorIndex = Couleur Then
x = x - 1
Else
xDebut = x
Fin = True
End If
Loop Until Fin
Fin = False
Do
If Cells(x + 1, y).Interior.ColorIndex = Couleur Then
x = x + 1
Else
xFin = x
Fin = True
End If
Loop Until Fin
Range(Cells(xDebut, y), Cells(xFin, y)).Cut
EnCours = True
End If
Cancel = True
End Sub
'**********************************
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If EnCours Then
Set Zone = Range(Cells(Target.Row, y), Cells(Target.Row + xFin -
xDebut, y))
Zone.Select
Selection.PasteSpecial Paste:=xlPasteAll '******* génère
l'erreur "La méthode PasteSpecial de la classe Range a échoué".
End If
End Sub

Merci

Michel

"Daniel.C" a écrit dans le message de news:

Bonsoir.
A tout hasard :
Selection.PasteSpecial Paste:=xlPasteAll
sauf si ce n'est pas cela que tu veux faire. Que représente Zone ?
A-t-elle la même taille que la zone copiée ?
Cordialement.
Daniel
"Michel MORICE" a écrit dans le message de news:
47ffe6f4$0$903$
Bonsoir ou bonjour à tous.

En VBA sur Excel 2000

Malgré l'aide en ligne et l'assistant aux syntaxes, je n'arrive pas à
faire fonctionner la copie d'une zone dans une feuille alors que tout
me paraît simple et conforme.
Je place dans le presse-papier une zone de 10 cellules par exemple.
Je selectionne une nouvelle cellule.
Au moment d'exécuter la ligne suivante, cela se plante:

Zone.PasteSpecial Paste:=xlPasteAll

Avec le message suivant:

La méthode PasteSpecial de la classe Range a échoué.

Ayant épuisé toutes mes cartouches, si quelqu'un pouvait éclairer ma
lenterne nocture.

Merci

Michel




















1 2