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

Pb dans l"exécution de Worksheet_Change...

6 réponses
Avatar
François
Bonjour à tous,

Dans un calendrier, j'utilise la procédure Worksheet_Change pour créer un
format spécial pour les jours fériés concernés :
- en AJ1:AX1, j'ai la déclaration des jours fériés (pas seulement les
Français ...)
- les cellules comportant les numéros des jours du calendrier sont reportées
dans la cellule AB5 nommée ChampsFeries
(AB5 -> A5:N5,A10:N10,A15:N15,A20:N20,A25:N25,A30:N30)

Le lancement du Worksheet_Change vise à supprimer le contenu du bloc de
cellule (sur 5 lignes et 2 colonnes) se référant au jour férié à créér, à
mentionner Holiday dans les cellules les plus centrales, et à colorer le
tout en bleu.

Le problème, est que la procédure ne fait pas les modifications sur le bon
bloc, mais ailleurs !...
J'ai fait afficher en msgbox les coordonnées de la cellule trouvée pour le
jour férié.
Ainsi pour un 10/07/07 supposé férié, il me donne 11 pour c.Rows trouvé, et
aussi 11 pour c.Columns ce qui est donc faux ! ?

Ce n'est peut-être pas très clair (?), alors vous pouvez consulter le
fichier en Cjoint : http://cjoint.com/?gyj6cguX3m

Je mets le code ci-dessous.

Merci à tous.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("AJ1:AX1")) Is Nothing And Target.Count =
1 And Not temoin Then
temoin = True
For Each c In Range(Range("ChampFeries"))
If c <> "" Then
If Day(Target) = Day(c) Then
MsgBox (CByte(c.Rows))
MsgBox (CByte(c.Columns))
Range(Cells(c.Rows + 1, c.Columns), Cells(c.Rows + 4,
c.Columns + 1)).Select
With Selection
.ClearContents
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
.Interior.ColorIndex = xlNone
End With
Range(Cells(c.Rows + 2, c.Columns), Cells(c.Rows + 2,
c.Columns + 1)).Select
With Selection
.HorizontalAlignment = xlCenter
.MergeCells = True
.Value = "Holiday"
End With
Range(Cells(c.Rows, c.Columns), Cells(c.Rows + 4,
c.Columns + 1)).Select
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With
End If
End If
Next c
temoin = False
End If
End Sub

6 réponses

Avatar
h2so4
bonjour,

remplace rows par row et columns par column

--

h2so4
play triogical at http://www.triogical.com
"François" wrote in message
news:
Bonjour à tous,

Dans un calendrier, j'utilise la procédure Worksheet_Change pour créer un
format spécial pour les jours fériés concernés :
- en AJ1:AX1, j'ai la déclaration des jours fériés (pas seulement les
Français ...)
- les cellules comportant les numéros des jours du calendrier sont
reportées
dans la cellule AB5 nommée ChampsFeries
(AB5 -> A5:N5,A10:N10,A15:N15,A20:N20,A25:N25,A30:N30)

Le lancement du Worksheet_Change vise à supprimer le contenu du bloc de
cellule (sur 5 lignes et 2 colonnes) se référant au jour férié à créér, à
mentionner Holiday dans les cellules les plus centrales, et à colorer le
tout en bleu.

Le problème, est que la procédure ne fait pas les modifications sur le bon
bloc, mais ailleurs !...
J'ai fait afficher en msgbox les coordonnées de la cellule trouvée pour le
jour férié.
Ainsi pour un 10/07/07 supposé férié, il me donne 11 pour c.Rows trouvé,
et
aussi 11 pour c.Columns ce qui est donc faux ! ?

Ce n'est peut-être pas très clair (?), alors vous pouvez consulter le
fichier en Cjoint : http://cjoint.com/?gyj6cguX3m

Je mets le code ci-dessous.

Merci à tous.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("AJ1:AX1")) Is Nothing And Target.Count
1 And Not temoin Then
temoin = True

For Each c In Range(Range("ChampFeries"))
If c <> "" Then
If Day(Target) = Day(c) Then
MsgBox (CByte(c.Rows))
MsgBox (CByte(c.Columns))
Range(Cells(c.Rows + 1, c.Columns), Cells(c.Rows + 4,
c.Columns + 1)).Select
With Selection
.ClearContents
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
.Interior.ColorIndex = xlNone
End With
Range(Cells(c.Rows + 2, c.Columns), Cells(c.Rows + 2,
c.Columns + 1)).Select
With Selection
.HorizontalAlignment = xlCenter
.MergeCells = True
.Value = "Holiday"
End With
Range(Cells(c.Rows, c.Columns), Cells(c.Rows + 4,
c.Columns + 1)).Select
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With
End If
End If
Next c
temoin = False
End If
End Sub






Avatar
JP25
Bonjour
Proc modifiée rows par row columns par column
Devant l'erreur de renvoi, j'ai decalé dans la proc les selections column
voir le lien
http://cjoint.com/?gylJ3Q4C3D

--
Cordialement
JP25


"François" a écrit dans le message de news:

