astuce pour simplifier un code vba

  • Initiateur de la discussion Initiateur de la discussion David59
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

David59

XLDnaute Junior
Bonjour le forum

J'ai créé un code vba qui sert a voir un temp de travail pour des personnes

Donc j'ai un tableau ou je rentre les heures et une listbox sur vba qui ne dit la différence de temps par rapport à un plan
Sans titre.jpg

pour simplifier la recherche de chaque personne dans la listbox je me suis arrangé pour que le nom de la personne ce mette en bleu
je me demande si il est possible de faire plus simple😕
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)


'''Lundi
        If Not Application.Intersect(Target, Range("a5:a58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66").Value
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("b5:b58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -1).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66").Value
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("c5:c58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -2).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("d5:d58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -3).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
'''Mardi
        ElseIf Not Application.Intersect(Target, Range("e5:e58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("f5:f58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -1).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("g5:g58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -2).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("h5:h58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -3).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
            
'''mercredi
        ElseIf Not Application.Intersect(Target, Range("i5:i58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("j5:j58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -1).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("k5:k58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -2).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("l5:l58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -3).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
            
'''jeudi
        ElseIf Not Application.Intersect(Target, Range("m5:m58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("n5:n58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -1).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("o5:o58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -2).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("p5:p58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -3).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
            
'''Vendredi
        ElseIf Not Application.Intersect(Target, Range("q5:q58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("r5:r58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -1).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("s5:s58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -2).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("t5:t58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -3).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
'*************************************************************week end*******************************************************************
'''Samedi
           
        ElseIf Not Application.Intersect(Target, Range("u5:u58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("v5:v58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -1).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("w5:w58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -2).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("x5:x58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -3).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
'''Dimanche
            
        ElseIf Not Application.Intersect(Target, Range("y5:y58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("z5:z58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -1).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("aa5:aa58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -2).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        ElseIf Not Application.Intersect(Target, Range("ab5:ab58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -3).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66")
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If
        End If

End Sub

ça fonction très bien mais très long car je doit le refaire sur 2 autres pages

Merci D'avance
David @+
 

Pièces jointes

  • Sans titre.jpg
    Sans titre.jpg
    48.6 KB · Affichages: 402
  • Sans titre.jpg
    Sans titre.jpg
    48.6 KB · Affichages: 413
Re : astuce pour simplifier un code vba

Bonjour David,

Le code étant toujours le même, le principal problème est le décalage de colonne de 0 à -3.

Tu peux facilement le faire en utilisant le modulo par rapport au n° de colonne en écrivant:

Code:
-((ActiveCell.Column - 1) Mod 4)

ActiveCell.Column - 1 Mod 4 donnera 0, 1, 2 ou 3 selon la colonne et avec un "-" indiquera le décalage à effectuer.

Le code devient:

Code:
If Not Application.Intersect(Target, Range("a5:ab58")) Is Nothing Then
            Range("a66").Value = ActiveCell.Offset(0, -((ActiveCell.Column - 1) Mod 4)).Value
            If Range("a66") <> "" Then
            UserForm1.ListBox3.Value = Sheets("planning_modifier").Range("a66").Value
            ElseIf Range("a66") = "" Then
             UserForm1.ListBox3.Value = Clean
            End If

et si tu mets bien "Intersect(Target, Range("a5:ab58")", c'est valable pour tous les jours de la semaine, sauf si j'ai mal compris le problème 🙄

@+

Gael
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
274
Réponses
2
Affichages
62
Réponses
4
Affichages
367
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
239
Retour