Microsoft 365 Boucle dans deux endroits

lilidxb

XLDnaute Nouveau
Bonjour la communauté,

J'ai besoin d'un petit coup de main. J'ai un fichier de gestion de projets en fonction des semaines. En fonction d'un formulaire utilisateur remplis la charge de travail est assuré de la semaine à la semaine dans le fichier. Le probleme c'est que sur plusieurs annees ma logique tombe a l'eau car si j'enregistre un projet en semaine 10 excel va m'intégrer la charge de travail sur toutes les semaines 10 peut importe l'annee. Je ne peux maherusement joindre le fichier trop lourd un modificateur pour cette partie de code.

J'aimerai que le code comprenne qu'il faut d'abord balayer 2020 (de la colonne 15 a 65) puis passer a la plage d'apres et inserer les donnees comme le fait mon code ci dessous.

Ci dessous a quoi ressemble mon fichier avec les semaines en lignes 6 et les pourcentages par semaine en fonction de la charge de travail.


1587292340802.png


Voici mon code:

VB:
dim der_colonne as Integer
dim I as Integer 

der_colonne = Cells.SpecialCells(xlCellTypeLastCell).Column
For I = 1 To der_colonne

If Cells(6, I) >= Debut And Cells(6, I) <= Fin Then
Cells(Ligne, I) = Wor1

End If

If Cells(6, I) >= Debut2 And Cells(6, I) <= Fin2 Then
Cells(Ligne, I) = Wor2

End If

If Cells(6, I) >= Debut3 And Cells(6, I) <= Fin3 Then
Cells(Ligne, I) = Wor3

End If
If Cells(6, I) >= Debut4 And Cells(6, I) <= Fin4 Then
Cells(Ligne, I) = Wor4

End If
If Cells(6, I) >= Debut5 And Cells(6, I) <= Fin5 Then
Cells(Ligne, I) = Wor5

End If

If Cells(6, I) >= Debut6 And Cells(6, I) <= Fin6 Then
Cells(Ligne, I) = Wor6

End If

Next I

Merci par avance pour votre aide!
 

jmfmarques

XLDnaute Accro
Bonjour
Je te "félicite" car on voit tout de suite :
- dans quelle procédure évènementielle tu as mis tout cela
- où et comment tu as déclaré et initialisé tes variables wor1, wor2 , wor3, wor4, wor5, wor6, fin1, fin2, fin3, fin4, fin5 et fin6
 

lilidxb

XLDnaute Nouveau
Bonjour,


Car il s'agissait d'un code très long désolée. Je n'arrive pas a joindre le fichier car trop volumineux. voici le code complet:


VB:
Dim Ma_valeur As String
Dim Debut As Integer
Dim Fin As Integer
Dim Duration As Integer

Dim der_ligne As Integer: Dim der_colonne As Integer

Dim I As Integer
Dim B As Integer
Dim n_ligne As Integer


Ma_valeur = ComboBox1.Value
Debut = SW1.Value
Fin = EW1.Value

Dim Debut1 As Date: Dim Debut2 As Integer: Dim Debut3 As Integer: Dim Debut4 As Integer: Dim Debut5 As Integer: Dim Debut6 As Integer
Dim Fin1 As Integer: Dim Fin2 As Integer: Dim Fin3 As Integer: Dim Fin4 As Integer: Dim Fin5 As Integer: Dim Fin6 As Integer

Fin2 = EW2.Value
Fin3 = EW3.Value
Fin4 = EW4.Value
Fin5 = EW5.Value
Fin6 = EW6.Value

Debut2 = SW2.Value
Debut3 = SW3.Value
Debut4 = SW4.Value
Debut5 = SW5.Value
Debut6 = SW6.Value

