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

Différencier changement format ou valeur sur événement Worksheet_Change

5 réponses
Avatar
Hedonissimo
Bonjour,
Lors de l'événement "Worksheet_Change", j'applique différentes macros aux
cellules concernées...
Or selon que cet événement est généré par un chgmnt de format
(Coller->Collage Spécial->Format..) ou un changement de valeur de la
cellule, le code mis en fonction n'est plus le même..
Et là, je tourne un peu en rond pour essayer de trouver une propriété, un
événement ou un artifice de code pour mettre en valeur cette différence
Quelqu'un aurait-il une piste ?
Merci par avance

5 réponses

Avatar
Hervé
Bonjour,

Le plus simple, pour y comprendre quelque chose, c'est que tu poste ton
code.

Hervé.


"Hedonissimo" a écrit dans le message de
news:
Bonjour,
Lors de l'événement "Worksheet_Change", j'applique différentes macros aux
cellules concernées...
Or selon que cet événement est généré par un chgmnt de format
(Coller->Collage Spécial->Format..) ou un changement de valeur de la
cellule, le code mis en fonction n'est plus le même..
Et là, je tourne un peu en rond pour essayer de trouver une propriété, un
événement ou un artifice de code pour mettre en valeur cette différence
Quelqu'un aurait-il une piste ?
Merci par avance




Avatar
FFO
Salut à toi

Aucun évennement ne réagit sur l'évolution d'un format à forciori
"Worksheet_Change"

Il faudra pour réagir à ce type de changement une action manuelle avec les
évennements DoubleClick, ClickDroit, changement de sélection etc.... ou par
l'action d'un bouton ou d'une macro à exécuter

A toi de choisir
Avatar
Hedonissimo
Ooops...
Voilà donc le code quelque peu expurgé..
'Je n'ai pas la main sur les données collées dans les cellules...
'Je sais qu'elles sont, suivant la colonne, d'une certaine sorte... je les
traite donc en conséquence...
'Mais voilà, comment faire la différence entre ces données collées dans les
cellules et un format de cellule copié/collé qui lui aussi génére un
événement Worksheet_Change ?
'Pour le moment.. pas de solution, sinon passer par les API du Clipboard et
récupérer le format ou
'plus simplement un bouton ON/OFF qui bascule la propriété
Application.EnableEvents... lors des collages
'Merci par avance de vos pistes
'Jean-Luc

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyData As DataObject
Dim strClip As String
On Error GoTo Sortie
Application.EnableEvents = False
With Target
Set isect = Application.Intersect(Target, Range("Données_a_Web_iser"))
If isect Is Nothing Then
'Code de traitement si pas dans "Données_a_Web_iser"
Else
Select Case .Column
Case 15 'Ref adresse Web, ne retenir que la ref de l'objet (12
caractères)
If .Value <> 0 Then
a = .Hyperlinks(1).Address
If a <> 0 Then
B = InStr(a, "&item=")
If B = 0 Then GoTo Sortie
B = Mid(a, B + 6, 12)
.Hyperlinks(1).Delete
Else
B = InStr(.Value, "&item=")
If B = 0 Then GoTo Sortie
B = Mid(.Value, B + 6, 12)
End If
.Value = B
.NumberFormat = "0"
.Offset(0, 1).FormulaR1C1 = "=RC[-10]"
If .Offset(0, 6) = 0 Then
.Offset(0, 6) = Now
End If
Else
.Offset(0, 6) = ""
End If
Case 18 'Ref adresse2 Web, ne retenir que la ref2 de l'objet (17
caractères)
a = .Hyperlinks(1).Address
If a <> 0 Then
B = InStr(a, "&id=")
If B = 0 Then GoTo Sortie
B = Mid(a, B + 4, 17)
.Hyperlinks(1).Delete
Else
B = InStr(.Value, "&id=")
If B = 0 Then GoTo Sortie
B = Mid(.Value, B + 4, 17)
End If
.Value = B
.NumberFormat = "0"
.Offset(0, -5) = Date
Case 20 'Ref adresse3 Web, ne pas retenir le lien hypertexte
.Hyperlinks(1).Delete
Case 14 'une cellule dans laquelle le collage peut être de plusieurs
lignes, donc supprimer les caractères que ne gère pas Excel, passer par le
clipboard pour cela...
a = .Address
If InStr(1, a, ":") Then '.Value = "" And .Offset(0, 1) <> ""
Then
Set MyData = New DataObject
MyData.GetFromClipboard
strClip = MyData.GetText
strClip = Replace(strClip, " ", "")
strClip = Replace(strClip, Chr(10), "")
strClip = Replace(strClip, Chr(13), "")
Application.Undo
e = InStr(1, a, ":")
B = Left(a, Len(a) - e)
Range(B) = strClip
ElseIf .Value = Empty Then
.Value = Trim(.Value)
End If
.Hyperlinks(1).Delete
Case 17 'adresse :'une cellule dans laquelle le collage peut être
de plusieurs lignes, vérifier si nom de rue existe, pertinence du tel
client, existence dans base de la ville etc ... passer par le clipboard pour
cela...
a = .Address
If InStr(1, a, ":") Then '.Value = "" And .Offset(0, 1) <> ""
Then
Set MyData = New DataObject
MyData.GetFromClipboard
strClip = MyData.GetText
strClip = Replace(strClip, Chr(13), "")
e = InStr(1, a, ":")
B = Left(a, Len(a) - e)
Application.Undo
Range(B) = CapitaliserNomPrenom(strClip)
Else:
If .Value = Empty Then GoTo Sortie
strClip = Target
Target = CapitaliserNomPrenom(strClip) 'Target
End If
Case Else
End Select
End If
End With

Sortie:
If Err And Not Err.Number = 9 Then MsgBox "Erreur " & Err.Number & " : " &
Err.Description
Application.EnableEvents = True
End Sub
Avatar
Fredo P.
Bonjour
En haut d'un module dimentionner une variable Range, ex : Dim Tg as Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Tg=Target
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyData As DataObject
Dim strClip As String
On Error GoTo Sortie
Application.EnableEvents = False



if Tg<>target then
.
Ton code

endif

Sortie:
If Err And Not Err.Number = 9 Then MsgBox "Erreur " & Err.Number & " : " &
Err.Description
Application.EnableEvents = True
End Sub




Avatar
Hedonissimo
Bonsoir
pourquoi n'y avais-je pas pensé plus tôt ?
=> La compliqu..attitude...
Fredo, encore merci...