Excel VBA - Boucle de calcul ne marche pas

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
A voir également:

3 réponses

michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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...
0
lilith2231 Messages postés 4 Statut Membre
 
ok

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
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour,

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
0
lilith2231 Messages postés 4 Statut Membre
 
Merci !

Je vais regarder tout ça de près !

Lilith2231
0