Différencier changement format ou valeur sur événement Worksheet_Change
5 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
Bonjour,
Le plus simple, pour y comprendre quelque chose, c'est que tu poste ton
code.
Hervé.
"Hedonissimo" <MPFE@marrejl.net> a écrit dans le message de
news:O6sl7x9rKHA.4652@TK2MSFTNGP02.phx.gbl...
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
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
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
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
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
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
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
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
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
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
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
Hedonissimo
Bonsoir pourquoi n'y avais-je pas pensé plus tôt ? => La compliqu..attitude... Fredo, encore merci...
Bonsoir
pourquoi n'y avais-je pas pensé plus tôt ?
=> La compliqu..attitude...
Fredo, encore merci...