IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

calcul de coûts


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut calcul de coûts
    Bonjour,
    tout d'abord, merci de votre effort, temps et énergie consacrés rien que pour AIDER.
    j'ai besoin d'un coup de main pour alléger des calculs de coûts et je vous remercie par avance
    en fait, j’ai un fichier Excel de calcul de coûts
    Ce fichier comporte 6 feuilles :
    Une feuille « TOTAL » qui calcule par formules les données issues des 4 feuilles suivantes « coûts de détection », « coût de prévention », « coût des défaillances externes » » et « coûts des défaillances internes ».
    Une feuilles source de données « coûts horaire ouvriers,machines »

    Alors je veux « automatiser » le calcul dans les 4 feuilles mentionnées ci-dessus
    Au début je vais détailler le calcul dans la feuille « coût de détection » :
    Ce coût est calculé pour chaque mois par la formule suivante :
    C’est le coût du nombre d’heures lié au triage = nombre d’heures des tris durant le mois *coût horaire de l’ouvrier faisant le tri
    Le coût horaire des ouvriers est dans la feuille source de données « coûts horaire ouvriers,machines »
    le nombre d’heures des tris durant le mois ainsi que l’ouvrier faisant le tri (pour connaitre quel coût horaire choisir) se trouvent dans un autre fichier nommé « Rapport journalier » qui comporte une feuille chaque jour ou on enregistre dans la plage R41 :R47 le nombre d’heures du tri à ce jour là et dans la plage T42:T47 l’ouvrier faisant le tri
    Le coût est alors :
    =somme (R41 :R47) du « rapport journalier »* coût horaire de l’ouvrier faisant le tri (recherche dans la feuille des coûts des ouvriers et machines)
    ces deux informations servent à calculer le coût de détection en faisant la somme des plage R41:R47 de chaque mois puis en multipliant le résultat par le coût horaire de l'ouvrier qui a fait le tri ( on admettant que c'est le même opérateur durant le mois)
    par exemple pour les 3 jours de mars qui existent dans le "Rapport journalier"
    ça fait 8 heures de tri fait par hedia
    alors ça fait 8*7=56
    ce calcul sera complet à la fin du mois
    je vous remercie par avance et je suis disponible pour toute autre explication
    Ci-joint les deux fichiers
    fichier calcul des coûts
    https://mon-partage.fr/f/mba2fk70/
    fichier "Rapport journalier"
    https://mon-partage.fr/f/yuCxMnvx/
    bien cordialement

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour tucherchestutrouves,

    Beaucoup de membres du forum n'ouvrent pas le fichiers joints (risque de virus, difficulté à comprendre les fichiers ...). Pour faciliter les réponses, peux-tu nous faire des copies d'écran des endroits où tu as un problème et des endroits qui permettent de comprendre ta question. Tu peux intégrer les images grâce au bouton "insérer" une image (avec l'arbre).
    Montre-nous ce que tu as déjà fait et là où tu bloque.

    Je ne comprends pas bien ce que tu veux automatisé. Tu nous donnes déjà quelques formules, qu'est-ce qui te manque ? Est-ce que tu veux faire quelque chose par VBA ?

    Merci pour toutes ces clarifications.
    A bientôt

    EDIT : pour les fichiers joints : https://www.developpez.net/forums/d8...s-discussions/

  3. #3
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Bonjour Riaolle,
    merci de votre retour et de vos informations très utiles que j'ignorais!
    j'ai choisi de joindre les fichiers car les formules que je souhaite automatiser existent dans plusieurs feuilles, les sources de données indispensables pour le déroulement de ces calculs existent dans un autre fichier comportant une feuille par jour
    alors je ne vois pas comment expliquer tout sans joindre de fichiers, mais j’essayerais d'expliquer le premier calcul:
    dans la feuille "Coûts de détection"
    la formules dans les cellules C7, E7, G7, I7, K7, M7, O7, Q7, S7, U7, W7 et Y7 calcule ce coût mensuellement de janvier en C7 jusqu'à décembre en Y7
    =somme (R41 :R47) du « rapport journalier » du mois considéré* coût horaire de l’ouvrier faisant le tri (recherche dans la feuille des coûts des ouvriers et machines dans le même fichier des calculs de coûts)
    le fichier "sources de données" nommé "Rapport journalier" comporte une feuille par jour alors pour chaque mois il faut faire la somme des cellules R41 :R47 puis multiplié le résultat (nombre d'heures de tri) par le coût de l'ouvrier faisant le tri (l'ouvrier considéré existe dans la plage T42:T47 du "Rapport journalier", le coût est dans une feuille nommée "coûts horaire ouvriers,machines" dans le même fichier de calcul de coûts )
    j'espère être claire dans mon explication, toujours disponible pour toutes autres clarifications
    ci joint des captures d'écran des deux fichiers
    merci encore de votre aide si préciseuse
    bien cordialement
    Nom : calcul.JPG
Affichages : 1741
Taille : 76,8 Ko
    Nom : Rapport journalier.JPG
Affichages : 1457
Taille : 88,8 Ko

  4. #4
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    J'ai pas tout bien compris, mais je vais essayer de te donner des pistes tout de même.
    Voici ce que j'ai compris et, donc ce sur quoi je pars :
    • Tu as un classeur avec 1 feuille / jour => Classeur Rapport journalier
      1ère question : est-ce que c'est un classeur / mois ou est-ce que c'est un classeur pour l'année ?
      • Dans cette feuille sur les lignes 41 à 47 tu as les opérations de tri, avec en colonne R le temps de tri par opération.
        Au passage : je vois qu'il y a un temps écrit "8h", est-ce que c'est une mise en forme qui permet de transformer "8" en "8h" ou est-ce que tu as vraiment écrit "8h" ? Parce que si tu as écrit "8h", Excel ne pourra pas faire de somme, vu que ce n'est pas un chiffre.
      • Le but, plus tard, est de faire la somme du temps d'opération x le coût horaire du salarié pour le mois.
        2ème question : est-ce que le coût horaire est le même pour chaque personne ou est-ce que ça diffère ?
    • Tu as un classeur avec un onglet Coût de détection, dans lequel il y a 1 colonne / mois dans laquelle tu veux écrire la somme des coûts du mois. Soit la fameuse somme du temps d'opération x coût horaire.


    Selon la réponse à la 1ère question, il y a plusieurs façon de procéder.
    En première approche, j'ai supposé qu'il y a 1 classeur / mois.

    Nom : Forum2.png
Affichages : 1686
Taille : 289,5 Ko

    Ensuit le classeur récapitulatif :

    Nom : Forum3.png
Affichages : 1255
Taille : 7,9 Ko

    La fonction cout_mois est la suivante. A adapter en fonction du nom des classeurs, de si tes classeurs sont ouverts ou non ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Function cout_mois(nomFichier As String)
        Application.ScreenUpdating = False
     
        Dim fichier As Workbook
        Dim feuille As Worksheet
        Dim somme As Long
     
        somme = 0
        'Set fichier = Workbooks.Open("C:\Documents\Perso\" & nomFichier & ".xlsx")  'il y a peut-être moyen de le faire sans ouvrir le fichier
        Set fichier = Workbooks(nomFichier & ".xlsx")   'ça c'est si ton fichier est déjà ouvert quand tu lances la fonction
     
        'Boucle pour aller chercher les sommes de chaque jour et faire le total
        For Each feuille In fichier.Sheets
            If feuille.Name <> "Coût horaire" Then somme = somme + feuille.Range("E12").Value   'la somme de chaque jour est en E12 dans mon exemple
        Next feuille
     
        'fichier.Close      'si tu as du ouvrir ton fichier ci-dessus
     
        cout_mois = somme
     
     
        Application.ScreenUpdating = True
    End Function
    Si tu n'as pas 1 classeur / mois, mais 1 classeur pour toute l'année : je partirai sur la même approche en rajoutant un case / feuille avec la date pour la feuille. Et dans la boucle je rajouterai une condition sur le mois de cette date. Dis-moi si tu peux te débrouiller comme ça.

  5. #5
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Bonsoir,
    Desolee c etait une interruption imprevue
    Merci de votre retour
    Pour repondre a vos questions :
    1/ j ai un classeur "Rapport journalier" par an
    Votre solution changera alors? Excusez mes faibles connaissances en VBA
    Pour la saisie de 8h je changerais le format pour avoir un chiffre que Excel peut manipuler
    Une tres bonne remarque merci
    2/ le cout horaire des ouvriers faisant le tri est le meme mais ca peut augmenter au fil des annees alors j ai ajoute la feuille des couts horaires des ouvriers dans le classeur de calcul des couts
    Merci de votre aide ces calculs quotidiens sont penibles en manuel merci beaucoup
    Bien cordialement

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Comme je disais plus haut, je mettrais une indication pour connaître le mois. Une proposition ci-dessous, en changeant le code pour prendre en compte le mois :
    Nom : forume3.PNG
Affichages : 1372
Taille : 106,9 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Function cout_mois(nomFichier As String, numMois As Range)
        Application.ScreenUpdating = False
     
        Dim fichier As Workbook
        Dim feuille As Worksheet
        Dim somme As Long
     
        somme = 0
        'Set fichier = Workbooks.Open("le chemin vers le fichier")  'il y a peut-être moyen de le faire sans ouvrir le fichier
        Set fichier = Workbooks(nomFichier & ".xlsx")   'ça c'est si ton fichier est déjà ouvert quand tu lances la fonction
     
        'Boucle pour aller chercher les sommes de chaque jour et faire le total
        For Each feuille In fichier.Sheets
            If numMois.Value = feuille.Range("E14") Then    'on prend que les feuilles avec le mois en question (dans les feuilles, je mets le n° du mois en E14)
                If feuille.Name <> "Coût horaire" Then somme = somme + feuille.Range("E12").Value   'la somme de chaque jour est en E12 dans mon exemple
            End If
        Next feuille
     
        'fichier.Close      'si tu as du ouvrir ton fichier ci-dessus
     
        cout_mois = somme
     
     
        Application.ScreenUpdating = True
    End Function
    A toi, maintenant, de tester tout ça de ton côté et de l'adapter pour que ça fonctionne sur ton cas.

  7. #7
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Re bonjour
    Merci de vos propositions
    Je connais pas grand chose en VBA et donc j'ai pas su adapter votre solution
    J'ai essaye de resoudre mon probleme par formules mais sans resultat vu la structure du fichier "Rapport journalier" (feuille par jour)
    En fin j ai decide de poser mon probleme ici pour avoir de l aide
    Excuse les fautes d orthographe je redige mon message via mon tel
    Merci encore
    Bien cordialement

  8. #8
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Je connais pas grand chose en VBA
    Même si VBA n'est pas un langage très complexe, il faut à tout prix que tu lises quelques tutos avant de te lancer dans du codage. Même si on t'aide, tu n'avanceras pas si tu n'as pas les bases.
    https://laurent-ott.developpez.com/t...el-vba-tome-1/

    J'ai essaye de resoudre mon probleme par formules mais sans resultat vu la structure du fichier "Rapport journalier" (feuille par jour)
    En effet, avec une feuille par jour, tu n'arriveras pas à faire une formule simple.
    Remarque : sur ce type de gestion, c'est plus facile d'avoir une base de données sur une feuille et de faire les calculs (avec des formules) à partir de cette feuille.

    donc j'ai pas su adapter votre solution
    Qu'est-ce que tu as fait jusqu'à présent ? Montre-nous ton code en l'état actuel (n'oublie pas les balises CODE). Et où est-ce que tu bloques exactement ?
    J'aimerais que tu répondes à ces 2 questions pour que nous sachions plus précisément où il faut t'aider.

    En attendant que tu reviennes vers nous avec ton code, je te commente le code de ce matin de façon plus détaillée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Function cout_mois(nomFichier As String, numMois As Range)
        'nomFichier : variable de type texte qui est le nom du fichier dans lequel il y a les données (fichier avec 1 onglet/ mois)
        'numMois : objet de type cellule qui est la cellule dans laquelle il y a le numéro correspondant au mois voulu
     
        Application.ScreenUpdating = False     'application qui permet de figer l'écran pendant que la macro s'exécute (n'a aucun impacte sur la macro, c'est juste pour que ça tourne plus vite)
     
        Dim fichier As Workbook          'objet correspondant au classeur avec les données (fichier avec 1 onglet/ mois)
        Dim feuille As Worksheet          ' objet correspondant à une feuille de classeur
        Dim somme As Long                'variable de type nombre réel qui nous permettra de faire la somme des données voulues.
     
        somme = 0          'pour l'instant on met la somme = 0
     
        Set fichier = Workbooks(nomFichier & ".xlsx")   'on suppose que le fichier avec les données est déjà ouvert. Ici on attribut à l'objet "fichier" ce fameux fichier avec les données.
     
        'Boucle pour aller chercher les sommes de chaque jour et faire le total
        For Each feuille In fichier.Sheets      'Pour chaque feuille de l'ensemble des feuilles du fichier avec les données
            If numMois.Value = feuille.Range("E14") Then    'on vérifier que dans cette feuille en E14, on a le numéro du mois qu'on veut
                If feuille.Name <> "Coût horaire" Then somme = somme + feuille.Range("E12").Value   'on vérifie que la feuille n'est pa sla feuille "Coût horaire", puis on ajoute à la somme la cellule E12 (dans laquelle on a fait un sous-total pour un jour donné).
            End If
        Next feuille
     
        cout_mois = somme          'ici on fait en sorte que notre fonction renvoie la somme calculée précédemment. 
     
        Application.ScreenUpdating = True
    End Function

  9. #9
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Bonjour,
    merci de votre solution
    alors si j'ai bien compris
    je dois ajouter une colonne dans chaque feuille du fichier "Rapport journalier" nommée "coût par tri"
    puis une ligne pour la somme "coût total du jour" et une dernière ligne indiquant le numéro du mois de chaque feuille du fichier qui compte maintenant 86 feuilles depuis le début de l'année 2020
    puis je dois ajouter au fichier "Rapport journalier" une feuille récapitulative qui utilisera la fonction coût_mois qui donnera le coût des tris de chaque mois après bien sur son adaptation
    sans oublier que je dois déplacer la feuille indiquant le coût des ouvriers au fichier "Rapport journalier"
    puis j'aurais besoin d'un code pour transférer les coûts du tableau récapitulatif vers la feuille "coût de détection"
    alors pour adapter le code de la fonction je dois remplacer E12 par U48 et E14 par U50 comme indiqué sur les captures d'écran
    suis-je correcte?
    merci encore
    bien cordialementNom : Capture25MARS.JPG
Affichages : 1671
Taille : 104,2 Ko

  10. #10
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Oui, c'est ce qui me paraît plus facile à faire

  11. #11
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Re bonjour,
    ok je commencerai à faire les changements et je vous tiendrais au courant
    une façon pour affronter le confinement
    merci de votre aide

  12. #12
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Bonsoir,
    alors j'ai fais toutes les modifications
    j'ai copié le code dans l'explorateur VBA de la feuille contenant le tableau récapitulatif que j'ai nommé "coût mensuel des tris"
    en utilisant la formule suivante =cout_mois("Rapport journalier";B2) ça retourne l'erreur #NOM?
    quelle est mon erreur ici, je pense que je dois indiquer le nom "Rapport journalier" quelque part dans le code, vous avez utiliser "nomFichier"
    ci joint les captures du code et du tableau récapitulatif indiquant l'erreur
    merci de votre aide
    bien cordialement
    Nom : Capture erreur.JPG
Affichages : 1277
Taille : 100,1 Ko
    Nom : Capture code adapté.JPG
Affichages : 1248
Taille : 167,9 Ko

  13. #13
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    2 choses :

    1. Je vois que tu as mis la fonction sous la feuille "Coût mensuel des tris". Il faut que tu la mettes dans un module.
    Le code dans une feuille est fait pour les événements de la feuille. Ce n'est pas pour mettre des fonctions ou procédures.
    => cela devrait t'enlever l'erreur #NOM?, mais à mon avis tu auras encore une erreur (peut-être #VALEUR!).

    2. La structure de ton classeur n'est pas exactement celle que je pensais, c'est peut-être pour ça qu'il y aura un autre problème.
    Je pensais que tu avais un classeur de données avec les feuilles / jour + le coût horaire seulement. C'est pour ça que j'avais mis la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If feuille.Name <> "Coût horaire" Then
    En effet cette ligne permettait de faire le calcul si le nom de la feuille est différent de "Coût horaire". Or, d'après la structure de ton classeur, il n'y a pas que cette feuille qu'il faut exclure.
    Du coup, je vais adopter une autre stratégie : on va faire la somme sur les feuilles qui finissent par "2020" => càd dont les 4 premiers caractères en partant de la droite sont "2020". Pour cela on va utiliser la fonction Right.

    1ère étape : sans variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Function cout_mois(nomFichier As String, numMois As Range)
        'nomFichier : variable de type texte qui est le nom du fichier dans lequel il y a les données (fichier avec 1 onglet/ mois)
        'numMois : objet de type cellule qui est la cellule dans laquelle il y a le numéro correspondant au mois voulu
     
        Application.ScreenUpdating = False     'application qui permet de figer l'écran pendant que la macro s'exécute (n'a aucun impacte sur la macro, c'est juste pour que ça tourne plus vite)
     
        Dim fichier As Workbook          'objet correspondant au classeur avec les données (fichier avec 1 onglet/ mois)
        Dim feuille As Worksheet          ' objet correspondant à une feuille de classeur
        Dim somme As Long                'variable de type nombre réel qui nous permettra de faire la somme des données voulues.
     
        somme = 0          'pour l'instant on met la somme = 0
     
        Set fichier = Workbooks(nomFichier & ".xlsx")   'on suppose que le fichier avec les données est déjà ouvert. Ici on attribut à l'objet "fichier" ce fameux fichier avec les données.
     
        'Boucle pour aller chercher les sommes de chaque jour et faire le total
        For Each feuille In fichier.Sheets      'Pour chaque feuille de l'ensemble des feuilles du fichier avec les données
            If numMois.Value = feuille.Range("E50") Then    'on vérifier que dans cette feuille en E50, on a le numéro du mois qu'on veut
                If Right(feuille.Name, 4) = "2020" Then somme = somme + feuille.Range("E48").Value   'on vérifie que la feuille correspond bien à une feuille quotidienne, puis on ajoute à la somme la cellule E48 (dans laquelle on a fait un sous-total pour un jour donné).
            End If
        Next feuille
     
        cout_mois = somme          'ici on fait en sorte que notre fonction renvoie la somme calculée précédemment. 
     
        Application.ScreenUpdating = True
    End Function
    La partie en rouge nous dit : si le nom de la feuille fini par 2020, alors je prends cette feuille pour faire le calcul.

    1ère étape : avec variable

    Le problème maintenant, c'est qu'il faudra que tu changes ton code tous les ans pour adapter l'année. Soit tu te souviens qu'il faut juste changer 2020 en 2021, puis 2022 etc. à cet endroit du code. Soit on fait en sorte de ne pas rentrer dans le code et on met une indication sur le fichier Excel. Le mieux c'est de mettre une case dans ta feuille "coût mensuel des tris" qui indique l'année. Par exemple en A6, tu notes l'année. Maintenant, il n'y a plus qu'à changer le 2020 du code par la valeur de la case A6. Et l'an prochain, tu noteras 2021 en A6.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Function cout_mois(nomFichier As String, numMois As Range)
        'nomFichier : variable de type texte qui est le nom du fichier dans lequel il y a les données (fichier avec 1 onglet/ mois)
        'numMois : objet de type cellule qui est la cellule dans laquelle il y a le numéro correspondant au mois voulu
     
        Application.ScreenUpdating = False     'application qui permet de figer l'écran pendant que la macro s'exécute (n'a aucun impacte sur la macro, c'est juste pour que ça tourne plus vite)
     
        Dim fichier As Workbook          'objet correspondant au classeur avec les données (fichier avec 1 onglet/ mois)
        Dim feuille As Worksheet          ' objet correspondant à une feuille de classeur
        Dim somme As Long                'variable de type nombre réel qui nous permettra de faire la somme des données voulues.
     
        somme = 0          'pour l'instant on met la somme = 0
     
        Set fichier = Workbooks(nomFichier & ".xlsx")   'on suppose que le fichier avec les données est déjà ouvert. Ici on attribut à l'objet "fichier" ce fameux fichier avec les données.
     
        'Boucle pour aller chercher les sommes de chaque jour et faire le total
        For Each feuille In fichier.Sheets      'Pour chaque feuille de l'ensemble des feuilles du fichier avec les données
            If numMois.Value = feuille.Range("E50") Then    'on vérifier que dans cette feuille en E50, on a le numéro du mois qu'on veut
                If Right(feuille.Name, 4) = Sheets("coût mensuel des tris").Range("A6").Value Then somme = somme + feuille.Range("E48").Value   'on vérifie que la feuille correspond bien à une feuille quotidienne, puis on ajoute à la somme la cellule E48 (dans laquelle on a fait un sous-total pour un jour donné).
            End If
        Next feuille
     
        cout_mois = somme          'ici on fait en sorte que notre fonction renvoie la somme calculée précédemment. 
     
        Application.ScreenUpdating = True
    End Function

    Petite remarque en aparté : tu n'as peut-être pas trop le choix du format des fichiers, mais si un jour tu dois construire une base de données comme cela, il est beaaaauuuucoouuup plus simple pour la manipulation et surtout l'analyse de construire une base de données sur un seul onglet avec en colonne les données dont tu as besoin et en ligne les occurrences. Avec ça pas besoin de VBA, un tableau croisé dynamique fait en 1 minute (j'exagère à peine) t'aurait donné le résultat que tu veux actuellement.
    Dans ton cas par exemple, il aurait fallu un tableau comme cela (fait en 5 min montre en main ) :
    Nom : forum10.PNG
Affichages : 1478
Taille : 127,2 Ko
    https://silkyroad.developpez.com/excel/tcd/

  14. #14
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Bonjour
    les captures d'écran pour le mois de février et de mars sont ci joint
    Images attachées Images attachées   

  15. #15
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    J'ai fait un petit test ... que j'aurais du faire avant.
    Si j'écris 2020 en cellule A1, alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
        MsgBox Range("A1").Value = Right(Sheets("03-01-2020").Name, 4)
    End Sub
    Me renvoie FAUX, car on compare un nombre à une chaîne de caractère.
    Pour que ça fonctionne, il faut transformer le 2020 en cellule A1 par une chaîne de caractère. Il faut donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub test()
        MsgBox CStr(Range("C1").Value) = Right(Sheets("03-01-2020").Name, 4)
    End Sub
    Là, Excel me renvoie bien VRAI => à lire : https://docs.microsoft.com/fr-fr/off...sion-functions

    En application sur ton code, il faut donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Function cout_mois(nomFichier As String, numMois As Range)
        'nomFichier : variable de type texte qui est le nom du fichier dans lequel il y a les données (fichier avec 1 onglet/ mois)
        'numMois : objet de type cellule qui est la cellule dans laquelle il y a le numéro correspondant au mois voulu
     
        Application.ScreenUpdating = False     'application qui permet de figer l'écran pendant que la macro s'exécute (n'a aucun impacte sur la macro, c'est juste pour que ça tourne plus vite)
     
        Dim fichier As Workbook          'objet correspondant au classeur avec les données (fichier avec 1 onglet/ mois)
        Dim feuille As Worksheet          ' objet correspondant à une feuille de classeur
        Dim somme As Long                'variable de type nombre réel qui nous permettra de faire la somme des données voulues.
     
        somme = 0          'pour l'instant on met la somme = 0
     
        Set fichier = Workbooks(nomFichier & ".xlsx")   'on suppose que le fichier avec les données est déjà ouvert. Ici on attribut à l'objet "fichier" ce fameux fichier avec les données.
     
        'Boucle pour aller chercher les sommes de chaque jour et faire le total
        For Each feuille In fichier.Sheets      'Pour chaque feuille de l'ensemble des feuilles du fichier avec les données
            If numMois.Value = feuille.Range("E50") Then    'on vérifier que dans cette feuille en E50, on a le numéro du mois qu'on veut
                If Right(feuille.Name, 4) = Cstr(Sheets("coût mensuel des tris").Range("A6").Value) Then somme = somme + feuille.Range("E48").Value   'on vérifie que la feuille correspond bien à une feuille quotidienne, puis on ajoute à la somme la cellule E48 (dans laquelle on a fait un sous-total pour un jour donné).
            End If
        Next feuille
     
        cout_mois = somme          'ici on fait en sorte que notre fonction renvoie la somme calculée précédemment. 
     
        Application.ScreenUpdating = True
    End Function

  16. #16
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Bonjour,
    merci beaucoup ça fonctionne parfaitement
    maintenant comment transférer ces coûts vers la feuille "coûts de détection" dans le fichier "coût de la non qualité"
    ci joint une capture de la feuille " coût de détection"
    les valeurs à transférer seront dans les cellules C7, E7, G7, I7, K7, M7, O7, Q7, S7, U7, W7 et Y7 (coût de janvier jusqu'au décembre)
    Nom : calcul.JPG
Affichages : 1273
Taille : 76,8 Ko
    bien cordialement

  17. #17
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Je ne comprends pas bien la question ? Tu veux savoir comment mettre la valeur calculée dans d'autres cellules ?
    Il suffit d'écrire dans la cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =la cellule dont veut avoir la valeur
    Par exemple, en C7 on veut avoir la valeur de la cellule B3 de l'onglet "coût mensuel des tris", alors, en C7, on doit avoir la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ='coût mensuel des tris'!B3

  18. #18
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Re,
    oui je connais ça mais il s'agit de deux fichiers différents

  19. #19
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,
    Citation Envoyé par tucherchestutrouves Voir le message
    Re,
    oui je connais ça mais il s'agit de deux fichiers différents
    C'est pareil : tu tapes =, tu cliques sur la cellule à copier (dans l'autre fichier) et tu tapes Entrée ou Tab.

  20. #20
    Membre averti
    Femme Profil pro
    Chercheur en informatique
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Autre

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Bonjour,
    merci de vos réponses
    ok bien noté merci encore
    je suis actuellement en train d'automatiser d'autres calculs de la même façon proposée par Riaolle
    je vous remercie énormément de votre aide car ça marche très bien
    merci à vous aussi Patrice
    bien cordialement

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/03/2010, 10h21
  2. Comment l'optimiseur d'Oracle calcule le coût
    Par Vincent Rogier dans le forum Contribuez
    Réponses: 8
    Dernier message: 31/07/2009, 11h34
  3. Comment l'optimiseur d'Oracle calcule le coût
    Par big1 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 12/06/2009, 14h07
  4. [Conception] Simulation de calcul de coût
    Par yezid dans le forum Modélisation
    Réponses: 2
    Dernier message: 29/03/2007, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo