Macro Renvoi somme.si dans un autre classeur

olive323

XLDnaute Occasionnel
Bonjour,

J'aurais SVP besoin d'aide si possible.
Je voudrais faire une macro somme.si "dans le classeur1 feuil1" et renvoyer la valeur du resultat "vers le classeur2 feuil5" en colonne D derniere cellule vide

exemple

=SOMME.SI(B2:B11;"boba4";D2:D11)= 528 à renvoyer dans le classeur 2 en derniere ligne vide de la colonne D

Merci pour aide

Olivier
 

Pièces jointes

  • Classeur1.xlsm
    8.8 KB · Affichages: 52
  • Classeur2.xlsm
    8.1 KB · Affichages: 48
  • Classeur1.xlsm
    8.8 KB · Affichages: 43
  • Classeur2.xlsm
    8.1 KB · Affichages: 49
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Macro Renvoi somme.si dans un autre classeur

Bonjour,

Fonction perso avec ADO

=sommesi("classeur1.xlsx";"titre2";"pal";"titre4")

Code:
Function SommeSi(fichier, champCrit, critere, champSomme)
 'Microsoft ActiveX 2.8 doit être coché
 Dim Cnn As New ADODB.Connection
 Dim rs As New ADODB.Recordset
 DBPath = ActiveWorkbook.Path & "\" & fichier
 sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes';"
 Cnn.Open sconnect
 sSQLSting = "SELECT SUM(" & champSomme & ") From [maBD] where " & champCrit & "='" & critere & "'"
 rs.Open sSQLSting, Cnn
 SommeSi = rs(0)
 rs.Close
 Cnn.Close
End Function

Code:
Sub essai()
  Set f = Sheets("feuil1")
  ligne = f.[D65000].End(xlUp).Row + 1
  f.Cells(ligne, "d") = SommeSi("classeur1.xlsx", "titre2", "boba4", "titre4")
End Sub

JB
 

Pièces jointes

  • Classeur1.xlsx
    9.9 KB · Affichages: 47
  • Classeur1.xlsx
    9.9 KB · Affichages: 51
  • ClasseurADO.xlsm
    18.9 KB · Affichages: 69
Dernière édition:

olive323

XLDnaute Occasionnel
Re : Macro Renvoi somme.si dans un autre classeur

Bonsoir,

Merci beaucoup pour ce retour!!!
C'est un code énormément complexe, c'est un peu gênant de vous demander cela, mais auriez vous SVP un code plus classique que je puisse adapter. La je ne comprends pas du tout.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Macro Renvoi somme.si dans un autre classeur

Code:
Sub essai()
  ttal = Application.SumIf([B2:B100], "boba4", [D2:D100])
  Workbooks.Open (ActiveWorkbook.Path & "\" & "classeur2.xlsm")
  Set f = Sheets("feuil5")
  ligne = f.[D65000].End(xlUp).Row + 1
  f.Cells(ligne, "d") = ttal
  ActiveWorkbook.Save
  ActiveWorkbook.Close
End Sub

JB
 

olive323

XLDnaute Occasionnel
Re : Macro Renvoi somme.si dans un autre classeur

Bonjour,

Je n'avais pas vu que je devais prendre un 2ème critère en considération

J'ai essayé comme ci dessous mais ca bug. pourriez vous SVP m'apporter votre aide?

Application.SumIf([B2:B100], "boba4", [r2:r100], "100",[D2:D100])

Olivier
 

olive323

XLDnaute Occasionnel
Re : Macro Renvoi somme.si dans un autre classeur

Bonjour,

Je suis bloqué Help me !!!

J'aurais si possible encore un peu besoin d'aide!!!

J'ai ajouté une colonne date et je voudrais que le résultat soit renvoyer en face de la date identique à celle de la cellule A3.

Merci pour votre aide...
 

Pièces jointes

  • SUMPRODUCT terminé.xls
    51 KB · Affichages: 58
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Macro Renvoi somme.si dans un autre classeur

Bonsoir,

Je ne voudrais pas mettre de formule dans mon fichier
Ben oui, mais à force, on ne sait plus vraiment ce que tu veux :):
- tu parles de 2 fichiers ... et puis il n'y en a plus qu'un de visible
- tu évoques deux conditions ... mais on ne connaît pas la seconde
- tu commences avec un SOMME.SI, tu passes par un SOMME.SI.ENS ... et on se retrouve avec un SOMMEPROD
- tu annonces "Il me manquait pas grand chose!!!" ... on en déduit donc que tu as trouvé ... mais il semble que non!?

