Probleme macro de transfert de données

Résolu
safach Messages postés 293 Statut Membre -  
safach Messages postés 293 Statut Membre -
Bonjour,
j'ai un classeur Excel qui contient une macro qui fait le transfert à partir d'un autre classeur nommé "rendement"
mais le classeur "rendement" a été remplacé par un autre classeur nommé "production" qui enregistre la production journalière d'un ensemble de machines
alors je veux que le transfert sera à partir du nouveau classeur "production" et je ne sais pas comment adapter la macro à ce changement
le transfert a pour but de compter les arrêts de production de chaque machine pendant chaque mois
j'ai besoin de votre aide svp les amis j'ai pas de grandes connaissances la dessus
merci par avance
le lien vers le classeur production (source de données):
https://mon-partage.fr/f/Ss0oMrs2/
le lien vers le classeur compteur d'arrêt machine:
https://mon-partage.fr/f/Bu2BCJfh/
bien cordialement

Configuration: Windows / Firefox 56.0


c'est en cherchant qu'on trouve

20 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, peux-tu aussi partager le fichier "rendement"?
    peux-tu expliquer les différences entre le fichier rendement et le fichier production?
    1
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    je suggère ceci:
    Option Explicit
    Sub MettreAjour()
    Dim wbR As Workbook, f As Worksheet, tablo, tabloM
    Dim nomF As String, nMois As Integer, i 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
    ActiveSheet.Range("C7:N23").ClearContents
    Debug.Print ActiveSheet.Name
    tablo = ActiveSheet.Range("C7:N23")
    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))
                tabloM = f.Range("AA18:AA30")
                For i = 1 To UBound(tabloM, 1)
                    If tabloM(i, 1) = 0 Then
                        tablo(i, nMois) = tablo(i, nMois) + 1
                    End If
                Next i
            End If
        End If
    Next f
    ActiveSheet.Range("C7").Resize(UBound(tablo, 1), 12) = tablo
    End Sub
    1
  3. safach Messages postés 293 Statut Membre 2
     
    Bonjour,
    merci de votre réponse
    le lien vers le fichier rendement
    https://mon-partage.fr/f/YwBoSb1H/
    normalement le nombre des arrêts sont calculé à partir les zéro rendement en colonne AA dans le classeur production et qui est en colonne Q dans le classeur rendement
    je pense que c'est la différence entre les deux classeurs
    le classeur "compteur d'arrêt machine" fait la somme des zéro rendement pendant chaque mois et envoie la valeur vers les cellules des machines correspondantes
    merci de m'aider je me bloque la dessus
    bien cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je vois que certaines machines présentes dans le fichier production sont absentes dans le fichier compteur.
      est-ce volontaire?
      0
  4. safach Messages postés 293 Statut Membre 2
     
    Rebonjour,
    oui je veux calculer les machines présentes dans le fichier compteur arrêt machine
    merci de votre réactivité
    bien cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      dans le fichier compteur, je vois trois machines, BIGLIA, MUTI BROCHE, et MULTI BROCHE NV.
      cela correspond à quelles machines dans le fichier production?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. safach Messages postés 293 Statut Membre 2
     
    Rebonjour,
    je veux calculer l'arrêt des machines existantes dans le classeur "production" qui sont les suivantes
    SST16
    SB16
    BIGLIA 301 SM
    BIGLIA 42 S2M-bitourelle
    L32
    TSUGAMI
    MORI SEIKI 3 axes
    MORI SEIKI 5 axes
    HARDING
    KITAMURA
    MULTI BROCHE
    NAKAMURA
    TOUR WEILER

    j'aurais du modifier la liste des machines dans le classeur compteur excusez moi
    merci encore
    bien cordialement

    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      pourrais-tu alors partager le fichier compteur adapté avec la nouvelle liste des machines au bon endroit?
      0
  7. macbernic Messages postés 2231 Date d'inscription   Statut Membre Dernière intervention   545
     
    Bonjour,
    Dans le classeur compteur d'arrêt machine dans la macro "mettreajour" tu dois remplacer : nomF = "rendement.xlsm" par : nomF = "production.xlsm"
    puis : MsgBox "Le classeur ''rendement'' doit être ouvert;", 16 par : MsgBox "Le classeur ''production'' doit être ouvert;", 16
    alors ta macro ira chercher les infos dans le fichier "production".
    @+
    0
  8. safach Messages postés 293 Statut Membre 2
     
    Bonjour les amis,
    je suis désolée pour le retard c'était imprévu
    voici le lien vers le fichier compteur avec la liste de machines mise à jour
    https://mon-partage.fr/f/xyYUv3Tj/
    merci yg_be pour votre aide si précieuse
    merci à vous aussi macbernic mais la structure des deux classeurs n' est pas la même alors ça ne donnera pas le bon résultat
    bien cordialement

    0
  9. safach Messages postés 293 Statut Membre 2
     
    Bonsoir,
    merci yg_be pour votre aide
    est ce que c'est possible qu'au lieu de compter les jours d'arrêts on raisonne par heure d'arrêt
    on somme le temps d'ouverture de l'atelier pour chaque mois (en heure) ça se trouve en bas du tableau et puis selon le rendement on en déduit les heures de travail réels (machine qui produit réellement )
    par exemple la machine A a 50% de rendement pour un temps d'ouverture de 12h alors c'est 12*0,5 =6h de travail réel sur 12h pour un jour jj-mm-aa puis pour un mois c'est la somme des heures de travail réel sur la somme des heures d'ouverture de l'atelier
    si vous pouvez le faire ça sera très gentil de votre part
    merci encore
    bien cordialement

    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      avant d'aller plus loin, merci d'indiquer si la suggestion fonctionne.
      0
  10. safach Messages postés 293 Statut Membre 2
     
    Re,
    oui ça fonctionne parfaitement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      l'exemple que tu donnes n'est pas assez précis. merci de prendre le temps de réfléchir et d'expliquer précisément.
      tu écris" le temps d'ouverture de l'atelier pour chaque mois (en heure) ça se trouve en bas du tableau": en bas de quel tableau: quel classeur, quelle feuille, quelle cellule?
      tu donnes l'exemple "la machine A a 50% de rendement pour un temps d'ouverture de 12h": quel classeur, quelle feuille, quelle cellule? merci d'aller jusqu'au bout de l'exemple, en faisant tous les calculs.
      0
  11. safach Messages postés 293 Statut Membre 2
     
    Bonjour,
    merci de votre retour
    le temps d'ouverture journalier de l'atelier se trouve dans la cellule R31 et R32 il y a quelques feuilles qui ne contiennent pas cette information je vais les rectifier en les convertissons en heure un exemple se trouve dans la feuille 18-12-19 du fichier ci joint
    https://mon-partage.fr/f/xWANrvaN/
    donc dans chaque feuille de rapport journalier de production il y a le temps d'ouverture ,en faisant la somme pour un mois ça donne le nombre d'heures d'ouverture pendant ce mois
    puis en colonne AA des rendements on calcule le temps de travail réel de chaque machine par exemple pour la machine A SST16 en AA18 on en déduit le temps de travail réel de cette façon
    (R31+R32)*A18=le nombre d'heures de travail réel de la machine considérée et ainsi de suite pour les autres machine
    donc dans le fichier compteur au lieu de transférer le nombre de jour d'arrêt on transfère le nombre d'heure de travail réel de chaque machine pendent le mois qu'on divise par le nombre d'heure d'ouverture pendent le même mois
    j'espère que j'étais plus claire je suis disponible pour toute autre clarification
    je suis très reconnaissante pour votre dévouement un grand merci à vous
    bien cordialement

    0
  12. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    je suggère alors ceci:
    Option Explicit
    Sub MettreAjour()
    Dim wbR As Workbook, f As Worksheet, tablo, tabloM
    Dim nomF As String, nMois As Integer, i As Integer, hrtravmois(12) As Integer, hrtravjour 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
    ActiveSheet.Range("C7:N23").ClearContents
    tablo = ActiveSheet.Range("C7:N23")
    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.[R31] + f.[R32]
                hrtravmois(nMois) = hrtravmois(nMois) + hrtravjour
                tabloM = f.Range("AA18:AA30")
                For i = 1 To UBound(tabloM, 1)
                    tablo(i, nMois) = tablo(i, nMois) + tabloM(i, 1) / 100 * hrtravjour
                Next i
            End If
        End If
    Next f
    For i = 1 To UBound(tablo, 1)
        For nMois = 1 To 12
            If hrtravmois(nMois) <> 0 Then
                tablo(i, nMois) = tablo(i, nMois) / hrtravmois(nMois)
            Else
                tablo(i, nMois) = ""
            End If
        Next nMois
    Next i
    ActiveSheet.Range("C7").Resize(UBound(tablo, 1), 12) = tablo
    End Sub
    
    
    0
  13. safach Messages postés 293 Statut Membre 2
     
    Re,
    j'ai essayé votre code et ça donne le calcul dans le fichier ci joint
    https://www.cjoint.com/c/ILzkU5Wwt6m
    pourquoi il y a des zéro aux cellules M20 M21 M22 et N20 N21 N22
    bien cordialement

    0
  14. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    ceci devrait être mieux (il est préférable d'éliminer tous les dim que tu laisses avant la sub):
    Option Explicit
    
    Sub MettreAjour()
    Dim wbR As Workbook, f As Worksheet, tablo, tabloM, source As Range
    Dim nomF As String, nMois As Integer, i As Integer, hrtravmois(12) As Integer, hrtravjour 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 source = ActiveSheet.Range("C7:N19")
    source.ClearContents
    tablo = source
    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.[R31] + f.[R32]
                hrtravmois(nMois) = hrtravmois(nMois) + hrtravjour
                tabloM = f.Range("AA18:AA30")
                For i = 1 To UBound(tabloM, 1)
                    tablo(i, nMois) = tablo(i, nMois) + tabloM(i, 1) / 100 * hrtravjour
                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
    source = tablo
    End Sub
    0
  15. safach Messages postés 293 Statut Membre 2
     
    Bonjour yg_be
    tout d'abord je vous souhaite une très bonne année 2020
    a propos votre code j'ai une petite question
    pour la machine TSUGAMI elle est en arrêt planifié depuis septembre mais en mois 11 et 12 j'ai deux valeurs différentes de zéro (cellules en jaunes dans le fichier compteur ci joint)
    https://mon-partage.fr/f/cUrGaqss/
    merci de votre aide
    bien cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je suppose que cela vient des données dans le classeur production.
      0
  16. safach Messages postés 293 Statut Membre 2
     
    Bonjour,
    si vous voyez le fichier production dans e colonne AA le rendement de cette machine est zéro dans toutes les feuilles du classeur
    bien cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      quand je teste avec le fichier production que j'ai reçu il y a un certain temps, les deux valeurs restent vides.
      0
  17. safach Messages postés 293 Statut Membre 2
     
    Bonjour,
    les autres valeurs étant correctes je ne trouve pas de problème concernant les rendements tous nuls
    merci de votre aide
    j'ai une petite demande pouvez vous rendre la liste déroulante des années infinie (peut contenir toutes les années à venir)
    merci beaucoup
    bien cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      en ce qui concerne les valeurs bizarres pour la machine TSUGAMI, le mieux serait de partager le fichier production qui donne cette anomalie.
      pour la liste déroulante, pourquoi ne pas simplement taper l'année en A5? je ne sais pas comment rendre une liste déroulante infinie, et cela ne me semble pas très utile.
      0
  18. safach Messages postés 293 Statut Membre 2
     
    Bonjour,
    merci de votre retour
    ceci est le fichier production ou le rendement de la machine TSUGAMI est nul partout (machine en arrêt)
    https://mon-partage.fr/f/aTfsd3lk/
    alors si je tape l'année en A5 la macro s'exécute normalement
    merci encore
    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 ne sont pas dans le même ordre dans les deux classeurs, je pense que c'est cela qui fait que les chiffres ne sont pas corrects.
      0
  19. safach Messages postés 293 Statut Membre 2
     
    Re,
    j'ai mis les machines dans le même ordre dans les deux classeurs mais toujours pour la machine en arrêt j'ai deux valeurs non nulles pour les mois de septembre et octobre (valeurs en jaunes)
    ceci le lien du fichier
    https://mon-partage.fr/f/he5V7Abn/
    bien cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      dans le classeur production, l'ordre des machines n'est pas le même en septembre et en décembre.
      0
  20. safach Messages postés 293 Statut Membre 2
     
    Re,
    ah j'ai compris mais chaque machine est désignée par une lettre alphabet
    ça ne résout pas le problème ?
    bien cordialement
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      en effet, le programme pourrait utiliser ces lettres, si elle étaient aussi présentes dans une colonne du classeur compteur.
      0
      1. 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
        sil vous plait je suis désolée pour le dérangement mais le fichier "compteur" ne fonctionne pas avec le fichier "production" de l'année 2020 pourtant je n'ai rien changé dans les deux
        j'ai essayé de connaitre la cause mais en vain merci de m'aider
        fichier "production"
        https://mon-partage.fr/f/OQlQcnaB/
        fichier "compteur"
        https://mon-partage.fr/f/X0BY8pQu/
        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
         
        il n'y a pas de dérangement, c'est moi qui choisit de participer, ou pas.
        "ne fonctionne pas": peux-tu préciser ce qui se passe ou ne se passe pas?
        peux-tu créer une nouvelle discussion?
        0
      3. safach Messages postés 293 Statut Membre 2 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Re,
        merci beaucoup de votre retour
        ça ne calcule rien le tableau reste vide
        ok je lancerai un nouveau sujet
        0
  21. safach Messages postés 293 Statut Membre 2
     
    Re,
    OK dorénavant je garderai le même ordre des machines et les calculs seront exactes
    merci beaucoup
    bien cordialement

    0