Comment sommer sous VBA

Nonno

XLDnaute Nouveau
Bonjour à tous,

Je cherche à écrire une condition sous VBA avant de fermer mon fichier. Je voudrai que ma macro me calcule automatique la somme des cellule Y à AJ de la ligne sélectionnée et que si la somme est égale à 0 il me met un message d'erreur. Seulement je n'arrive pas bien à m'y prendre... Pouvez-vous m'aider svp ? Merci
Ci-dessous le code :


Private Sub Workbook_BeforeClose(Cancel As Boolean)

For Each cell In Workbooks("Classeur 1").Sheets(1).Column(C)
If cell.Value = "PERM" Then
If Column(I) = 0 Then MsgBox ("Honoraire à 0 pour le candidat")
If Colomn(X) = "" Then MsgBox ("Mentionner Facturé/Potentiel pour le candidat")
If SUM("Y:AJ)=0 then msgbox ("Pas de donnée sur le détail par mois pour le candidat")
Next cell

End Sub


Merci

Nono
 

thebenoit59

XLDnaute Accro
Re : Comment sommer sous VBA

A essayer.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Sheets(1)
For i = 1 to .[c65000].end(xlup).Row
If .Cells(i, 3).Value = "PERM" Then
If .Cells(i, "i") = 0 Then MsgBox "Honoraire à 0 pour le candidat"
If .Cells(i, "x") = "" Then MsgBox "Mentionner Facturé/Potentiel pour le candidat"
If WorksheetFunction.Sum(.Range(.Cells(i, "y"), .Cells(i, "aj"))) = 0 Then MsgBox "Pas de donnée sur le détail par mois pour le candidat"
End If
Next i
End With
End Sub
 
Dernière édition:

Nonno

XLDnaute Nouveau
Re : Comment sommer sous VBA

Merci beaucoup pour ta réponse !!!

Par contre je ne comprend pas lorsque je tente de le lancer il me met " next sans For" pourtant il y est au début du code... devrai-je le rajouter autre part ??

Merci encore pour votre aide !!

Nono
 

Nonno

XLDnaute Nouveau
Re : Comment sommer sous VBA

Merci beaucoup ca marche !!

Cependant vous savez comment faire pour que le fichier ne se ferme pas si les conditions ne sont pas remplis ? Car lorsque j'essaie de fermer le fichier, les msg apparaissent à la suite et ensuite le fichier se ferme automatiquement... Je voudrai obliger la personne à remplir le fichier complètement avant de pouvoir le fermer ...

J'ai rajouter un autre if pour le cas où la colonne C était nommée " TT" :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

With Sheets(1)

For i = 1 To .[c65000].End(xlUp).Row
If .Cells(i, 3).Value = "PERM" Then
If .Cells(i, "i") = 0 Then MsgBox "Honoraire à 0 pour le candidat"
If .Cells(i, "x") = "" Then MsgBox "Mentionner Facturé/Potentiel pour le candidat"
If WorksheetFunction.Sum(.Range(.Cells(i, "y"), .Cells(i, "aj"))) = 0 Then MsgBox "Pas de donnée sur le détail par mois pour le candidat"

End If
Next i
End With

With Sheets(1)
For j = 1 To .[c65000].End(xlUp).Row
If .Cells(j, 3).Value = "TT" Then
If .Cells(j, "p") = 0 Then MsgBox "Honoraire à 0 pour le candidat"
If .Cells(j, "q") = 0 Then MsgBox "Honoraire à 0 pour le candidat"
If .Cells(j, "x") = "" Then MsgBox "Mentionner Facturé/Potentiel pour le candidat"
If WorksheetFunction.Sum(.Range(.Cells(j, "y"), .Cells(j, "aj"))) = 0 Then MsgBox "Pas de donnée sur le détail par mois pour le candidat"
End If

Next j
End With

End Sub



Merci d'avance !!
Nono
 

thebenoit59

XLDnaute Accro
Re : Comment sommer sous VBA

Essaye ceci :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Sheets(1)
For i = 1 to .[c65000].end(xlup).Row
If .Cells(i, 3).Value = "PERM" Then
If .Cells(i, "i") = 0 Then MsgBox "Honoraire à 0 pour le candidat, ligne " & i: Cancel = True: Exit Sub
If .Cells(i, "x") = "" Then MsgBox "Mentionner Facturé/Potentiel pour le candidat, ligne " & i: Cancel = True: Exit Sub
If WorksheetFunction.Sum(.Range(.Cells(i, "y"), .Cells(i, "aj"))) = 0 Then MsgBox "Pas de donnée sur le détail par mois pour le candidat, ligne " & i: Cancel = True: Exit Sub
End If
Next i
End With
End Sub
 

Chris24

XLDnaute Impliqué
Re : Comment sommer sous VBA

Re

Tu peux imbriquer tes deux conditions en reprenant le code de thebenoit59.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
With Sheets(1)
For i = 1 To .[c65000].End(xlUp).Row
If .Cells(i, 3).Value = "PERM" Then
If .Cells(i, "i") = 0 Then MsgBox "Honoraire à 0 pour le candidat, ligne " & i: Cancel = True: Exit Sub
If .Cells(i, "x") = "" Then MsgBox "Mentionner Facturé/Potentiel pour le candidat, ligne " & i: Cancel = True: Exit Sub
If WorksheetFunction.Sum(.Range(.Cells(i, "y"), .Cells(i, "aj"))) = 0 Then MsgBox "Pas de donnée sur le détail par mois pour le candidat, ligne " & i: Cancel = True: Exit Sub

ElseIf .Cells(j, 3).Value = "TT" Then
If .Cells(j, "p") = 0 Then MsgBox "Honoraire à 0 pour le candidat, ligne " & i: Cancel = True: Exit Sub
If .Cells(j, "q") = 0 Then MsgBox "Honoraire à 0 pour le candidat, ligne " & i: Cancel = True: Exit Sub
If .Cells(j, "x") = "" Then MsgBox "Mentionner Facturé/Potentiel pour le candidat, ligne " & i: Cancel = True: Exit Sub
If WorksheetFunction.Sum(.Range(.Cells(j, "y"), .Cells(j, "aj"))) = 0 Then MsgBox "Pas de donnée sur le détail par mois pour le candidat, ligne " & i: Cancel = True: Exit Sub
End If
Next i
End With
End Sub


Question subsidiaire , je ne trouve pas comment faire une réponse avec le texte encadré:confused:
 

Nonno

XLDnaute Nouveau
Re : Comment sommer sous VBA

Merci Benoit et Chris ca marche !!

J'ai rajouté une petite dernière chose, c'est le fait de colorier automatiquement les cases en noires de la colonne P et Q lorsque la cellule et en PERM et inversement lorsque c'est en TT. voici le code :

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

With Sheets(1)
For i = 1 To .[c65000].End(xlUp).Row
If .Cells(i, 3).Value = "PERM" Then
    Cells(i, "p").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Cells(i, "q").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
If .Cells(i, "i") = 0 Then MsgBox "Honoraire à 0 pour le candidat, ligne " & i: Cancel = True: Exit Sub
If .Cells(i, "x") = "" Then MsgBox "Mentionner Facturé/Potentiel pour le candidat, ligne " & i: Cancel = True: Exit Sub
If WorksheetFunction.Sum(.Range(.Cells(i, "y"), .Cells(i, "aj"))) = 0 Then MsgBox "Pas de donnée sur le détail par mois pour le candidat, ligne " & i: Cancel = True: Exit Sub
End If
Next i
End With

With Sheets(1)
For j = 1 To .[c65000].End(xlUp).Row
If .Cells(j, 3).Value = "TT" Then
    Cells(j, "g").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Cells(j, "h").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
        Cells(j, "i").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
If .Cells(j, "p") = 0 Then MsgBox "Coefficient à 0 pour le candidat, ligne " & j: Cancel = True: Exit Sub
If .Cells(j, "q") = 0 Then MsgBox "Taux de MB à 0 pour le candidat, ligne " & j: Cancel = True: Exit Sub
If .Cells(j, "x") = "" Then MsgBox "Mentionner Facturé/Potentiel pour le candidat, ligne " & j: Cancel = True: Exit Sub
If WorksheetFunction.Sum(.Range(.Cells(j, "y"), .Cells(j, "aj"))) = 0 Then MsgBox "Pas de donnée sur le détail par mois pour le candidat, ligne " & j: Cancel = True: Exit Sub
End If
Next j
End With

End Sub

Cependant je voudrais que les cases noires se suppriment si la personne décide de supprimer le PERM ou TT, lorsque j'essaie elle reste ....

Merci d'avance

Nono
 

Discussions similaires

Statistiques des forums

Discussions
312 184
Messages
2 086 007
Membres
103 088
dernier inscrit
Psodam