Probleme macro de transfert de données [Résolu]

Signaler
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
-
safach
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
-
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


20 réponses

Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
bonjour, peux-tu aussi partager le fichier "rendement"?
peux-tu expliquer les différences entre le fichier rendement et le fichier production?
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
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
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
je vois que certaines machines présentes dans le fichier production sont absentes dans le fichier compteur.
est-ce volontaire?
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
2
Rebonjour,
oui je veux calculer les machines présentes dans le fichier compteur arrêt machine
merci de votre réactivité
bien cordialement
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
dans le fichier compteur, je vois trois machines, BIGLIA, MUTI BROCHE, et MULTI BROCHE NV.
cela correspond à quelles machines dans le fichier production?
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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

yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
pourrais-tu alors partager le fichier compteur adapté avec la nouvelle liste des machines au bon endroit?
Messages postés
125
Date d'inscription
samedi 14 décembre 2019
Statut
Membre
Dernière intervention
25 janvier 2020
12
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".
@+
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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

Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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



yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
avant d'aller plus loin, merci d'indiquer si la suggestion fonctionne.
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
2
Re,
oui ça fonctionne parfaitement
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
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.
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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

Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
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

Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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

Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
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
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
je suppose que cela vient des données dans le classeur production.
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
quand je teste avec le fichier production que j'ai reçu il y a un certain temps, les deux valeurs restent vides.
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
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.
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
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.
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
dans le classeur production, l'ordre des machines n'est pas le même en septembre et en décembre.
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
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
yg_be
Messages postés
9432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
28 janvier 2020
503
en effet, le programme pourrait utiliser ces lettres, si elle étaient aussi présentes dans une colonne du classeur compteur.
Messages postés
209
Date d'inscription
jeudi 27 août 2015
Statut
Membre
Dernière intervention
25 janvier 2020
2
Re,
OK dorénavant je garderai le même ordre des machines et les calculs seront exactes
merci beaucoup
bien cordialement