Dim Ligne As Integer
Worksheets("WORKLOAD").Select
Ligne = Sheets("WORKLOAD").Range(Ma_valeur).Offset(1, 0).Row
Cells(Ligne, 1).EntireRow.Select

   Application.CutCopyMode = False
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
    Selection.Borders.LineStyle = xlContinuous
    Selection.Borders.ThemeColor = 1
    Selection.Interior.ColorIndex = 2
    Selection.Borders.TintAndShade = -0.249977111117893
    Selection.Borders.Weight = xlThin
 
Cells(Ligne, 1) = ComboBox1.Value
Cells(Ligne, 2) = ComboBox2.Value
Cells(Ligne, 3) = TextBox1.Value
Cells(Ligne, 4) = TextBox2.Value
Cells(Ligne, 5) = TextBox3.Value
Cells(Ligne, 6) = ComboBox4.Value
Cells(Ligne, 7) = Eqpt.Value
Cells(Ligne, 8) = ComboBox3.Value
Cells(Ligne, 9) = Cab1 & Cab2 & Cab3 & Cab4 & Cab5
Cells(Ligne, 10) = Cab6 & Cab7 & Cab8 & Cab9 & Cab10
Cells(Ligne, 11) = Phase.Value
'Cells(Ligne, col) = Charge.Value

autre_page 'CREER LES DATA SUR LA PAGE DP - Reprends une macro plus bas

F_colonne = Cells(6, 33)
der_colonne2020 = Cells(6, 64)

F_colonne2021 = Cells(6, 65)
Der_colonne2021 = Cells(6, 116)


Rows(Ligne).Select

der_colonne = Cells.SpecialCells(xlCellTypeLastCell).Column
For I = 1 To der_colonne


If Cells(6, I) >= Debut And Cells(6, I) <= Fin Then
Cells(Ligne, I) = Wor1

End If

If Cells(6, I) >= Debut2 And Cells(6, I) <= Fin2 Then
Cells(Ligne, I) = Wor2

End If

If Cells(6, I) >= Debut3 And Cells(6, I) <= Fin3 Then
Cells(Ligne, I) = Wor3

End If
If Cells(6, I) >= Debut4 And Cells(6, I) <= Fin4 Then
Cells(Ligne, I) = Wor4

End If
If Cells(6, I) >= Debut5 And Cells(6, I) <= Fin5 Then
Cells(Ligne, I) = Wor5

End If

If Cells(6, I) >= Debut6 And Cells(6, I) <= Fin6 Then
Cells(Ligne, I) = Wor6

End If

Next I

MsgBox "Project " & TextBox2.Value & " " & TextBox3.Value & " has been created successfully", vbOKOnly + vbInformation, "Maison de la qualité" 

Unload New_project

Exit Sub
Unload New_project
New_project.Show 0

End Sub

- wor1 - wor 6 sont des valeurs standards récupérer d'une autre page définit en tant que variables.
- début et fin sont les numéros de semaine récupérer du userform.

Il s'agit de dates puis elles sont convertit en numéro de semaine à l'aide de ce code ci:

Donc pour recapituler, dans le userform des dates sont remplis, elles sont convertie en numéro de semaine puis grâce à celle-ci je réussissais à trouver la bonne colonne mais ce n'est pas tangible sur plusieurs années.

Me.EW1.Text = DatePart("ww", CDate(Me.End1.Value), vbMonday, vbFirstFourDays)
Fin = EW1.Value


Voici a quoi ressemble l'userform dans lequel les dates sont remplis:
Les semaines sont calculees automatiquement et les "wor1 --> a wor6" correspondent aux pourcentages.

1587294626890.png


Dites moi si ce n'est pas clair! Merci
 

jmfmarques

XLDnaute Accro
Tu me vois désolé, mais tes "explications" laissent totalement pendantes mes interrogations sur la déclaration, la portée et l'initialisation de nombreuses variables que ton code utilise.
Je me garde donc de formuler dans ces conditions (sur quelles hypothèses, d'ailleurs ?) le moindre conseil.
 

Discussions similaires

Réponses
12
Affichages
572

Statistiques des forums

Discussions
312 273
Messages
2 086 695
Membres
103 372
dernier inscrit
BibiCh