> Tous les forums > Forum Bureautique
 EXCEL 2016 VBA Plantage inexpliqué Couper/CollerSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Debrief
  Posté le 01/04/2018 @ 14:45 
Aller en bas de la page 
Astucien

Bonjour les experts VBA, (les autres aussi bien sûr )

Pour gérer un Undo/Redo sur les valeurs (je n'ai pas cherché à mettre en place celui-là qui semble une référence, peut-être aurais-je dû car ce n'est pas du tout du tout une mince affaire !) j'ai été amené à utiliser au moment de l'évènement Worksheet_Change() le Target reçu en paramètre du dernier évènement Worksheet_SelectionChange().

Ça marche parfaitement et logiquement dans tous les cas SAUF pour Couper / Coller qui donne une erreur 424 (Objet requis) inexplicable sur l'utilisation de la propriété .Address de ce Target de sélection conservé qui n'est ni Empty ni Nothing !

Pour exemple ce fichier qui contient 2 instructions (3 si on compte le "if") pour illustrer le problème -> https://cjoint.com/c/HDbmLDNW4wH

Toute suggestion pour l'utilisation / l'identification de ce Target de sélection est bienvenue.

Cordialement,
D.



Modifié par Debrief le 02/04/2018 22:52
Publicité
galopin01
 Posté le 01/04/2018 à 15:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Le problème c'est que au moment du Coller ta variable TargetSelection ne contient plus rien puisque tu viens de Couper son contenu.

Tu comprendras peut-être mieux en modifiant ta macro ainsi :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set TargetSelection = Target
MsgBox TargetSelection.Address
End Sub


A+

Debrief
 Posté le 01/04/2018 à 18:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Lors d'un Couper/Coller, dans ton exemple, MsgBox TargetSelection.Address reflète bien la sélection où on va coller ce qui a été coupé, c.a.d. l'adresse de la cellule ou du range sélectionné comme cible du Coller à suivre.
Aucune erreur n'apparaît à ce moment là... Ce qui est incompréhensible, c'est qu'au moment du Coller à suivre (évènement Worksheet_Change), cette même instruction va planter alors que la variable TargetSelection n'a été en rien modifiée !

De plus si une cellule ou un range est vide cela n'en affecte pas l'adresse.

D.



Modifié par Debrief le 01/04/2018 18:53
galopin01
 Posté le 01/04/2018 à 20:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Ce que tu n'a pas remarqué malgré le message c'est que après Cut la source n'a pas encore changé.

Au moment ou tu fait le collage le premier Change est la source qui disparait à ce moment là et à ce moment ta variable ne contient plus rien puisque la source à été supprimée. Mais ta variable est encore une variable Object par définition (Dim...) mais n'a plus d'adresse.

Si au moment ou tu as le message d'erreur tu interroges ?Vartype tu vas avoir en retour 9 car ton range viens d'être supprimé ta variable n'est plus qu'un range supprimé, mais elle conserve son Vartype (9). Et elle n'est pas Nothing puisque c'est un objet...

Elle ne sera Nothing que si tu la supprimes en faisant Set TargetSelection = Nothing

Nothing ne teste pas l'adresse du range mais l'existence de ta variable.

A+

Debrief
 Posté le 01/04/2018 à 21:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Je comprendrais à la rigueur que le range supprimé (encore que ce n'est pas le range qui est supprimé mais les valeurs qu'il contient, mais bon...) puisse être la cause de cette affaire... qui a de toute évidence une cause.
Par exemple si tu sélectionnes un range et fais "supprimer", l'erreur ne se produira pas. Le range continue d'exister... et c'est heureux :)

Mais ce que toi tu n'a pas remarqué, c'est que le range dont on parle n'est PAS le range des valeurs supprimées ! Celui-là, c'était la sélection du coup d'avant dont l'histoire est terminée.
Le range de la sélection dont on parle est celui de l'endroit où on va coller, c'est à dire le range de la cible et non pas celui de la source.

D.

galopin01
 Posté le 01/04/2018 à 21:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

Bah, moi je le comprend comme ça... YFO demander à de vrai pros : Moi je ne suis qu'un amateur !

A+

Debrief
 Posté le 01/04/2018 à 21:42 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

En tous cas merci d'y avoir investi de ton temps et proposé une explication.
D.

Debrief
 Posté le 02/04/2018 à 10:54 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Il y a quand même un "workaround" comme disent les anglosaxons qui consiste, à conserver la Selection Target.Address (String) au lieu de conserver le Selection Target (Objet Range). Et là ça fonctionne car le String survit mieux que le Range.
Par exemple: SelectionTargetAddress = Target.Address qui permet ensuite reconstituer le Range(**) au moment du Worksheet_Change(): Set Rng = Range(SelectionTargetAddress)

(**)
Pour être plus précis il faut garder:
SelectionWorkbookName = ActiveWorkbook.Name
SelectionWorksheetName = Target.Worksheet.Name
SelectionTargetAddress = Target.Address

et pour reconstituer le range:
Set Rng = Workbooks(SelectionWorkbookName).Worksheets(SelectionWorksheetName).Range(SelectionTargetAddress)

D.

Edit: Au final ce problème est une providence car il permet dès le 1er évènement Worksheet_Change() d'identifier un Couper / Coller.



Modifié par Debrief le 02/04/2018 12:35
Debrief
 Posté le 02/04/2018 à 23:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Je me suis réjouis un peu vite car cette erreur se produit sous certaine conditions déterminées par le range sélectionné pour Coller !

Exemple: Sélectionner 3 cellules verticales et couper

Cas 1 - Sélectionner 1, 2 ou 3 cellules verticales pour coller => Erreur

Cas 2 - Sélectionner 4 cellules verticales pour coller => Pas d'erreur

Cas 3 - Sélectionner 2 cellules horizontales pour coller => Pas d'erreur

Ça sent le bug non ?

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Sujets relatifs
Excel 2016 ne trie pas convenablement les date du XIXe et du XXe s
Excel 2016 Tableau Croisé Dynamique (TCD)
suite 2016 word dans excel
excel 2016 regroupement dans tableau croisé dynamique (tcd)
Excel 2016 en-tête et pied de page
comment pouvoir personnaliser les onglet et fonctions sous excel 2016
Excel 2016 fonction RECHERCHEV
excel 2016 décalage de zones
Problème d'ouverture EXCEL 2016
Probleme d'ouverture de fichier avec excel 2016
Plus de sujets relatifs à EXCEL 2016 VBA Plantage inexpliqué Couper/Coller
 > Tous les forums > Forum Bureautique