OVH Cloud OVH Cloud

Pb écriture de proc

6 réponses
Avatar
Crel
Bonjour à toutes et tous.
J'ai cette proc qui est censée dans un premier temps à l'aide d'un inputbox
sélectionner la date du jour, et dans un deuxième temps tirer un trait dès
qu'il y a un changement de jour.
Cependant, dès qu'il y a un changement de jour, elle veut saisir dans toutes
les cellules concernées une date.
Comment faire pour empêcher cela et faire en sorte qu'une fois le trait
tirée, tout "rentre dans l'ordre" ?
Merci beaucoup.
Patrick.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
Do

saisie = InputBox("Si la date vous convient, cliquer sur OK. Sinon la
date doit être saisie au format jj/mm/aa", "Veuillez saisir une date.",
Format(Now, "dd/mm/yyyy"))
If saisie = "" Then Exit Sub
Loop Until IsDate(saisie)
Target.Value = CDate(saisie)
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 Then
If Target.Count = 1 Then
If Target > Target(0) Then
' FINDEJOURNEE
I = ActiveCell.Row
Set plage = Range(Cells(I, "A"), Cells(I, "N"))
Range("A65536").End(xlUp)(1).Select
Range("A" & ActiveCell.Row & ":N" & ActiveCell.Row).Select

With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 3
End With

I = ActiveCell.Select

End If
End If
End If
End Sub

6 réponses

Avatar
Denis
Bonjour Crel,

Je pense que tu pourrais combiner tes deux procédures en une seule comme suit:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 Then
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
Do
saisie = InputBox("Si la date vous convient, cliquer sur OK. Sinon la date
doit être saisie au format jj/mm/aa", _
"Veuillez saisir une date.", Format(Now, "dd/mm/yyyy"))
If IsDate(saisie) Then
For Each Cell In Range("A" & ActiveCell.Row & ":" & "N" & ActiveCell.Row)
With Cell.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 3
End With
Cell.Value = CDate(saisie)
Next
End If
Loop Until IsDate(saisie) Or saisie = ""
End If
End If
End Sub



DM



"Crel" a écrit dans le message news:

Bonjour à toutes et tous.
J'ai cette proc qui est censée dans un premier temps à l'aide d'un inputbox
sélectionner la date du jour, et dans un deuxième temps tirer un trait dès
qu'il y a un changement de jour.
Cependant, dès qu'il y a un changement de jour, elle veut saisir dans toutes
les cellules concernées une date.
Comment faire pour empêcher cela et faire en sorte qu'une fois le trait
tirée, tout "rentre dans l'ordre" ?
Merci beaucoup.
Patrick.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
Do

saisie = InputBox("Si la date vous convient, cliquer sur OK. Sinon la
date doit être saisie au format jj/mm/aa", "Veuillez saisir une date.",
Format(Now, "dd/mm/yyyy"))
If saisie = "" Then Exit Sub
Loop Until IsDate(saisie)
Target.Value = CDate(saisie)
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 Then
If Target.Count = 1 Then
If Target > Target(0) Then
' FINDEJOURNEE
I = ActiveCell.Row
Set plage = Range(Cells(I, "A"), Cells(I, "N"))
Range("A65536").End(xlUp)(1).Select
Range("A" & ActiveCell.Row & ":N" & ActiveCell.Row).Select

With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 3
End With

I = ActiveCell.Select

End If
End If
End If
End Sub





Avatar
AV
Si tu veux marquer le changement de jour, pourquoi pas une mise forme
conditionnelle ?
Les dates en A1:Ax
Sélection A2 --> MFC -->Formule : ¡<>A2--> bordure haut
ou bien (selon ce que tu veux(pas bien compris)) :
=(A1=AUJOURDHUI())*(A2>AUJOURDHUI())

AV

"Crel" a écrit dans le message news:

Bonjour à toutes et tous.
J'ai cette proc qui est censée dans un premier temps à l'aide d'un inputbox
sélectionner la date du jour, et dans un deuxième temps tirer un trait dès
qu'il y a un changement de jour.
Cependant, dès qu'il y a un changement de jour, elle veut saisir dans toutes
les cellules concernées une date.
Comment faire pour empêcher cela et faire en sorte qu'une fois le trait
tirée, tout "rentre dans l'ordre" ?
Merci beaucoup.
Patrick.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
Do

