Excel VBA - Boucle de calcul ne marche pas

lilith2231 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
lilith2231 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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
Configuration: Windows XP
Firefox 3.0.14

3 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. lilith2231 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
       
      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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. lilith2231 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci !

      Je vais regarder tout ça de près !

      Lilith2231
      0