Modification code pour calculs

Bonjour le forum

j'ai une code qui ,en entrant une date, calcule le nombre de pièces usinées et me renseigne si j'ai atteint les 1 millions puis me calcule le nombre des pièces défectueuses depuis un autre classeur

mais là je veux qu'il calcule ce nombre de pièces défectueuses du même classeur, ces dernières sont renseignées dans la plage T9:T20 de chaque feuille

alors ça sera de remplacer le classeur " Rapport journalier" par le classeur contenant le code nommé "production" et de modifier la formule de caclul

 cptR = cptR + WorksheetFunction.Sum(wr.Sheets(f.Name).Range("D26:P27")) _
                            + WorksheetFunction.Sum(wr.Sheets(f.Name).Range("S42:S47"))

par la somme des nombres renseignés dans la plage T9:T20 de chaque feuille du même classeur "production"

voici le code complet

Private Sub UserForm_Click()
Option Explicit

Dim wr As Workbook, fp As Worksheet, fr As Worksheet, f As Worksheet
Dim dteD As Date, dte$, nb&, cptT&, cptR&, nf&

Private Sub CommandButton1_Click()  'Bouton Calculer

    dteD = TextBox1
    nb = TextBox2
    cptT = 0
    cptR = 0
    dte = ""
    Label5.Caption = ""
    Label5.Caption = ""
    Label6.Caption = ""
    'For Each f In Worksheets
    For nf = Sheets.Count To 1 Step -1
        Set f = Sheets(nf)
        On Error Resume Next
        If IsDate(f.Name) Then
            If DateValue(TextBox1) <= DateValue(f.Name) Then
                cptT = cptT + WorksheetFunction.Sum(f.Range("U9:U" & f.Range("U" & Rows.Count).End(xlUp).Row))
                On Error Resume Next
                cptR = cptR + WorksheetFunction.Sum(wr.Sheets(f.Name).Range("D26:P27")) _
                            + WorksheetFunction.Sum(wr.Sheets(f.Name).Range("S42:S47"))

                Err.Number = 0

                If cptT > TextBox2 Then
                    dte = f.Name
                    Exit For
                End If

            End If
        End If
    Next nf
    If dte = "" Then
        Label5.Caption = "Le nombre de pièces usinées depuis la date indiquée n'a pas encore été atteint " & _
            "et le nombre de pièces non conformes est aujourd'hui de  : "
    Else
        Label5.Caption = "Le nombre de pièces usinées depuis la date indiquée a été atteint le " & _
            dte & " et le nombre de pièces non conformes y a été de  : "
    End If
    TextBox2 = Format(nb, "### ### ##0")
    Label6.Caption = cptR

End Sub

Private Sub CommandButton2_Click()  'Bouton Fermer
    Unload Me
End Sub

Private Sub UserForm_initialize()

    On Error Resume Next
    Set wr = Workbooks("Rapport journalier.xlsm")
    If Err.Number <> 0 Then
        MsgBox "Le fichier ''Rapport journalier'' doit être ouvert.", 16
        End
    End If

    TextBox1 = Format(Sheets(Worksheets.Count).Name, "dd/mm/yyyy")
    TextBox2 = Format(1000000, "# ### ##0")

End Sub

End Sub

merci de m'aider pour faire ces modifications

cordialement

Bonjour,

merci de m'aider :)

Bonjour

merci de votre retour

ci joint un exemple de mon classeur

pièces fabriquées en colonne U

pièces défectueuses en colonne T

les deux colonnes en jaune

la macro à bouton commande "suivi des pièces non conformes" : userform1

merci à vous

6production-2.xlsm (198.86 Ko)

Hello,

Je ne suis pas sur d'avoir très bien compris ce que tu veux.

Mais si tu veux simplement calculer la sommes de tes NC depuis la feuille modèle qui a été rempli, il te faut remplacer ceci :

 cptR = cptR + WorksheetFunction.Sum(wr.Sheets(f.Name).Range("D26:P27")) _
                            + WorksheetFunction.Sum(wr.Sheets(f.Name).Range("S42:S47"))

Par ceci :

cptR = cptR + WorksheetFunction.Sum(f.Range("T9:T" & Rows.Count).End(xlUp).Row))

A+,

Kilian

Bonjour,

oui effectivement je veux changer ce calcul mais il reste un paramètre qui est le classeur

je veux supprimer le fait que cet ancien calcul était dans un classeur nommé "Rapport journalier" maintenant c'est le colonne T du même classeur "production"

merci à vous

Le paramètre qui est le classeur est le wr.sheets(f.name)

Si tu utilise le code que je t'ai donné juste en-dessous, il vise le classeur actif et donc "production".

cptR = cptR + WorksheetFunction.Sum(f.Range("T9:T" & Rows.Count).End(xlUp).Row))

Je te laisse faire le test et me redire.

A+,

Kilian

oui j'ai fais le test et ça n'a pas donné de message d'erreur

mais j'ai constaté que réellement il n'y a aucune pièces NC en colonne T de chaque feuille

mais le résultat me retourne 104

pouvez vous me vérifier l'exactitude du code

merci beaucoup

ci joint mes modifications

4production-2.xlsm (199.01 Ko)

La somme compte 8 par feuille, et je dois dire que je n'arrive pas à comprendre pourquoi..

Tu peux remplacer par ce code, ça devrait fonctionner :

cptR = cptR + Application.Sum(f.Range(Cells(9, 20), Cells(Rows.Count, 20).End(xlUp).Offset(-1)))

Attention, je ne sais pas si c'était voulu, mais il prenais la somme de toutes les feuilles. Avec celui-ci seul les NC de la feuille active est pris en compte. Mais 22 lignes et je vois que dans certaine feuille il n'y a pas le même nombre de lignes. Et comme tu as une somme à la fin, dans certaine feuille le résultat afficher sera les cellules de T9:T21 + Total.

A+,

Kilian

Bonjour,

merci de votre effort

ce code est sensé faire le suivant: (le classeur va au fur et à mesure contenir une feuille par jour pour toute une année)

faire la somme des pièces réelles colonne U9:U21 depuis la date choisi dans le userform pour me notifier quand ça atteindra le 1 millions de pièces et la date du jour de production correspondant

puis il fais la somme des pièces NC (défectueuses) depuis la date choisi dans le userform

est ce réalisé car je suis un peu perdue

merci encore

Bonjour,

j'ai besoin de l'aide svp

Hello,

Voilà, cette fois ça devrait être bon.

A+,

Kilian

Bonjour,

merci infiniment!

Rechercher des sujets similaires à "modification code calculs"