Sumifs - erreur 1004 - mails

Bonjour à tous, c'est certes mon premier message mais je potasse depuis de long mois maintenant diverses sites d'aide VBA, dont le votre qui est le seul auquel je me suis inscrit pour avoir une réponse à mon problème.

Le voici :

L'objectif est d'avoir un fichier, appelé BE_compil imputation 2018, qui s'ouvre tout seul a date fixe (2 fois par semaine, une seule d'implémenté dans le code) et qui peut recevoir l'intégralité des lignes d'un autre fichier, *NOM Prenom Imputation 2018* (Ex: JEANJEAN Fabrice Imputation 2018) en lançant une macro, puis passe au fichier de la personne suivante, qui est a l'emplacement (N-1)+1

ex:

C:compil

C:compil/JEANJEAN Fabrice

C:compil/JEANJEAN Fabrice/JEANJEAN Fabrice Imputation 2018.xlsx

C:compil/JUJU Arnaud

C:compil/JUJU Arnaud/JUJU Arnaud Imputation 2018.xls

etc

Cette macro permet également d'analyser chaque fichier d'imputation pour qu'un mail s'envoi à la personne si et seulement si son compteur d'heure pour une semaine est inférieur à 35h avec les semaines qu'il doit corriger/remplir. Je joins un fichier lambda pour illustrer bien sûr.

Par souci de compréhension je formule différemment :

Tout les vendredis et lundi à 17h, lancement du code mail_compil.

Le code demande si oui ou non on fait le test et envoi de mail

Si oui: Le code demande si oui ou non on fait la compil

Si oui:

test de tout les fichiers individuel s'il y a 35h par semaine

si oui: ok

si non: note du N° de semaine

ajouter dans compil chaque ligne de la semaine demandé

compteur du nombre de personne en règle

envoi mail a la personne avec les semaines pas ok

si non:

test de tout les fichiers individuel s'il y a 35h par semaine

si oui: ok

si non: note du N° de semaine

compteur du nombre de personne en règle

envoi mail a la personne avec les semaines pas ok

Renvoi d'un msgbox qui indique combien de mail sont envoyé, et combien de personnes ont un bon fichier.

Et enfin, voici le code en lui même, je ne vous joins pas les fonctions d'envoie de mail qui marche sans problème, ou celle de lancer_heure qui correspond a l'ouverture du fichier automatiquement.

La ligne qui définit la variable ok_pasok avec le sumif est celle qui pose problème, "erreur 1004 erreur définie par l'application ou par l'objet".

Je me doute qu'il y aura encore d'autres erreurs dans mon code, mais ne pouvant lancer plus loin la vérification... je bloque.

Public Sub mail_compil()
Dim question As String
Dim question1 As String
Dim chemin As String
Dim fichier As Object
Dim Dossier As Object
Dim fso As Object
Dim repertoire As Object
Dim nom_prenom As String
Dim ok_pasok As String
Dim num_sem1 As String
Dim num_sem2 As String
Dim num_sem3 As String
Dim num_sem4 As String
Dim num_sem5 As String
Dim num_sem6 As String
Dim num_sem7 As String
Dim num_sem8 As String
Dim num_sem9 As String
Dim num_sem10 As String
Dim num_sem11 As String
Dim num_sem12 As String
Dim num_sem13 As String
Dim derlig As Double
Dim derligcompil As Double
Dim indiq_mois As String
Dim recap_sem As String
Dim bon_compil As Integer
Dim bad_compil As Integer
Dim sujet As String
Dim contenu As String
Dim email As String
Dim nbLen As Integer
Dim nbInstr As Integer
Dim strNom As String
Dim strPrenom As String

