Somme automatique selon critére

Bonjour ,

je voudrais faire des alimenter ma récap

Nbr de dossiers RA Materiel alors sur la colonne voir si il ya le nombre 1195 faire le nombre de colonne J

Nbr de dossiers RC Materiel alors sur la colonne voir si il ya le nombre 1195 faire le nombre de colonne K

Nbr de dossiers RC Corporel alors sur la colonne voir si il ya le nombre 1196 faire le nombre de colonne J

Nbr de dossiers RA Corporel alors sur la colonne voir si il ya le nombre 1196 faire le nombre de colonne K

Montant RA c'est la somme de J

Montant RC C'est la somme K

Bonjour Abdernino,

Je te propose le code suivant :

Option Explicit
Sub PopulateAllRecap()
    PopulateRecap "1195", 10, ThisWorkbook.Worksheets("recap").Range("C12") 'Nbr de dossiers RA Materiel
    PopulateRecap "1195", 11, ThisWorkbook.Worksheets("recap").Range("C13") 'Nbr de dossiers RC Materiel
    PopulateRecap "1196", 10, ThisWorkbook.Worksheets("recap").Range("C14") 'Nbr de dossiers RA Corporel
    PopulateRecap "1196", 11, ThisWorkbook.Worksheets("recap").Range("C15") 'Nbr de dossiers RC Corporel
    MsgBox "Fin de calcul de la récap", vbExclamation
End Sub
Sub PopulateRecap(zCriteria1 As String, zField2 As Long, zRange As Range)
    Dim oSheet As Worksheet
    Dim oResultRange As Range, oRange As Range
    Dim lNb As Long

    'On réfère la feuille "base"
    Set oSheet = ThisWorkbook.Worksheets("base")
    'On réfère la plage à filtrer : de la ligne 13 à la dernière ligne remplie , de la colonne A à la colonne L
    Set oRange = oSheet.Range(oSheet.Cells(13, 1), oSheet.Cells(oSheet.UsedRange.Rows.Count, 12))

    'On efface tous les filtres au cas où
    On Error Resume Next
    oSheet.ShowAllData
    On Error GoTo 0

    'On spécifie le filtre 1195 sur la colonne "Ref Dossier"
    oRange.AutoFilter 5, "=*" & zCriteria1 & "*", xlAnd
    'On spécifie le filtre sur la colonne RA
    oRange.AutoFilter zField2, ">0", xlAnd

    'On calcule le nombre de lignes sélectionnées par le filtre
    Set oResultRange = Intersect(oRange, oSheet.Range("A:A"))
    lNb = Application.WorksheetFunction.Subtotal(103, oResultRange)

    'On remplit la cellule de la feuille recap
    zRange.Value = lNb

    'On efface les filtres posé
    oSheet.ShowAllData

    'On fait le ménage
    Set oRange = Nothing
    Set oResultRange = Nothing
    Set oSheet = Nothing

End Sub

Je mets ton EXCEL modifié en P.J.

Bonjour Abdernino,

Je te propose le code suivant :

Option Explicit
Sub PopulateAllRecap()
    PopulateRecap "1195", 10, ThisWorkbook.Worksheets("recap").Range("C12") 'Nbr de dossiers RA Materiel
    PopulateRecap "1195", 11, ThisWorkbook.Worksheets("recap").Range("C13") 'Nbr de dossiers RC Materiel
    PopulateRecap "1196", 10, ThisWorkbook.Worksheets("recap").Range("C14") 'Nbr de dossiers RA Corporel
    PopulateRecap "1196", 11, ThisWorkbook.Worksheets("recap").Range("C15") 'Nbr de dossiers RC Corporel
    MsgBox "Fin de calcul de la récap", vbExclamation
