Excel VBA - Boucle de calcul ne marche pas
lilith2231
Messages postés
4
Statut
Membre
-
lilith2231 Messages postés 4 Statut Membre -
lilith2231 Messages postés 4 Statut Membre -
Bonjour,
Les 2 boucles de mon progamme ne fonctionnent pas :
1) la première pour le calcul des deltas, doit faire la somme d'une certaine colonne si la condition de la colonne adjacente est respectée (boucle if then else ou select case ne fonctionnent pas, je dois certainement oublié qqch d'important)
2) la deuxième doit calculer le N° de la semaine à partir d'une date et faire la somme d'une certaine colonne pour chaque semaine
Private Sub Import_Données_Fichier_Suivi_Click()
Workbooks.Open ("C:\Home\st31879\Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls")
Windows("Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls").Activate
Dim i As Variant
Dim j As Variant
'Calcul des deltas
Dim cpt_dmoins1 As Variant
Dim cpt_d1 As Variant
Dim cpt_d2 As Variant
Dim cpt_d3 As Variant
cpt_dmoins1 = 0
cpt_d1 = 0
cpt_d2 = 0
cpt_d3 = 0
j = 26
For i = 6 To 10
'Calcul des D-1
'If Cells(i, 26).Value = "D-1" Then
'cpt_dmoins1 = cpt_dmoins1 + Cells(i, 25).Value
'Calcul des D1
'ElseIf Cells(i, 26).Value = D1 Then
'cpt_d1 = cpt_d1 + Cells(i, 25).Value
'Calcul des D2
'elseIf Cells(i, 26).Value = D2 Then
'cpt_d2 = cpt_d2 + Cells(i, 25).Value
'Calcul des D3
'ElseIf Cells(i, 26).Value = D3 Then
'cpt_d3 = cpt_d3 + Cells(i, 25).Value
'End If
Select Case Range("Z" & i).Value
Case Is = D1
cpt_d1 = cpt_d1 + Range("Y" & i).Value
Case Is = D2
cpt_d2 = cpt_d2 + Range("Y" & i).Value
Case Is = D3
cpt_d3 = cpt_d3 + Range("Y" & i).Value
Case Is = D-1
cpt_dmoins1 = cpt_dmoins1 + Range("Y" & i).Value
End Select
Next i
Workbooks("Test_Reporting_WP11_Entrée_Air.xls").Activate
Cells(13, 4) = cpt_dmoins1
Cells(12, 4) = cpt_d1
Cells(11, 4) = cpt_d2
Cells(10, 4) = cpt_d3
Workbooks("Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls").Activate
'Workbooks("Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls").Close
'Calcul des gammes
‘Calcul du N° de la semaine puis du nombre prévu de gammes à lancer chaque semaine et du nombre réel d 'gammes lancées chaque semaine
Dim Semaine As Variant
Dim Sem_Gamme_Prevue()
j = 6
For i = 0 To 100
Sem_Gamme_Prevue(i) = DatePart("ww", Cells(j, 17), 2, 2)
j = j + 1
Next i
Windows("Test_Reporting_WP11_Entrée_Air.xls").Sheets("RAMSES").Activate
j = 3
For Sem = 38 To 52
Cells(49, j) = Application.CountIf(Sem_Gamme_Prevue(), Sem)
j = j + 1
Next Sem
End Sub
Merci par avance pour votre aide.
Lilith2231
Les 2 boucles de mon progamme ne fonctionnent pas :
1) la première pour le calcul des deltas, doit faire la somme d'une certaine colonne si la condition de la colonne adjacente est respectée (boucle if then else ou select case ne fonctionnent pas, je dois certainement oublié qqch d'important)
2) la deuxième doit calculer le N° de la semaine à partir d'une date et faire la somme d'une certaine colonne pour chaque semaine
Private Sub Import_Données_Fichier_Suivi_Click()
Workbooks.Open ("C:\Home\st31879\Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls")
Windows("Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls").Activate
Dim i As Variant
Dim j As Variant
'Calcul des deltas
Dim cpt_dmoins1 As Variant
Dim cpt_d1 As Variant
Dim cpt_d2 As Variant
Dim cpt_d3 As Variant
cpt_dmoins1 = 0
cpt_d1 = 0
cpt_d2 = 0
cpt_d3 = 0
j = 26
For i = 6 To 10
'Calcul des D-1
'If Cells(i, 26).Value = "D-1" Then
'cpt_dmoins1 = cpt_dmoins1 + Cells(i, 25).Value
'Calcul des D1
'ElseIf Cells(i, 26).Value = D1 Then
'cpt_d1 = cpt_d1 + Cells(i, 25).Value
'Calcul des D2
'elseIf Cells(i, 26).Value = D2 Then
'cpt_d2 = cpt_d2 + Cells(i, 25).Value
'Calcul des D3
'ElseIf Cells(i, 26).Value = D3 Then
'cpt_d3 = cpt_d3 + Cells(i, 25).Value
'End If
Select Case Range("Z" & i).Value
Case Is = D1
cpt_d1 = cpt_d1 + Range("Y" & i).Value
Case Is = D2
cpt_d2 = cpt_d2 + Range("Y" & i).Value
Case Is = D3
cpt_d3 = cpt_d3 + Range("Y" & i).Value
Case Is = D-1
cpt_dmoins1 = cpt_dmoins1 + Range("Y" & i).Value
End Select
Next i
Workbooks("Test_Reporting_WP11_Entrée_Air.xls").Activate
Cells(13, 4) = cpt_dmoins1
Cells(12, 4) = cpt_d1
Cells(11, 4) = cpt_d2
Cells(10, 4) = cpt_d3
Workbooks("Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls").Activate
'Workbooks("Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls").Close
'Calcul des gammes
‘Calcul du N° de la semaine puis du nombre prévu de gammes à lancer chaque semaine et du nombre réel d 'gammes lancées chaque semaine
Dim Semaine As Variant
Dim Sem_Gamme_Prevue()
j = 6
For i = 0 To 100
Sem_Gamme_Prevue(i) = DatePart("ww", Cells(j, 17), 2, 2)
j = j + 1
Next i
Windows("Test_Reporting_WP11_Entrée_Air.xls").Sheets("RAMSES").Activate
j = 3
For Sem = 38 To 52
Cells(49, j) = Application.CountIf(Sem_Gamme_Prevue(), Sem)
j = j + 1
Next Sem
End Sub
Merci par avance pour votre aide.
Lilith2231
A voir également:
- Excel VBA - Boucle de calcul ne marche pas
- Liste déroulante excel - Guide
- Comment calculer la moyenne sur excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Déplacer colonne excel - Guide
3 réponses
bonjour,
merci de mettre ton code entre les balises "codes" fournie au 4° onglet en haut de ton message: la lecture sera digeste! sois sympa de modifier
tu as "D-1" puis D1,D2,D3 sans apostrophe (variables publiques d'une autre sub ?)
plus bas
D-1 n'a plus d'apostrophe
c'est une 1° lecture, donc...
merci de mettre ton code entre les balises "codes" fournie au 4° onglet en haut de ton message: la lecture sera digeste! sois sympa de modifier
tu as "D-1" puis D1,D2,D3 sans apostrophe (variables publiques d'une autre sub ?)
plus bas
D-1 n'a plus d'apostrophe
c'est une 1° lecture, donc...
OK,
Quelques remarques:
1/Pourquoi tout déclarer en variant ? (i et j pourrait être en byte et les cpt_xxxx en single ou double si décimaus ou long si entier
2/Est tu sûre d''être sur la bonne feuille lorsque tu ouvres un fichier ?
3/Dim Semaine As Variant ---> dim sem as byte
4/Suis sceptique sur le fonctionnement de la partie calcul des gammes (voir edit)
tu dis, il y a d'autre trucs question optimisation et rapidité mais on verra demain (serai certainement bloqué at home because neige)
edit: 19h15
ci dessous tite macro d'école pour alimenter un tableau (nombres<256 dans A1:A17)
Dim tablo() As Byte
ReDim tablo(0)
For cptr = 1 To 17
tablo(cptr - 1) = Cells(cptr, 1)
ReDim Preserve tablo(cptr)
Next
Quelques remarques:
1/Pourquoi tout déclarer en variant ? (i et j pourrait être en byte et les cpt_xxxx en single ou double si décimaus ou long si entier
2/Est tu sûre d''être sur la bonne feuille lorsque tu ouvres un fichier ?
3/Dim Semaine As Variant ---> dim sem as byte
4/Suis sceptique sur le fonctionnement de la partie calcul des gammes (voir edit)
tu dis, il y a d'autre trucs question optimisation et rapidité mais on verra demain (serai certainement bloqué at home because neige)
edit: 19h15
ci dessous tite macro d'école pour alimenter un tableau (nombres<256 dans A1:A17)
Dim tablo() As Byte
ReDim tablo(0)
For cptr = 1 To 17
tablo(cptr - 1) = Cells(cptr, 1)
ReDim Preserve tablo(cptr)
Next
Bonjour,
Ci joint maquette de W pour le calcul des gammes à adapter à tes classeurs
https://www.cjoint.com/?bik2Wqhn44
macro proposée
Ci joint maquette de W pour le calcul des gammes à adapter à tes classeurs
https://www.cjoint.com/?bik2Wqhn44
macro proposée
Option Explicit
Option Base 1 'pour commencer indexation à 1 plutôt que 0
Sub calculer_gammes()
'Déclarations
Dim Sem As Byte
Dim tablo_sem() As Byte
Dim cptr As Byte
Application.ScreenUpdating = False 'fige défilement de l'écran
With ThisWorkbook.Sheets(1)
ReDim tablo_sem(53)
For cptr = 1 To 100
Sem = DatePart("ww", .Cells(cptr + 5, 17), 2, 2) 'calcule le N° de semaine ISO
tablo_sem(Sem) = tablo_sem(Sem) + 1 ' calcule le nbre de gammes(?) par semaine
Next
End With
'Windows("Test_Reporting_WP11_Entrée_Air.xls").Sheets("RAMSES").Activate
With Workbooks("classeur2.xls").Sheets(1)
.Range("C49:R49").ClearContents
For Sem = 38 To 53
.Cells(49, Sem - 35) = tablo_sem(Sem) 'restitue les nombres par semaine
Next
End With
Msgbox "calculs des gammes terminé"
End Sub
est ce que c'est bon comme suit ?
Private Sub Import_Données_Fichier_Suivi_Click() Workbooks.Open ("C:\Home\st31879\Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls") Windows("Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls").Activate Dim i As Variant Dim j As Variant 'Calcul des deltas Dim cpt_dmoins1 As Variant Dim cpt_d1 As Variant Dim cpt_d2 As Variant Dim cpt_d3 As Variant cpt_dmoins1 = 0 cpt_d1 = 0 cpt_d2 = 0 cpt_d3 = 0 j = 26 For i = 6 To 10 'Calcul des D-1 'If Cells(i, 26).Value = "D-1" Then 'cpt_dmoins1 = cpt_dmoins1 + Cells(i, 25).Value 'Calcul des D1 'ElseIf Cells(i, 26).Value = D1 Then 'cpt_d1 = cpt_d1 + Cells(i, 25).Value 'Calcul des D2 'elseIf Cells(i, 26).Value = D2 Then 'cpt_d2 = cpt_d2 + Cells(i, 25).Value 'Calcul des D3 'ElseIf Cells(i, 26).Value = D3 Then 'cpt_d3 = cpt_d3 + Cells(i, 25).Value 'End If Select Case Range("Z" & i).Value Case Is = "D1" cpt_d1 = cpt_d1 + Range("Y" & i).Value Case Is = "D2" cpt_d2 = cpt_d2 + Range("Y" & i).Value Case Is = "D3" cpt_d3 = cpt_d3 + Range("Y" & i).Value Case Is = "D-1" cpt_dmoins1 = cpt_dmoins1 + Range("Y" & i).Value End Select Next i Workbooks("Test_Reporting_WP11_Entrée_Air.xls").Activate Cells(13, 4) = cpt_dmoins1 Cells(12, 4) = cpt_d1 Cells(11, 4) = cpt_d2 Cells(10, 4) = cpt_d3 Workbooks("Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls").Activate 'Workbooks("Test_Fichier_Suivi_WP11_Entrée_Air_W51.xls").Close 'Calcul des gammes Dim Semaine As Variant Dim Sem_Gamme_Prevue() j = 6 For i = 0 To 100 Sem_Gamme_Prevue(i) = DatePart("ww", Cells(j, 17), 2, 2) j = j + 1 Next i Windows("Test_Reporting_WP11_Entrée_Air.xls").Sheets("RAMSES").Activate j = 3 For Sem = 38 To 52 Cells(49, j) = Application.CountIf(Sem_Gamme_Prevue(), Sem) j = j + 1 Next Sem End Sub