Détecter un copier en cours et annuler worksheet_selectionchange ?

Bonjour,

j'utilise "Private Sub Worksheet_SelectionChange(ByVal Target As Range)", pour pouvoir me faire une mise en forme spécifique sur une colonne sur ma feuille, or je viens de m'appercevoir que cela me coince lorsque je souhaite faire un copier/coller, en effet, lorsque je clique sur la nouvelle cellule sur laquelle je veux coller ma copie, la procédure "Selection_change" se déclenche et du coup je perd la partie copiée.

Est il possible de savoir au déclenchement de la procédure "Selection_change", si un copier/coller est en cours ?

Merci d'avance.

ps : voiçi le contenu de la procédure "Selection_change" :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim cell_Range As Range, shCliquee As Worksheet

'Permet d'utiliser le "codename" au lui du name, le codename est la référence interne d'excel qui ne change jamais, même si on renomme l'onglet
Set shCliquee = Feuil5

'Rajout d'une bordure autour de la cellule du nombre de formateur qui correspond à la colonne ou j'ai cliqué

'On supprime toutes les bordures sur la ligne dans laquelle se trouvent les cellules que je souhaite mettre en avant
shCliquee.Cells.Range("D88:MO88").Borders.LineStyle = xlNone

'Permet de limiter l'opération à ma zone de sélection, fonctionne jusqu'à la colonne KY!!!!
If Target.Row > 5 And Target.Row < 78 And Target.Column > 3 And Target.Column < 311 Then

   'Permet une conversion entre le numero de la colonne et sa lettre, fonctionne jusqu'à la colonne KY!!!!
   Dim adresse_cellule As String
   Dim serie As Byte
   Select Case Target.Column
   Case Is = 0
   adresse_cellule = "#########"
   Case Is < 27
   adresse_cellule = Chr(64 + Target.Column)
   Case Else: serie = Int((Target.Column - 26) / 27) + 1
   adresse_cellule = Chr(64 + serie) & Chr(64 + Target.Column - 26 * serie)
   End Select

adresse_cellule = adresse_cellule & "88"

Set cell_Range = shCliquee.Range(adresse_cellule)

cell_Range.BorderAround xlDouble

'détruit les objets crées plus tôt
Set cell_Range = Nothing

End If

Set shCliquee = Nothing

End Sub

Bonjour

Vous faites le copier coller au travers d'une macro ou via commande clavier ?

Pour bien comprendre l'option choisie "sélection change", quel est le but de cette macro ?

Cordialement

Bonjour,

Je réalise le copier/coller via une commande clavier.

Le but de la macro, est d'entourer une certaine cellule d'une colonne X quand une cellule (au dessus) de la même colonne X est cliquée, en fait ca me sert dans un grand tableau à repérer facilement dans quelle colonne je me trouve, afin de visualiser plus simplement la valeur d'une cellule calculée, tout en bas de mon tableau.

Merci

Re

Essayez ceci :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range(Cells(6, 4), Cells(77, 310))) Is Nothing Then
'On supprime toutes les bordures sur la ligne dans laquelle se trouvent les cellules que je souhaite mettre en avant
    Range("D88:MO88").Borders.LineStyle = xlNone
'Rajout d'une bordure autour de la cellule du nombre de formateur qui correspond à la colonne ou j'ai cliqué
    Cells(88, Target.Column).BorderAround xlDouble
End If
End Sub

Cordialement

Bonjour,

Cela ne fonctionne pas, attention je souhaite détecter le copier lorsque je suis dans ma plage (donnée par le intersect de ton exemple), et si j'y suis dans ce cas je ne mets pas en valeur la cellule mais j'autorise le coller car je n'ai pas changé la sélection de la cellule pour changer la mise en forme.

Est ce que tu as une autre idée, pour info voila comment j'ai changé le code pour tester ton exemple :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim cell_Range As Range, shCliquee As Worksheet

'PErmet d'éviter de foutre le souc lorsque j'ai une cellule qui est copiée/collée, autrement la routine perd à chaque foit
'la sélection et du coup je ne peux pas faire de coller
If Not Intersect(Target, Range(Cells(6, 4), Cells(77, 310))) Is Nothing Then

'Permet d'utiliser le "codename" au lui du name, le codename est la référence interne d'excel qui ne change jamais, même si on renomme l'onglet
Set shCliquee = Feuil5

'Rajout d'une bordure autour de la cellule du nombre de formateur qui correspond à la colonne ou j'ai cliqué

'On supprime toutes les bordures sur la ligne dans laquelle se trouvent les cellules que je souhaite mettre en avant
shCliquee.Cells.Range("D88:MO88").Borders.LineStyle = xlNone

'Permet de limiter l'opération à ma zone de sélection, fonctionne jusqu'à la colonne KY!!!!
If Target.Row > 5 And Target.Row < 78 And Target.Column > 3 And Target.Column < 311 Then

   'Permet une conversion entre le numero de la colonne et sa lettre, fonctionne jusqu'à la colonne KY!!!!
   Dim adresse_cellule As String
   Dim serie As Byte
   Select Case Target.Column
   Case Is = 0
   adresse_cellule = "#########"
   Case Is < 27
   adresse_cellule = Chr(64 + Target.Column)
   Case Else: serie = Int((Target.Column - 26) / 27) + 1
   adresse_cellule = Chr(64 + serie) & Chr(64 + Target.Column - 26 * serie)
   End Select

adresse_cellule = adresse_cellule & "88"

Set cell_Range = shCliquee.Range(adresse_cellule)

cell_Range.BorderAround xlDouble

'détruit les objets crées plus tôt
Set cell_Range = Nothing

End If

End If

Set shCliquee = Nothing

End Sub

Merci

Mince je viens de trouver par hasard, c'était tout simple, en fait il suffisait de rajouter :

'PErmet d'éviter de foutre le souc lorsque j'ai une cellule qui est copiée/collée, autrement la routine perd à chaque foit
'la sélection et du coup je ne peux pas faire de coller
If Application.CutCopyMode = xlCopy Then Exit Sub
If Application.CutCopyMode = xlCut Then Exit Sub

Re,

Avec la dernière explication, je viens de comprendre ce que vous vouliez.

Lorsque vous faites un copier coller ou couper coller dans la plage, vous ne voulez pas que la cellule entourée en bordure double change de colonne. Juste ?

Si oui, votre code modifié :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode = xlCopy Or Application.CutCopyMode = xlCut Then Exit Sub
If Not Intersect(Target, Range(Cells(6, 4), Cells(77, 310))) Is Nothing Then
'On supprime toutes les bordures sur la ligne dans laquelle se trouvent les cellules que je souhaite mettre en avant
    Range("D88:MO88").Borders.LineStyle = xlNone
'Rajout d'une bordure autour de la cellule du nombre de formateur qui correspond à la colonne ou j'ai cliqué
    Cells(88, Target.Column).BorderAround xlDouble
End If
End Sub

Cordialement

Bonjour oui c'était tout simplement cela

Merci

Rechercher des sujets similaires à "detecter copier cours annuler worksheet selectionchange"