End Sub
Sub PopulateRecap(zCriteria1 As String, zField2 As Long, zRange As Range)
    Dim oSheet As Worksheet
    Dim oResultRange As Range, oRange As Range
    Dim lNb As Long

    'On réfère la feuille "base"
    Set oSheet = ThisWorkbook.Worksheets("base")
    Bonsoir , 
    Merci beaucoup
    mais le total ne change pas en E13 et E14 
    et est ce que c'est possible de faire la même chose pour les sans suite le critère est  C S/S 
    Merci d'avance pour ton aide si précieuse 

    'On réfère la plage à filtrer : de la ligne 13 à la dernière ligne remplie , de la colonne A à la colonne L
    Set oRange = oSheet.Range(oSheet.Cells(13, 1), oSheet.Cells(oSheet.UsedRange.Rows.Count, 12))

    'On efface tous les filtres au cas où
    On Error Resume Next
    oSheet.ShowAllData
    On Error GoTo 0

    'On spécifie le filtre 1195 sur la colonne "Ref Dossier"
    oRange.AutoFilter 5, "=*" & zCriteria1 & "*", xlAnd
    'On spécifie le filtre sur la colonne RA
    oRange.AutoFilter zField2, ">0", xlAnd

    'On calcule le nombre de lignes sélectionnées par le filtre
    Set oResultRange = Intersect(oRange, oSheet.Range("A:A"))
    lNb = Application.WorksheetFunction.Subtotal(103, oResultRange)

    'On remplit la cellule de la feuille recap
    zRange.Value = lNb

    'On efface les filtres posé
    oSheet.ShowAllData

    'On fait le ménage
    Set oRange = Nothing
    Set oResultRange = Nothing
    Set oSheet = Nothing

End Sub

Je mets ton EXCEL modifié en P.J.

Bonjour ,

parfait ca marche très bien

je veux faire la même chose pour les sans suite S/S dans la dernière colonne

Merci beaucoup

Bonjour Abdernino,

Pour les S/S, j'ai ajouté la procédure :

Sub PopulateSansSuite(zRange As Range)
    Dim oSheet As Worksheet
    Dim oResultRange As Range, oRange As Range
    Dim lNb As Long

    'On réfère la feuille "base"
    Set oSheet = ThisWorkbook.Worksheets("base")
    'On réfère la plage à filtrer : de la ligne 13 à la dernière ligne remplie , de la colonne A à la colonne L
    Set oRange = oSheet.Range(oSheet.Cells(13, 1), oSheet.Cells(oSheet.UsedRange.Rows.Count, 12))

    'On efface tous les filtres au cas où
    On Error Resume Next
    oSheet.ShowAllData
    On Error GoTo 0

    'On spécifie le filtre s/s sur la colonne "OBS"
    oRange.AutoFilter 12, "s/s"

    'On calcule le nombre de lignes sélectionnées par le filtre
    Set oResultRange = Intersect(oRange, oSheet.Range("A:A"))
    lNb = Application.WorksheetFunction.Subtotal(103, oResultRange)

    'On remplit la cellule de la feuille recap
    zRange.Value = lNb

    'On efface les filtres posé
    oSheet.ShowAllData

    'On fait le ménage
    Set oRange = Nothing
    Set oResultRange = Nothing
    Set oSheet = Nothing

End Sub

Je joins la nouvelle version.

Bonjour ,

Merci beaucoup

Bonjour ,

encore fois un grand merci a toi , est ce que c'est possible de rajouter les totaux E13, et E14

Merci

Bonjour Abdernino,

Pour les montants totaux RA/RC, je te propose de simplement définir un nom pour les cellules contenant ces totaux dans la feuille "base" (par exemple "MontantRA" et "MontantRC") et dans la feuille "Recap" de faire référence à ces noms.

Je joins la nouvelle version amendée

Bonjour ,

Mais le problème c'est que tu a défini la plage de la somme , mais la plage peut changer comment faire ?

Bonjour,

Bonjour ,

Mais le problème c'est que tu a défini la plage de la somme , mais la plage peut changer comment faire ?

