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

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
h2so4
Le #4600261
bonjour,

remplace rows par row et columns par column

--

h2so4
play triogical at http://www.triogical.com
"François" 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






JP25
Le #4600251
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"
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






François
Le #4600231
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"
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"
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












h2so4
Le #4600201
"François" 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

h2so4
Le #4600191
"François" 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





François
Le #4599961
Tout à fait,

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

Merci à toi

François

"h2so4" Tctfi.32385$


"François" 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









Publicité
Poster une réponse
Anonyme