bon_compil = 0
bad_compil = 0
Application.ScreenUpdating = False
chemin = "V:\Cyril\Travail a faire\mails compils remi\"
Set fso = CreateObject("Scripting.FileSystemObject")
Set Dossier = fso.GetFolder(chemin)
question = InputBox("Bonjour Rémi. Veux tu envoyer des mails pour les Imputations ? oui ou non")
    If question = "oui" Then
        question1 = InputBox("Bien. Voudras tu également remplir ton fichier BE_COMPIL imputation 2018 ? oui ou non")
            If question1 = "oui" Then
                For Each repertoire In Dossier.subfolders
                nom_prenom = Right(repertoire.Path, Len(repertoire.Path) - Len(chemin))
                nbLen = Len(nom_prenom)
                nbInstr = InStr(1, nom_prenom, " ")
                strNom = Left(nom_prenom, nbInstr - 1)
                strPrenom = Right(nom_prenom, nbLen - nbInstr)

                Workbooks.Open (chemin & nom_prenom & "\" & nom_prenom & " Imputation 2018.xlsx")
                Windows("BE__COMPIL Imputation 2018.xlsm").Activate
                ActiveWorkbook.Worksheets("NOM Prénom 2018").Activate
                derligcompil = Cells(Rows.Count, 11).End(xlUp).Row
                Windows(nom_prenom & " Imputation 2018.xlsx").Activate
                ActiveWorkbook.Worksheets(nom_prenom & " 2018").Activate
                    num_sem = ""
                    recap_sem = ""
                    num_sem1 = ""
                    num_sem2 = ""
                    num_sem3 = ""
                    num_sem4 = ""
                    num_sem5 = ""
                    num_sem6 = ""
                    num_sem7 = ""
                    num_sem8 = ""
                    num_sem9 = ""
                    num_sem10 = ""
                    num_sem11 = ""
                    num_sem12 = ""
                    num_sem13 = ""
                    derlig = Cells(Rows.Count, 10).End(xlUp).Row

                    For I = 2 To derlig
                        Range("A2:Q2").Select
                        Selection.Copy
                        Windows("BE__COMPIL Imputation 2018.xlsm").Activate
                        ActiveWorkbook.Worksheets("NOM Prénom 2018").Activate
                        ActiveSheet.Range("C" & derligcompil + I - 1).Select
                        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                            :=False, Transpose:=False
                        Windows(nom_prenom & " imputation 2018").Activate
                        ActiveWorkbook.Worksheets(nom_prenom & " 2018").Activate
                        Range("A1").Select

                        For v = 1 To 12
                        indiq_mois = "S0"
                        If v > 9 Then
                        indiq_mois = "S"
                        End If
                        If Cells(I, 10) <> "" And v = (Right(Cells(I, 10), 2) + 0) And Right(Cells(I, 10), 2) + 0 < DatePart("ww", Now(), vbMonday) Then
                            ok_pasok = WorksheetFunction.SumIfs(ThisWorkbook.ActiveSheet.Range(Cells(2, 17), Cells(46, 17)), ThisWorkbook.ActiveSheet.Range(Cells(2, 10), Cells(31, 10)), (indiq_mois & v))
                            If ok_pasok < 35 Then

                                Select Case Right(Cells(I, 10), 2)
                                    Case Is = "01"
                                    num_sem1 = "Semaine 1"
                                    Case Is = "02"
                                    num_sem2 = "Semaine 2"
                                    Case Is = "03"
                                    num_sem3 = "Semaine 3"
                                    Case Is = "04"
                                    num_sem4 = "Semaine 4"
                                    Case Is = "05"
                                    num_sem5 = "Semaine 5"
                                    Case Is = "06"
                                    num_sem6 = "Semaine 6"
                                    Case Is = "07"
                                    num_sem7 = "Semaine 7"
                                    Case Is = "08"
                                    num_sem8 = "Semaine 8"
                                    Case Is = "09"
                                    num_sem9 = "Semaine 9"
                                    Case Is = "10"
                                    num_sem10 = "Semaine 10"
                                    Case Is = "11"
                                    num_sem11 = "Semaine 11"
                                    Case Is = "12"
                                    num_sem12 = "Semaine 12"
                                    Case Is = "13"
                                    num_sem13 = "Semaine 13"
                                End Select

                            End If
                        End If
                        Next v
                    Next I

                    recap_sem = num_sem1 & vbCrLf & num_sem2 & vbCrLf & num_sem3 & vbCrLf & num_sem4 & vbCrLf & num_sem5 & vbCrLf & num_sem6 & vbCrLf & num_sem7 & vbCrLf & num_sem8 & vbCrLf & num_sem9 & vbCrLf & num_sem10 & vbCrLf & num_sem11 & vbCrLf & num_sem12 & vbCrLf & num_sem13
                    If recap_sem = "" Then
                    bon_compil = bon_compil + 1
                    Else
                    bad_compil = bad_compil + 1
                    End If

                sujet = "Tableau d'imputation"
                email = "remi.sanfins@fmprojet.net"
                contenu = "Bonjour, " & vbCrLf & "il faudrait completer ton tableau d'imputation pour la(les) semaine(s) suivante(s) :" & vbCrLf & recap_sem & "Cordialement," & vbCrLf & "Rémi SANFINS"
                Call EnvoyerEmail(sujet, email, contenu)
                Next

            Else

            For Each repertoire In Dossier.subfolders
                nom_prenom = Right(repertoire.Path, Len(repertoire.Path) - Len(chemin))
                nbLen = Len(nom_prenom)
                nbInstr = InStr(1, nom_prenom, " ")
                strNom = Left(nom_prenom, nbInstr - 1)
                strPrenom = Right(nom_prenom, nbLen - nbInstr)

                Workbooks.Open (chemin & nom_prenom & "\" & nom_prenom & " Imputation 2018.xls")
                Windows("BE__COMPIL Imputation 2018.xlsm").Activate
                ActiveWorkbook.Worksheets("NOM Prénom 2018").Activate
                derligcompil = Cells(Rows.Count, 11).End(xlUp).Row
                Windows(nom_prenom & " imputation 2018").Activate
                ActiveWorkbook.Worksheets(nom_prenom).Activate
                    num_sem = ""
                    recap_sem = ""
                    num_sem1 = ""
                    num_sem2 = ""
                    num_sem3 = ""
                    num_sem4 = ""
                    num_sem5 = ""
                    num_sem6 = ""
                    num_sem7 = ""
                    num_sem8 = ""
                    num_sem9 = ""
                    num_sem10 = ""
                    num_sem11 = ""
                    num_sem12 = ""
                    num_sem13 = ""
                    derlig = Cells(Rows.Count, 10).End(xlUp).Row

                    For I = 2 To derlig
                        Range("B2:Q2").Select
                        Selection.Copy
                        Windows("BE__COMPIL Imputation 2018.xlsm").Activate
                        Worksheets("NOM Prénom 2018").Activate
                        Range(Cells(derligcompil + I, 3)).Select
                        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                            :=False, Transpose:=False
                        Windows(nom_prenom & " imputation 2018").Activate
                        ActiveWorkbook.Worksheets(nom_prenom).Activate

                        For v = 1 To 12
                        indiq_mois = "S0"
                            If v > 9 Then
                            indiq_mois = "S"
                            End If
                        If Cells(I, 10) <> "" And v = (Right(Cells(I, 10), 2) + 0) And Right(Cells(I, 10), 2) + 0 < DatePart("ww", Now(), vbMonday) Then
                            ok_pasok = WorksheetFunction.SumIfs(ThisWorkbook.ActiveSheet.Range(Cells(2, 17), Cells(46, 17)), ThisWorkbook.ActiveSheet.Range(Cells(2, 10), Cells(46, 10)), (indiq_mois & v))
                            If ok_pasok < 35 Then

                                Select Case Right(Cells(I, 10), 2)
                                    Case Is = "01"
                                    num_sem1 = "Semaine 1"
                                    Case Is = "02"
                                    num_sem2 = "Semaine 2"
                                    Case Is = "03"
                                    num_sem3 = "Semaine 3"
                                    Case Is = "04"
                                    num_sem4 = "Semaine 4"
                                    Case Is = "05"
                                    num_sem5 = "Semaine 5"
                                    Case Is = "06"
                                    num_sem6 = "Semaine 6"
                                    Case Is = "07"
                                    num_sem7 = "Semaine 7"
                                    Case Is = "08"
                                    num_sem8 = "Semaine 8"
                                    Case Is = "09"
                                    num_sem9 = "Semaine 9"
                                    Case Is = "10"
                                    num_sem10 = "Semaine 10"
                                    Case Is = "11"
                                    num_sem11 = "Semaine 11"
                                    Case Is = "12"
                                    num_sem12 = "Semaine 12"
                                    Case Is = "13"
                                    num_sem13 = "Semaine 13"
                                End Select

                            End If
                        End If
                        Next v
                    Next I

                    recap_sem = num_sem1 & vbCrLf & num_sem2 & vbCrLf & num_sem3 & vbCrLf & num_sem4 & vbCrLf & num_sem5 & vbCrLf & num_sem6 & vbCrLf & num_sem7 & vbCrLf & num_sem8 & vbCrLf & num_sem9 & vbCrLf & num_sem10 & vbCrLf & num_sem11 & vbCrLf & num_sem12 & vbCrLf & num_sem13
                    If recap_sem = "" Then
                    bon_compil = bon_compil + 1
                    Else
                    bad_compil = bad_compil + 1
                    End If
                Next
            End If
    End If
Set fso = Nothing
Application.ScreenUpdating = True
Call lancer_heure
MsgBox ("Le travail a été fait Rémi. Il y a " & bon_compil & " de personnes qui ont bien mis à jour leurs imputations")
MsgBox ("Et " & bad_compil & " de personnes qui ont été relancé(s) par mail")
End Sub

Je vous lierais demain matin à la première heure pour les éventuelles questions. J'aurais essayé d'être le plus exhaustif possible !

Bonjour,

Dans cette utilisation, "Range" est une fonction et non la propriété d'une feuille.

ci-dessous correction :

    With ThisWorkbook.ActiveSheet
        ok_pasok = WorksheetFunction.SumIfs(Range(.Cells(2, 17), .Cells(46, 17)), Range(.Cells(2, 10), .Cells(46, 10)), (indiq_mois & v))
    End With

Bonjour Thev,

merci de ta réponse cela marche. Le code continu ! ... et s'arrête pour une histoire de fichier xls et non xlsx.

Mais ça c'est une autre histoire. Et une autre question.

Honnêtement avec la tête dans le guidon et l'ampleur des actions a faire dans le code ce n'était pas une mince affaire... J'attend encore quelques tests pour être certain et je marquerais le sujet comme clos

Mauvaise nouvelle.

Cela ne marche pas avec

With ThisWorkbook.ActiveSheet
   ok_pasok = WorksheetFunction.SumIfs(Range(.Cells(2, 17), .Cells(46, 17)), Range(.Cells(2, 10), .Cells(46, 10)), (indiq_mois & v))
End With

Cela me fait 0 comme résultat au lieu du résultat normal. l'activesheet renvoie t'il à mon fichier compil ou à mon fichier JEANJEAN ? Je ne vois pas quel autre type d'erreur cela pourrait être

l'activesheet renvoie t'il à mon fichier compil ou à mon fichier JEANJEAN

"ThisWorkbook.ActiveSheet" renvoit à la feuille active du classeur où est exécuté ton code.

Etant donné que j'ai

Windows(nom_prenom & " imputation 2018").Activate
ActiveWorkbook.Worksheets(nom_prenom & " 2018").Activate
Range("A1").Select

avant, cela m'indique que c'est bien mon fichier JEANJEAN qui est activé, c'est le fichier qui contient le décompte d'heure.

Et donc le mystère reste entier..

Si ton "Sumifs" se rapporte au fichier actif (fichier JEANJEAN), alors il faut utiliser "ActiveWorkbook" et npn "ThisWorkbook" qui n'est pas le fichier actif mais celui qui contient ton code.

With ActiveWorkbook.ActiveSheet
   ok_pasok = WorksheetFunction.SumIfs(Range(.Cells(2, 17), .Cells(46, 17)), Range(.Cells(2, 10), .Cells(46, 10)), (indiq_mois & v))
End With

Cette partie là marche nickel. Merci

Rechercher des sujets similaires à "sumifs erreur 1004 mails"