Bonjour à tous,

Dans un calendrier, j'utilise la procédure Worksheet_Change pour créer un
format spécial pour les jours fériés concernés :
- en AJ1:AX1, j'ai la déclaration des jours fériés (pas seulement les
Français ...)
- les cellules comportant les numéros des jours du calendrier sont
reportées
dans la cellule AB5 nommée ChampsFeries
(AB5 -> A5:N5,A10:N10,A15:N15,A20:N20,A25:N25,A30:N30)

Le lancement du Worksheet_Change vise à supprimer le contenu du bloc de
cellule (sur 5 lignes et 2 colonnes) se référant au jour férié à créér, à
mentionner Holiday dans les cellules les plus centrales, et à colorer le
tout en bleu.

Le problème, est que la procédure ne fait pas les modifications sur le bon
bloc, mais ailleurs !...
J'ai fait afficher en msgbox les coordonnées de la cellule trouvée pour le
jour férié.
Ainsi pour un 10/07/07 supposé férié, il me donne 11 pour c.Rows trouvé,
et
aussi 11 pour c.Columns ce qui est donc faux ! ?

Ce n'est peut-être pas très clair (?), alors vous pouvez consulter le
fichier en Cjoint : http://cjoint.com/?gyj6cguX3m

Je mets le code ci-dessous.

Merci à tous.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("AJ1:AX1")) Is Nothing And Target.Count
1 And Not temoin Then
temoin = True

For Each c In Range(Range("ChampFeries"))
If c <> "" Then
If Day(Target) = Day(c) Then
MsgBox (CByte(c.Rows))
MsgBox (CByte(c.Columns))
Range(Cells(c.Rows + 1, c.Columns), Cells(c.Rows + 4,
c.Columns + 1)).Select
With Selection
.ClearContents
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
.Interior.ColorIndex = xlNone
End With
Range(Cells(c.Rows + 2, c.Columns), Cells(c.Rows + 2,
c.Columns + 1)).Select
With Selection
.HorizontalAlignment = xlCenter
.MergeCells = True
.Value = "Holiday"
End With
Range(Cells(c.Rows, c.Columns), Cells(c.Rows + 4,
c.Columns + 1)).Select
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With
End If
End If
Next c
temoin = False
End If
End Sub






Avatar
François
Bonjour JP25, Bonjour H2SO4,

Merci beaucoup pour avoir corrigé l'erreur des rows et columns qui m'avait
échappée...

Effectivement, il reste toujours un décalage de valeurs qui induit une
erreur de cible.
La correction que JP25 a apportée, atteind ses limites de fonctionnement
lorsque l'on sélectionne une date fériée en limite de tableau comme le
07/07/07, où la correction induit des valeurs de row et column négatives qui
font bogger le programme !

Je ne comprend pas pour quoi un tel décalage ?

Merci à vous deux pour votre aide

François

"JP25" a écrit dans le message de news:

Bonjour
Proc modifiée rows par row columns par column
Devant l'erreur de renvoi, j'ai decalé dans la proc les selections column
voir le lien
http://cjoint.com/?gylJ3Q4C3D

--
Cordialement
JP25


"François" a écrit dans le message de news:

Bonjour à tous,

Dans un calendrier, j'utilise la procédure Worksheet_Change pour créer un
format spécial pour les jours fériés concernés :
- en AJ1:AX1, j'ai la déclaration des jours fériés (pas seulement les
Français ...)
- les cellules comportant les numéros des jours du calendrier sont
reportées
dans la cellule AB5 nommée ChampsFeries
(AB5 -> A5:N5,A10:N10,A15:N15,A20:N20,A25:N25,A30:N30)

Le lancement du Worksheet_Change vise à supprimer le contenu du bloc de
cellule (sur 5 lignes et 2 colonnes) se référant au jour férié à créér, à
mentionner Holiday dans les cellules les plus centrales, et à colorer le
tout en bleu.

Le problème, est que la procédure ne fait pas les modifications sur le
bon
bloc, mais ailleurs !...
J'ai fait afficher en msgbox les coordonnées de la cellule trouvée pour
le
jour férié.
Ainsi pour un 10/07/07 supposé férié, il me donne 11 pour c.Rows trouvé,
et
aussi 11 pour c.Columns ce qui est donc faux ! ?

Ce n'est peut-être pas très clair (?), alors vous pouvez consulter le
fichier en Cjoint : http://cjoint.com/?gyj6cguX3m

Je mets le code ci-dessous.

Merci à tous.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("AJ1:AX1")) Is Nothing And Target.Count
1 And Not temoin Then
temoin = True


For Each c In Range(Range("ChampFeries"))
If c <> "" Then
If Day(Target) = Day(c) Then
MsgBox (CByte(c.Rows))
MsgBox (CByte(c.Columns))
Range(Cells(c.Rows + 1, c.Columns), Cells(c.Rows + 4,
c.Columns + 1)).Select
With Selection
.ClearContents
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle =
xlNone
.Interior.ColorIndex = xlNone
End With
Range(Cells(c.Rows + 2, c.Columns), Cells(c.Rows + 2,
c.Columns + 1)).Select
With Selection
.HorizontalAlignment = xlCenter
.MergeCells = True
.Value = "Holiday"
End With
Range(Cells(c.Rows, c.Columns), Cells(c.Rows + 4,
c.Columns + 1)).Select
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With
End If
End If
Next c
temoin = False
End If
End Sub












