Problème macro

Résolu
safach Messages postés 293 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
le fichier"compteur d'arrêt machine" calcule le nombre d'heures d'arrêt de machines chaque mois, à partir d'un fichier de production journalière
j'ai utilisé ce fichier pour l'année 2019 et ça marchait bien mais depuis un temps ça ne fonctionnait plus avec le fichier "production" de l'année 2020
j'ai essayé de connaitre la cause mais en vain merci de m'aider
lien vers le fichier "production"
https://mon-partage.fr/f/OQlQcnaB/
lien vers le fichier "compteur"
https://mon-partage.fr/f/X0BY8pQu/
merci encore
bien cordialement

Configuration: Windows / Chrome 80.0.3987.87


--
c'est en cherchant qu'on trouve

4 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    le fichier production ne contient plus les mêmes données au même endroit qu'avant.
    le programme est, pour le moment, tout bête, il ne cherche pas les donnés, il va les chercher à une place précise.
    je pense que cela ira mieux en changeant ces deux lignes dans le code (je pense que tu trouveras facilement les lignes existantes):
    hrtravjour = f.[R22]
    tabloM = f.Range("AA9:AA21")
    

    je remarque aussi que l'ordre des machines a changé, il n'est plus le même dans le ficher production et le fichier compteur. soit tu adaptes un des deux fichiers, soit on recommence la discussion pour que le programme trouve la bonne ligne pour chaque machine.
    0
    1. safach Messages postés 293 Statut Membre 2
       
      Rebonjour,
      j'ai bien changé les deux lignes de la macro et ça calcule de nouveau les pourcentages d'arrêt mais j'espère que le programme trouve la bonne ligne de chaque machine c'est plus pratique au cas ou l'ordre des machines change non intentionnellement
      car pour le moment j'ai en janvier une grande pourcentage d'arrêt qui me semble illogique
      merci beaucoup de votre aide
      lien du fichier compteur
      https://mon-partage.fr/f/2KKqo5tY/
      bien cordialement
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > safach Messages postés 293 Statut Membre
         
        comme expliqué ici, le tableau du fichier compteur contient des rendements, pas des pourcentage d’arrêt.
        quelle valeur te semble-t'elle illogique?
        dans le fichier production, j'ai vu que la machine SB2 a un rendement de 62700% le 22 janvier.
        pour retrouver la bonne ligne de chaque machine, j'avais proposé de rajouter dans une colonne du fichier compteur la lettre symbole de chaque machine. n'est-ce pas possible?
        0
  2. safach Messages postés 293 Statut Membre 2
     
    Re,
    merci de votre retour
    attendez svp je dois me concentrer un peu, merci d'avoir dégager cette remarque
    mon but de ce fichier est de calculer les pourcentages d'arrêt mensuel de l'atelier
    en faisant la somme de toutes les R22 d'un mois, on obtient le nombre d'heures d'ouverture de l'atelier
    puis en calculant la formule R22*AAx ça nous donne les nombre d'heures de travail réel de la machine alors la formule doit être (R22*(100-AAx))/100 pour avoir le complémentaire de la formule précédente ce qui donne justement le nombre d'heures d'arrêt de la machine
    le reste se calcule de la même façon qu'auparavant: on somme ,pour chaque machine, toutes les heurs d'arrêt pendant un mois puis on divise le résultat par la somme des R22 pendant le même mois et on obtient finalement le pourcentage d'arrêt pendent le mois considéré
    en ce qui concerne la liste des machines, oui votre idée me parait efficace on peut utiliser la lettre symbole des machines pour les repérer dans les deux fichiers

    merci beaucoup
    bien cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      pour calculer les pourcentages d’arrêts au lieu des pourcentages de travail, il suffit, en effet, de modifier la ligne pour faire (100-AAx):
      tablo(i, nMois) = tablo(i, nMois) + (100 - tabloM(i, 1)) / 100 * hrtravjour

      si tu me montres le fichier compteur avec les lettres symboles quelque part, je peux adapter le code pour utiliser cette lettre et trouver les bonnes lignes dans le fichier production.
      (je trouve plus sympa de se tutoyer entre participants au forum)
      0
      1. safach Messages postés 293 Statut Membre 2 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Re,
        j'ai bien modifié la ligne de la code, merci
        voici le lien vers le fichier " compteur" , j'ai y ajouté à la colonne A l'alphabet correspondant à chaque machine
        https://mon-partage.fr/f/sbNL8Yj5/
        merci encore
        bien cordialement
        0
      2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > safach Messages postés 293 Statut Membre
         
        je ne comprends pas le lien entre les lettres et les machines:
        dans le fichier production, je vois
        F TSUGAMI le 12/2
        mais I TSUGAMI le 6/2
        je pensais que la même lettre était toujours liée à la même machine.
        0
  3. safach Messages postés 293 Statut Membre 2
     
    Bonjour,
    ce document du réseau est utilisé par plusieurs personnes
    il est altéré depuis le 6/2, j'ai rétabli l'ordre des lettres des feuilles de 6/2 jusqu'à 12/6
    maintenant l'ordre est le même dans toutes les feuilles
    voila le lien
    https://mon-partage.fr/f/n9eN0vB1/
    merci beaucoup
    bien cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      il me semble que les machines n'ont pas les mêmes lettres dans les fichiers production et compteur.
      0
  4. safach Messages postés 293 Statut Membre 2
     
    Rebonjour,
    désolée j'ai oublié de changer la liste des lettres dans "compteur"
    il s'agit maintenant de la même liste dans les deux fichiers
    lien vers "compteur
    https://mon-partage.fr/f/T7Y7NRQl/
    merci encore
    bien cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      ceci devrait chercher les bonnes lignes, en tenant compte des lettres des machines:
      Option Explicit
      
      Sub MettreAjour()
      Dim wbR As Workbook, f As Worksheet, tablo, tabloM, destination As Range
      Dim nomF As String, nMois As Integer, i As Integer, hrtravmois(12) As Integer, hrtravjour As Integer
      Dim nmachines As Integer, lettresdest, dest As Worksheet, lettressrc, source As Range, pmachine As Integer
      Dim idest As Integer, posmachine As Integer
      nomF = "production.xlsm"
      On Error Resume Next
      Set wbR = Workbooks(nomF)
      If Err.Number > 0 Then
          MsgBox "Le classeur ''production'' doit être ouvert;", 16
          Exit Sub
      End If
      Set dest = ActiveSheet
      Set destination = dest.Range("C7:N19")
      destination.ClearContents
      tablo = destination
      nmachines = UBound(tablo, 1)
      lettresdest = destination.Offset(0, 1 - destination.Column).Resize(, 1)
      For i = 1 To 12
          hrtravmois(i) = 0
      Next i
      For Each f In wbR.Worksheets
          If IsDate(f.Name) Then
              If Year(CDate(f.Name)) = ActiveSheet.Range("A5") Then
                  nMois = Month(CDate(f.Name))
                  hrtravjour = f.[R22]
                  hrtravmois(nMois) = hrtravmois(nMois) + hrtravjour
                  Set source = f.Range("AA9:AA21")
                  tabloM = source
                  lettressrc = source.Offset(0, 1 - source.Column).Resize(, 1)
                  For i = 1 To UBound(tabloM, 1)
                      posmachine = 0
                      For idest = 1 To nmachines
                          If lettressrc(i, 1) = lettresdest(idest, 1) Then
                              posmachine = idest
                              Exit For
                          End If
                      Next idest
                      If posmachine > 0 Then
                          tablo(idest, nMois) = tablo(idest, nMois) + (100 - tabloM(i, 1)) / 100 * hrtravjour
                      End If
                  Next i
              End If
          End If
      Next f
      For i = 1 To UBound(tablo, 1)
          For nMois = 1 To 12
              If hrtravmois(nMois) <> 0 And tablo(i, nMois) <> 0 Then
                  tablo(i, nMois) = tablo(i, nMois) / hrtravmois(nMois)
              Else
                  tablo(i, nMois) = ""
              End If
          Next nMois
      Next i
      destination = tablo
      End Sub
      
      0
    2. safach Messages postés 293 Statut Membre 2 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonjour yg_be
      une rupture d'activité imprévue et me voilà de retour
      tout d'abord merci beaucoup de votre solution!
      j'ai rencontré un problème bizarre: j'ai ouvré le fichier production.xlsm puis j'ai activé la macro MettreAjour
      alors j'ai obtienu un message d'erreur "Le classeur ''production'' doit être ouvert;" alors qu'il est déjà ouvert et se trouve dans le même répertoire que le fichier à macro
      mais j'ai remarqué que dans l'explorateur VBA le classeur "production" n'existe pas
      alors qu'auparavant l'explorateur affiche la totalité des fichiers ouverts
      connaissez vous la cause de ce problème
      merci encore
      bien cordialement
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > safach Messages postés 293 Statut Membre
       
      bonjour, le classeur production est bien un xlsm? je ne pense pas que ce soit nécessaire, mais c'est ce que la macro vérifie.
      0
    4. safach Messages postés 293 Statut Membre 2 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonjour,
      oui son extension est bien .xlsm j'ai vérifié cela et c'est pourquoi je ne comprends pas d'ou vient ce message d'erreur
      les deux fichiers ci joint
      production:
      https://mon-partage.fr/f/q8thpP93/
      compteur:
      https://mon-partage.fr/f/TkKQMMVu/
      merci beaucoup
      bien cordialement
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > safach Messages postés 293 Statut Membre
       
      chez moi, tout fonctionne, à condition que le fichier production soit bien ouvert, pas en attente d'une réponse à un message.
      0