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