Améliorer code elseif

Bonsoir à tous,

Je viens de travailler ce code pour le taf car nous devons reporter les chiffres d'une feuille quotidiennement sur une autre feuille qui est un rapport de la semaine,

le rapport journalier est envoyer par mail tout les jours via un bouton en vba et j'aimerai mettre cette partie de code dans celui existant.

J'aimerai savoir si il y a moyen d'améliorer ce code, j'ai des souvenirs sur un tuto sur Python d'avoir vue cela mais j'ai pas le niveau je pense. Sachant que j'ai fait un exemple mais que les cellules de destination ne se suivent pas forcement.

Sub If_Conditions_Jour()
'envoie la capacité des tsp selon jour'
    If Range("a1").Value = "2" Then
        Sheets("day").Select
        Range("D4").Select
        Selection.Copy
        Sheets("week ").Select
        Range("D4").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    ElseIf Range("a1").Value = "3" Then
        Sheets("day").Select
        Range("D5").Select
        Selection.Copy
        Sheets("week ").Select
        Range("D5").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    ElseIf Range("a1").Value = "4" Then
        Sheets("day").Select
        Range("D6").Select
        Selection.Copy
        Sheets("week ").Select
        Range("D6").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    ElseIf Range("a1").Value = "5" Then
        Sheets("day").Select
        Range("D7").Select
        Selection.Copy
        Sheets("week ").Select
        Range("D7").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    ElseIf Range("a1").Value = "6" Then
        Sheets("day").Select
        Range("D8").Select
        Selection.Copy
        Sheets("week ").Select
        Range("D8").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    ElseIf Range("a1").Value = "7" Then
        Sheets("day").Select
        Range("D9").Select
        Selection.Copy
        Sheets("week ").Select
        Range("D9").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
    End If

    Sheets("day").Select
    Range("a1").Select

End Sub

Bonjour,

quand tu parle d'améliorer ton code ,tu parle d'un truc comme ça?

Sub If_Conditions_Jour()
'envoie la capacité des tsp selon jour'
Select Case Range("a1").Value
        Case 2: Sheets("week").Range("D4").Value = Sheets("day").Range("D4").Value
        Case 3: Sheets("week").Range("D5").Value = Sheets("day").Range("D5").Value
        Case 4: Sheets("week").Range("D6").Value = Sheets("day").Range("D6").Value
        Case 5: Sheets("week").Range("D7").Value = Sheets("day").Range("D7").Value
        Case 6: Sheets("week").Range("D8").Value = Sheets("day").Range("D8").Value
        Case 7: Sheets("week").Range("D9").Value = Sheets("day").Range("D9").Value
End Select
End Sub

Bonjour,

voire même :

Sub If_Conditions_Jour()
    'envoie la capacité des tsp selon jour'
    Dim j As Double
    j = Range("a1").Value
    If j >= 2 And j <= 7 Then Sheets("week").Range("D4").Offset(j - 2).Value = Sheets("day").Range("D4").Offset(j - 2).Value
End Sub

eric

Hello la team,

Yes merci à vous.

Par contre j'avais écris mon code sur un tableau simple mais sur le vrai tableau les cellules sur la feuille week ne se suive pas.

par exemple pour le lundi la cellule D4 = f15 sachant que le delta entre chaque cellule de chaque jour est la meme genre :

lundi f15, mardi f30, mercredi f45.

j'ai essayer de refaire le code en insérant une variable "delta" dans la valeur est la caseB1( =15).

Mais je ne sais pas comment faire pour que la boucle additionne 15 pour tombé sur la bonne case.

Sub If_Conditions_Jour()
    'envoie la capacité des tsp selon jour'
    Dim j As Double
    j = Range("a1").Value
    Dim delta As Double
    delta = Range("b1").Value
    If j >= 2 And j <= 7 Then Sheets("week").Range("D4").Offset(j - 2).Value = Sheets("day").Range("D4").Offset(j - 2).Value
End Sub

Bonjour,

pas sûr d'avoir bien compris si D4 devenait F15
A vu de nez :
If j >= 2 And j <= 7 Then Sheets("week").Range("F15").Offset((j - 2) * 15).Value = Sheets("day").Range("F15").Offset((j - 2) * 15).Value
Le principe :
F15 : 1ère cellule destination
j-2 : pour avoir 0 de décalage le 1er jour
* 15 : décalage de jour en jour
eric

merci eriiic,

Tu as bien compris ma demande par contre moi je peux abusé et te demander de m'expliquer ton code car j'ai peur de pas comprendre tout.

.Offset(ligne, colonne) te crée un décalage par rapport à la cellule d'origine.
Toi tu veux un décalage de 0, 15, 30, ... en fonction du jour j

Si j=2 alors (j - 2) * 15 = (2 - 2) * 15 = 0 * 15 = +0. Il reste en F15
Si j=3 alors (j - 2) * 15 = (3 - 2) * 15 = 1 * 15 = +15. Il passe en F30
Si j=4 alors (j - 2) * 15 = (4 - 2) * 15 = 2 * 15 = +30. Il passe en F45
etc

En l'absence de précision j'ai mis le même décalage coté source et destination, tu pourrais faire des décalage différents des 2 cotés du = si besoin.
eric

Rechercher des sujets similaires à "ameliorer code elseif"