saisie = InputBox("Si la date vous convient, cliquer sur OK. Sinon la
date doit être saisie au format jj/mm/aa", "Veuillez saisir une date.",
Format(Now, "dd/mm/yyyy"))
If saisie = "" Then Exit Sub
Loop Until IsDate(saisie)
Target.Value = CDate(saisie)
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 Then
If Target.Count = 1 Then
If Target > Target(0) Then
' FINDEJOURNEE
I = ActiveCell.Row
Set plage = Range(Cells(I, "A"), Cells(I, "N"))
Range("A65536").End(xlUp)(1).Select
Range("A" & ActiveCell.Row & ":N" & ActiveCell.Row).Select

With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 3
End With

I = ActiveCell.Select

End If
End If
End If
End Sub





Avatar
Crel
Merci beaucoup Denis, je teste.
Patrick.

"Denis" a écrit dans le message de news:
4ptZa.41115$
Bonjour Crel,

Je pense que tu pourrais combiner tes deux procédures en une seule comme
suit:



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 Then
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
Do
saisie = InputBox("Si la date vous convient, cliquer sur
OK. Sinon la date

doit être saisie au format jj/mm/aa", _
"Veuillez saisir une date.", Format(Now, "dd/mm/yyyy"))
If IsDate(saisie) Then
For Each Cell In Range("A" & ActiveCell.Row & ":" & "N" &
ActiveCell.Row)

With Cell.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 3
End With
Cell.Value = CDate(saisie)
Next
End If
Loop Until IsDate(saisie) Or saisie = ""
End If
End If
End Sub



DM



"Crel" a écrit dans le message news:

Bonjour à toutes et tous.
J'ai cette proc qui est censée dans un premier temps à l'aide d'un
inputbox


sélectionner la date du jour, et dans un deuxième temps tirer un trait
dès


qu'il y a un changement de jour.
Cependant, dès qu'il y a un changement de jour, elle veut saisir dans
toutes


les cellules concernées une date.
Comment faire pour empêcher cela et faire en sorte qu'une fois le trait
tirée, tout "rentre dans l'ordre" ?
Merci beaucoup.
Patrick.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
Do

saisie = InputBox("Si la date vous convient, cliquer sur OK. Sinon
la


date doit être saisie au format jj/mm/aa", "Veuillez saisir une date.",
Format(Now, "dd/mm/yyyy"))
If saisie = "" Then Exit Sub
Loop Until IsDate(saisie)
Target.Value = CDate(saisie)
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 Then
If Target.Count = 1 Then
If Target > Target(0) Then
' FINDEJOURNEE
I = ActiveCell.Row
Set plage = Range(Cells(I, "A"), Cells(I, "N"))
Range("A65536").End(xlUp)(1).Select
Range("A" & ActiveCell.Row & ":N" & ActiveCell.Row).Select

With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 3
End With

I = ActiveCell.Select

End If
End If
End If
End Sub








Avatar
Crel
Re, Denis.
En fait, après test, cela me met la date dans toutes les cellules de A:N,
alors qu'en fait, je souhaite que la date soit uniquement saisie en A, et
que la ligne soit tirée de A à N.
Patrick.

"Denis" a écrit dans le message de news:
4ptZa.41115$
Bonjour Crel,

Je pense que tu pourrais combiner tes deux procédures en une seule comme
suit:



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 Then
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
Do
saisie = InputBox("Si la date vous convient, cliquer sur
OK. Sinon la date

doit être saisie au format jj/mm/aa", _
"Veuillez saisir une date.", Format(Now, "dd/mm/yyyy"))
If IsDate(saisie) Then
For Each Cell In Range("A" & ActiveCell.Row & ":" & "N" &
ActiveCell.Row)

With Cell.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 3
End With
Cell.Value = CDate(saisie)
Next
End If
Loop Until IsDate(saisie) Or saisie = ""
End If
End If
End Sub



DM



"Crel" a écrit dans le message news:

Bonjour à toutes et tous.
J'ai cette proc qui est censée dans un premier temps à l'aide d'un
inputbox


sélectionner la date du jour, et dans un deuxième temps tirer un trait
dès


qu'il y a un changement de jour.
Cependant, dès qu'il y a un changement de jour, elle veut saisir dans
toutes


