Simplification code

[Résolu/Fermé]
Signaler
Messages postés
300
Date d'inscription
vendredi 15 mars 2013
Statut
Membre
Dernière intervention
31 juillet 2018
-
Messages postés
300
Date d'inscription
vendredi 15 mars 2013
Statut
Membre
Dernière intervention
31 juillet 2018
-
Bonjour,

J'utilise un petit code qui me permet d'écrire automatiquement la date dans une cellule spécifique lorsque l'on clique sur celle-ci.
Le souci c'est que j'ai plus d'une vingtaine de cellule "date" pour lesquelles mon code s'applique, je répète donc celui-ci vingt fois. C'est efficace, mais ce n'est pas très esthétique ni pratique dans mon VBA... Je cherche donc à simplifier mon code si possible.

Merci d'avance pour votre aide :)

Voici un extrait du code en question :
Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

If Not Intersect(Target, Range("F8")) Is Nothing Then
If Range("F8") <> "" Then
If MsgBox("Voulez-vous changer la date ?", vbQuestion + vbYesNo, "Confirmation") = vbYes Then
Range("F8").Value = Date
Else: Exit Sub
End If
Else: Range("F8").Value = Date
End If
End If

'___________________

If Not Intersect(Target, Range("F25")) Is Nothing Then
If Range("F25") <> "" Then
If MsgBox("Voulez-vous changer la date ?", vbQuestion + vbYesNo, "Confirmation") = vbYes Then
Range("F25").Value = Date
Else: Exit Sub
End If
Else: Range("F25").Value = Date
End If
End If

'___________________

If Not Intersect(Target, Range("F42")) Is Nothing Then
If Range("F42") <> "" Then
If MsgBox("Voulez-vous changer la date ?", vbQuestion + vbYesNo, "Confirmation") = vbYes Then
Range("F42").Value = Date
Else: Exit Sub
End If
Else: Range("F42").Value = Date
End If
End If

'___________________

End Sub

2 réponses

Messages postés
300
Date d'inscription
vendredi 15 mars 2013
Statut
Membre
Dernière intervention
31 juillet 2018
25
Re,

J'ai essayé de "bricoler" quelque chose, mais évidemment ça ne fonctionne pas (surement car je ne connais pas la syntaxe ni la façon d'utiliser .Adress).
En revanche cela peut être une piste pour résoudre mon problème...

Voici mon idée :
        If Not Intersect(Target, Range("F8,F25,F42")) Is Nothing Then
ActiveCell.Address = ref
If Range(ref) <> "" Then
If MsgBox("Voulez-vous changer la date ?", vbQuestion + vbYesNo, "Confirmation") = vbYes Then
Range(ref).Value = Date
Else: Exit Sub
End If
Else: Range(ref).Value = Date
End If
End If
Messages postés
15981
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 septembre 2021
1 535
Bonjour,

Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("F8,F25,F42")) Is Nothing Then
        ref = Target.Address
        If Range(ref) <> "" Then
            If MsgBox("Voulez-vous changer la date ?", vbQuestion + vbYesNo, "Confirmation") = vbYes Then
                Range(ref).Value = Date
            Else: Exit Sub
            End If
        Else: Range(ref).Value = Date
        End If
    End If
End Sub
Messages postés
300
Date d'inscription
vendredi 15 mars 2013
Statut
Membre
Dernière intervention
31 juillet 2018
25
Bonjour,

Merci pour la réponse qui fonctionne très bien.

Pour information, je venais de réussir à bricoler un petit quelque chose aussi qui avait l'air de fonctionner :
Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Ref As Range

If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F8,F25")) Is Nothing Then
Set Ref = Selection
If Ref <> "" Then
If MsgBox("Voulez-vous changer la date ?", vbQuestion + vbYesNo, "Confirmation") = vbYes Then
Ref.Value = Date
Else: Exit Sub
End If
Else: Ref.Value = Date
End If
End If


Par simple curiosité, comment met-on le code en forme + couleurs sur le forum ?

Encore merci et bonne journée.

(Je vais clôturer le sujet dans quelques minutes, j'attends juste une éventuelle réponse à ma question ou une remarque sur mon code)
Messages postés
15981
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 septembre 2021
1 535 >
Messages postés
300
Date d'inscription
vendredi 15 mars 2013
Statut
Membre
Dernière intervention
31 juillet 2018

Re,

code le plus simple et "logique"

Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("F8,F25,F42")) Is Nothing Then
        If Target <> "" Then
            If MsgBox("Voulez-vous changer la date ?", vbQuestion + vbYesNo, "Confirmation") = vbYes Then
                Target.Value = Date
            Else: Exit Sub
            End If
        Else: Target.Value = Date
        End If
    End If
End Sub


comment met-on le code en forme + couleurs sur le forum ?
En haut a droite vous avez B I S <> et V: selectionner le texte que vous voulez mettre en forme, clic sur la fleche vers le bas et choisisez le langage
Messages postés
300
Date d'inscription
vendredi 15 mars 2013
Statut
Membre
Dernière intervention
31 juillet 2018
25
Re,

Je n'avais pas fais attention à la petite flèche...Merci

Effectivement ce code me semble plus logique, je vais opter pour celui-ci !

Encore merci pour l'aide !