![]() |
| |||
| 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 |
| | ||||
| ||||
| |
| |||
| 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: 47ffe6f4$0$903$ba4acef3***news.orange.fr... > 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 > |
| |||
| 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 où 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: uA5DGVCnIHA.1680***TK2MSFTNGP06.phx.gbl... > 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: > 47ffe6f4$0$903$ba4acef3***news.orange.fr... >> 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 >> > > |
| |||
| Ou est l'instruction Copy ? Daniel "Michel MORICE" <mor.mic***wanadoo.fr> a écrit dans le message de news: 48013967$0$875$ba4acef3***news.orange.fr... > 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 où > 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: > uA5DGVCnIHA.1680***TK2MSFTNGP06.phx.gbl... >> 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: >> 47ffe6f4$0$903$ba4acef3***news.orange.fr... >>> 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 >>> >> >> > > |
| |||
| 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: 48013967$0$875$ba4acef3***news.orange.fr... > 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 où > 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: > uA5DGVCnIHA.1680***TK2MSFTNGP06.phx.gbl... >> 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: >> 47ffe6f4$0$903$ba4acef3***news.orange.fr... >>> 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 >>> >> >> > > |
| |||
| 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: OYI0CLUnIHA.536***TK2MSFTNGP06.phx.gbl... > 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: > 48013967$0$875$ba4acef3***news.orange.fr... >> 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 où >> 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: >> uA5DGVCnIHA.1680***TK2MSFTNGP06.phx.gbl... >>> 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: >>> 47ffe6f4$0$903$ba4acef3***news.orange.fr... >>>> 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 >>>> >>> >>> >> >> > > |
| |||
| Si tu fais un couper, tu ne peux pas faire derrière un collage spécial, mais seulement un coller. Daniel "Michel MORICE" <mor.mic***wanadoo.fr> a écrit dans le message de news: 48022bd7$0$863$ba4acef3***news.orange.fr... > 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: > OYI0CLUnIHA.536***TK2MSFTNGP06.phx.gbl... >> 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: >> 48013967$0$875$ba4acef3***news.orange.fr... >>> 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 >>> où 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: >>> uA5DGVCnIHA.1680***TK2MSFTNGP06.phx.gbl... >>>> 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: >>>> 47ffe6f4$0$903$ba4acef3***news.orange.fr... >>>>> 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 >>>>> >>>> >>>> >>> >>> >> >> > > |
| |||
| 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: 48022bd7$0$863$ba4acef3***news.orange.fr... 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: OYI0CLUnIHA.536***TK2MSFTNGP06.phx.gbl... > 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: > 48013967$0$875$ba4acef3***news.orange.fr... >> 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 où >> 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: >> uA5DGVCnIHA.1680***TK2MSFTNGP06.phx.gbl... >>> 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: >>> 47ffe6f4$0$903$ba4acef3***news.orange.fr... >>>> 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 >>>> >>> >>> >> >> > > |
| |||
| | Set Zone = Sheets(3).Range(Cells(Target.Row, y), Cells(Target.Row + xFin - xDebut, y)) | Désolé d'insister, d'autant que ton problème n'est peut-être pas là. Mais ta | qualification n'est pas suffisante : Cells également devrait faire référence à | une feuille précise pour qu'aucune ambiguïté (éventuelle) ne soit possible. : | With Sheets(3) | Set Zone=.Range(.Cells(Target.Row, y), _ | .Cells(Target.Row + xFin - xDebut, y)) | End With Bonjour Frédéric, Je conçois que la syntaxe utiliser par le demandeur n'est pas la meilleure et que dans certaines circonstances, elle peut être problématique.... je préfère de loin ta syntaxe. Cependant, comme il utilise l'objet "Target" et un événement de la feuille, on peut présumer tous les objets "range" de sa ligne de commande appartient à la dite feuille....mais même dans ce cas, ça ne fonctionnera pas. Il y a méprise entre les commandes "Copy" "Cut" "Paste" et "PasteSpecial" |
| |||
| 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" <michdenis***hotmail.com> a écrit dans le message de news: %23t$1buYnIHA.4196***TK2MSFTNGP04.phx.gbl... > 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: > 48022bd7$0$863$ba4acef3***news.orange.fr... > 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: > OYI0CLUnIHA.536***TK2MSFTNGP06.phx.gbl... >> 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: >> 48013967$0$875$ba4acef3***news.orange.fr... >>> 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 >>> où >>> 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: >>> uA5DGVCnIHA.1680***TK2MSFTNGP06.phx.gbl... >>>> 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: >>>> 47ffe6f4$0$903$ba4acef3***news.orange.fr... >>>>> 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 >>>>> >>>> >>>> >>> >>> >> >> > > > |
| |||
| 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" <michdenis***hotmail.com> a écrit dans le message de news: %23t$1buYnIHA.4196***TK2MSFTNGP04.phx.gbl... > 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: > 48022bd7$0$863$ba4acef3***news.orange.fr... > 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: > OYI0CLUnIHA.536***TK2MSFTNGP06.phx.gbl... >> 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: >> 48013967$0$875$ba4acef3***news.orange.fr... >>> 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 >>> où >>> 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" <dZZZcolardelle***free.fr> a écrit dans le message de news: >>> uA5DGVCnIHA.1680***TK2MSFTNGP06.phx.gbl... >>>> 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" <mor.mic***wanadoo.fr> a écrit dans le message de news: >>>> 47ffe6f4$0$903$ba4acef3***news.orange.fr... >>>>> 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 >>>>> >>>> >>>> >>> >>> >> >> > > > |
| |
| |
![]() |
| Tags: pastespecial |
| Outils de la discussion | |
| Modes d'affichage | |
| |