les cellules concernées une date.
Comment faire pour empêcher cela et faire en sorte qu'une fois le trait
tirée, tout "rentre dans l'ordre" ?
Merci beaucoup.
Patrick.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
Do

saisie = InputBox("Si la date vous convient, cliquer sur OK. Sinon
la


date doit être saisie au format jj/mm/aa", "Veuillez saisir une date.",
Format(Now, "dd/mm/yyyy"))
If saisie = "" Then Exit Sub
Loop Until IsDate(saisie)
Target.Value = CDate(saisie)
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 Then
If Target.Count = 1 Then
If Target > Target(0) Then
' FINDEJOURNEE
I = ActiveCell.Row
Set plage = Range(Cells(I, "A"), Cells(I, "N"))
Range("A65536").End(xlUp)(1).Select
Range("A" & ActiveCell.Row & ":N" & ActiveCell.Row).Select

With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 3
End With

I = ActiveCell.Select

End If
End If
End If
End Sub








Avatar
Denis
Bonjour Patrick,

Alors ce n'est pas bien compliqué. Il suffit, dans le code que je t'ai donné, de supprimer
l'instruction Cell.Value = CDate(saisie) qui est dans la boucle For...Next et de rajouter
l'instruction ActiveCell.Value = CDate(saisie) immédiatement après la boucle Do...Loop
Until

Denis


"Crel" a écrit dans le message news:

Re, Denis.
En fait, après test, cela me met la date dans toutes les cellules de A:N,
alors qu'en fait, je souhaite que la date soit uniquement saisie en A, et
que la ligne soit tirée de A à N.
Patrick.

"Denis" a écrit dans le message de news:
4ptZa.41115$
Bonjour Crel,

Je pense que tu pourrais combiner tes deux procédures en une seule comme
suit:



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 Then
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
Do
saisie = InputBox("Si la date vous convient, cliquer sur
OK. Sinon la date

doit être saisie au format jj/mm/aa", _
"Veuillez saisir une date.", Format(Now, "dd/mm/yyyy"))
If IsDate(saisie) Then
For Each Cell In Range("A" & ActiveCell.Row & ":" & "N" &
ActiveCell.Row)

With Cell.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 3
End With
Cell.Value = CDate(saisie)
Next
End If
Loop Until IsDate(saisie) Or saisie = ""
End If
End If
End Sub



DM



"Crel" a écrit dans le message news:

Bonjour à toutes et tous.
J'ai cette proc qui est censée dans un premier temps à l'aide d'un
inputbox


sélectionner la date du jour, et dans un deuxième temps tirer un trait
dès


qu'il y a un changement de jour.
Cependant, dès qu'il y a un changement de jour, elle veut saisir dans
toutes


les cellules concernées une date.
Comment faire pour empêcher cela et faire en sorte qu'une fois le trait
tirée, tout "rentre dans l'ordre" ?
Merci beaucoup.
Patrick.


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
Do

saisie = InputBox("Si la date vous convient, cliquer sur OK. Sinon
la


date doit être saisie au format jj/mm/aa", "Veuillez saisir une date.",
Format(Now, "dd/mm/yyyy"))
If saisie = "" Then Exit Sub
Loop Until IsDate(saisie)
Target.Value = CDate(saisie)
End If
End Sub


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Row > 1 Then
If Target.Count = 1 Then
If Target > Target(0) Then
' FINDEJOURNEE
I = ActiveCell.Row
Set plage = Range(Cells(I, "A"), Cells(I, "N"))
Range("A65536").End(xlUp)(1).Select
Range("A" & ActiveCell.Row & ":N" & ActiveCell.Row).Select

With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = 3
End With

I = ActiveCell.Select

End If
End If
End If
End Sub












Avatar
Denis
Bonjour,

Petite rectification:

Après la boucle Do...Loop rajouter:

If IsDate(saisie) Then
ActiveCell.Value = CDate(saisie)
End If

Denis


"Denis" a écrit dans le message news:
lWzZa.41547$
Bonjour Patrick,

Alors ce n'est pas bien compliqué. Il suffit, dans le code que je t'ai donné, de
supprimer

l'instruction Cell.Value = CDate(saisie) qui est dans la boucle For...Next et de
rajouter

l'instruction ActiveCell.Value = CDate(saisie) immédiatement après la boucle Do...Loop
Until

Denis