Bref, si tu "sortais un peu le nez du guidon", que tu remettais les explications à plat, pour nous pauvres mortels, qui ne connaissons pas ta situation, ton contexte de travail, ton (ou tes) fichier(s) :confused:
 

olive323

XLDnaute Occasionnel
Re : Macro Renvoi somme.si dans un autre classeur

Bonjour,

Ok je tente plus clair:)

Aujourdh'ui je ne travail plus que sur un fichier.

J'ai fait le choix d'importer les données à traiter dans un onglet notamment pour ce fichier il s'agit de l'onglet R.

Le but est de faire la somme de la colonne B avec le critère"BOB" de la colonne D et le critere date de la colonne C " 16/09/2015"

Et de renvoyer le resultat dans l'onglet stats en colonne C en face de la date que se trouve en colonne B en prenant comme reference la date en A3 dans l'onglet STAts

Suis je plus clair?

Suis je plus clair

Sub Sum_If()

Dim r&, i&, k&
Dim ShR As Worksheet
Set ShR = ActiveWorkbook.Sheets("R")
Dim ShS As Worksheet
Set ShS = ActiveWorkbook.Sheets("STATS")
Dim Plage As Range
Dim Plage1 As Range
Dim Plage2 As Range
Dim tablo()

For i = 1 To 1 ' 4, nombre de critères
ReDim Preserve tablo(i)
tablo(i) = ShS.Cells(3, 1).Value

Next

With ShR
r = ShR.Cells(65536, 1).End(3).Row

Set Plage = ShR.Range(.Cells(2, 2), .Cells(r, 2))
Set Plage1 = ShR.Range(.Cells(2, 4), .Cells(r, 4))
Set Plage2 = ShR.Range(.Cells(2, 3), .Cells(r, 3))
For k = 1 To UBound(tablo)
ShS.Cells(k + ShS.[c65000].End(xlUp).Row, 3) = Application.WorksheetFunction.SumIfs(Plage, Plage2, tablo(k), Plage1, "bob")
Next
End With
'***************** Libération de mémoire ************************
Set ShR = Nothing
Set ShS = Nothing
Set Plage = Nothing
Set Plage1 = Nothing

End Sub
 

Pièces jointes

  • SUM.SIens.xls
    46 KB · Affichages: 37

Modeste

XLDnaute Barbatruc
Re : Macro Renvoi somme.si dans un autre classeur

Bonjour,

Teste la pièce jointe ... j'ai utilisé un autre système que les WorksheetFunctions. Tu verras si j'ai compris et si ça te convient.

Le code s'exécute à chaque changement de la date en A3 (événement Worksheet_Change de la feuille STATS).

Si le volume des données est bien plus conséquent que dans ton exemple, signale-le, on verra si on peut optimiser, le cas échéant.
 

Pièces jointes

  • Somme conditions (olive323).xls
    44.5 KB · Affichages: 48

Modeste

XLDnaute Barbatruc
Re : Macro Renvoi somme.si dans un autre classeur

Bonsoir,

Si tu réclames à corps et à cri une macro ... il faut tout de même que tu sois capable d'adapter la proposition à tes besoins :confused:

Dans la fenêtre de code de la feuille STATS, colle le code suivant et associe-le à ton bouton:
VB:
Sub cumul()
    If [A3] = "" Then Exit Sub
    Set ShR = ActiveWorkbook.Sheets("R")
    Set liste = CreateObject("scripting.dictionary")
    cible = Application.Match([A3], [B:B], 0)
    If IsError(cible) Then MsgBox "Date inconnue": Exit Sub
    For lig = 2 To ShR.Cells(Rows.Count, 1).End(xlUp).Row
        If ShR.Cells(lig, 4) = "bob" And ShR.Cells(lig, 3) = [A3] Then liste(ShR.Cells(lig, 3).Value) = liste(ShR.Cells(lig, 3).Value) + ShR.Cells(lig, 2)
    Next lig
    Cells(cible, 3) = liste.Item([A3].Value)
End Sub
... Tu noteras que les modifs à apporter sont minimes ... pour ne pas dire à peine existantes :eek:
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 835
Membres
103 972
dernier inscrit
steeter