Tu parles de quoi : la formule qui est dans les cellules J1482 et K1482 de l'onglet "base"?

Si ta liste (toutes les cases au dessus) peut varier, 2 options :

-laisser une ligne vide juste avant le calcul de la somme et intégrer cette ligne vide dans le calcul. Quand tu rajouteras des lignes, tu sélectionnes cette ligne vide, et avec un clic droit "insérer une ligne", tu coup le total prendra toutes les lignes en comptes

-autre solution : mettre tes cellules de total tout en haut de ton tableau, et dans les formules, tu mets (par ex en J1482) :

=SOMME(J13:J9999)

au lieu de

=SOMME(J13:J1483)

comme ca c'est tranquile pour un moment (et si +/-10000 lignes c'est pas suffisant, tu rajoutes un 9

Abdernino,

Avec une plage nommée, si tu ajoutes des lignes dans la feuille "base", aucun soucis à se faire : EXCEL modifiera de lui même l'adresse de la plage.

C'est l'un des importants avantages d'utiliser les plages nommées...

Bonjour GVIALLES,

très. bien , merci pour ton aide si précieuse .

voila j'ai essayer d'adapter la macro a mon fichier qui commence a ligne 11 au lieu 13 , j'ai essayer de modifier ma ca marche pas ,

même l’observation est sur la colonne M.

Bonjour GVIALLES,

depuis des heures j'essaye de modifié la macro suivant mon fichier impossible et pour la somme E13,E14 je voudrais faire tant que la cellule D est non vide faire la somme .vraiment besoin de ton aide

Bonjour GVIALLES,

moi j'ai rajouter une colonne et après j'ai même oRange.AutoFilter 5 a 6 mais ça marche pas, alors je sais pas quoi faire

Bonjour Abdernino,

Le format du classeur "Interface liquidation.xlsm" est sensiblement différent du classeur "OL ALL C 2A finale.xlsx" soumis initialement ce qui peut expliquer les difficultés que tu rencontres pour adapter les macros.

J'ai ces questions avant de te faire de nouvelles propositions:

  • Le format de "Interface liquidation.xlsm" est-il définitif ou bien as-tu besoin de le faire évoluer?
  • De quelle façon est alimenté la feuille "base"?
  • A l'ouverture du classeur, j'obtiens un message d'erreur de liaison avec le classeur "OL ALL C 2A Finale". Cette liaison est-elle nécessaire?

Bonjour Abdernino,

Le format du classeur "Interface liquidation.xlsm" est sensiblement différent du classeur "OL ALL C 2A finale.xlsx" soumis initialement ce qui peut expliquer les difficultés que tu rencontres pour adapter les macros.

J'ai ces questions avant de te faire de nouvelles propositions:

  • Le format de "Interface liquidation.xlsm" est-il définitif ou bien as-tu besoin de le faire évoluer?
  • De quelle façon est alimenté la feuille "base"?
  • A l'ouverture du classeur, j'obtiens un message d'erreur de liaison avec le classeur "OL ALL C 2A Finale". Cette liaison est-elle nécessaire?

Bonjour GVIALLES, tout d’abord merci pour ton aide

  • le format de l'interface liquidation ne va pas changer il est définitif
  • la feuille base elle est alimentée par la saisie
  • pour la liaison elle n'est pas nécessaire .

Abdernino,

La feuille 'base' fait référence aux données de la feuille 'Feuil1' :

reffeuil1

Confirmes-tu que la saisie est faite dans 'base' et non pas dans 'Feuil1'?

Bonjour , oui la saisie sur l'onglet base , pour la feuile1 c'est la feuile référence ou je fait la recherche v mais il y a cas ou la recherche ne ramène rien alors il est obligé de tout saisir.

Aberdino,

Ma proposition pour le classeur "Interface Liquidation" en P.J.

Bonjour ,

parfait et même extra , je te remercie pour ton aide .

Rechercher des sujets similaires à "somme automatique critere"