Avatar
h2so4
"François" wrote in message
news:
Bonjour JP25, Bonjour H2SO4,

Merci beaucoup pour avoir corrigé l'erreur des rows et columns qui m'avait
échappée...

Effectivement, il reste toujours un décalage de valeurs qui induit une
erreur de cible.
La correction que JP25 a apportée, atteind ses limites de fonctionnement
lorsque l'on sélectionne une date fériée en limite de tableau comme le
07/07/07, où la correction induit des valeurs de row et column négatives
qui font bogger le programme !

Je ne comprend pas pour quoi un tel décalage ?

Merci à vous deux pour votre aide

François


François,

Mis à part le problème de s a rows et à columns, je pense que ta logique
initiale de décalage est correcte. le problème vient de la fonction day.
Je te propose donc de changer l'instruction suivante

If Day(Target) = Day(c) Then

par

If Day(Target) = c Then

--

h2so4

Avatar
h2so4
"François" wrote in message
news:
Bonjour JP25, Bonjour H2SO4,

Merci beaucoup pour avoir corrigé l'erreur des rows et columns qui
m'avait échappée...

Effectivement, il reste toujours un décalage de valeurs qui induit une
erreur de cible.
La correction que JP25 a apportée, atteind ses limites de fonctionnement
lorsque l'on sélectionne une date fériée en limite de tableau comme le
07/07/07, où la correction induit des valeurs de row et column négatives
qui font bogger le programme !

Je ne comprend pas pour quoi un tel décalage ?

Merci à vous deux pour votre aide

François


François,

Mis à part le problème de s a rows et à columns, je pense que ta logique
initiale de décalage est correcte. le problème vient de la fonction day.
Je te propose donc de changer l'instruction suivante

If Day(Target) = Day(c) Then

par

If Day(Target) = c Then




Dim temoin As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("AJ1:AX1")) Is Nothing And Target.Count =
1 And Not temoin Then
temoin = True
For Each c In Range(Range("ChampFeries"))
If c <> "" Then
If Day(Target) = c Then
MsgBox c.Row
MsgBox c.Column
Range(Cells(c.Row + 1, c.Column), Cells(c.Row + 4,
c.Column + 1)).Select
With Selection
.ClearContents
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
.Interior.ColorIndex = xlNone
End With
Range(Cells(c.Row + 2, c.Column), Cells(c.Row + 2,
c.Column + 1)).Select
With Selection
.HorizontalAlignment = xlCenter
.MergeCells = True
.Value = "Holiday"
End With
Range(Cells(c.Row, c.Column), Cells(c.Row + 4, c.Column
+ 1)).Select
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With
End If
End If
Next c
temoin = False
End If
End Sub
--

h2so4





Avatar
François
Tout à fait,

Le problème venait effectivement de là ....

Merci à toi

François

"h2so4" a écrit dans le message de news:
Tctfi.32385$


"François" wrote in message
news:
Bonjour JP25, Bonjour H2SO4,

Merci beaucoup pour avoir corrigé l'erreur des rows et columns qui
m'avait échappée...

Effectivement, il reste toujours un décalage de valeurs qui induit une
erreur de cible.
La correction que JP25 a apportée, atteind ses limites de fonctionnement
lorsque l'on sélectionne une date fériée en limite de tableau comme le
07/07/07, où la correction induit des valeurs de row et column négatives
qui font bogger le programme !

Je ne comprend pas pour quoi un tel décalage ?

Merci à vous deux pour votre aide

François


François,

Mis à part le problème de s a rows et à columns, je pense que ta logique
initiale de décalage est correcte. le problème vient de la fonction day.
Je te propose donc de changer l'instruction suivante

If Day(Target) = Day(c) Then

par

If Day(Target) = c Then




Dim temoin As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("AJ1:AX1")) Is Nothing And Target.Count
= 1 And Not temoin Then
temoin = True
For Each c In Range(Range("ChampFeries"))
If c <> "" Then
If Day(Target) = c Then
MsgBox c.Row
MsgBox c.Column
Range(Cells(c.Row + 1, c.Column), Cells(c.Row + 4,
c.Column + 1)).Select
With Selection
.ClearContents
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
.Interior.ColorIndex = xlNone
End With
Range(Cells(c.Row + 2, c.Column), Cells(c.Row + 2,
c.Column + 1)).Select
With Selection
.HorizontalAlignment = xlCenter
.MergeCells = True
.Value = "Holiday"
End With
Range(Cells(c.Row, c.Column), Cells(c.Row + 4, c.Column
+ 1)).Select
With Selection.Interior
.ColorIndex = 37
.Pattern = xlSolid
End With
End If
End If
Next c
temoin = False
End If
End Sub
--

h2so4