astuce pour simplifier un code vba

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:confused:
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: 398
  • Sans titre.jpg
    Sans titre.jpg
    48.6 KB · Affichages: 412

Gael

XLDnaute Barbatruc
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 :rolleyes:

@+

Gael
 
Dernière édition:

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16