Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Je souhaiterai avoir un bout de code qui me met un message d'erreur si dans une des cellules des colonnes Y à AJ il y a écrit quelque chose, il faut que la colonne C soit rempli. Une message box qui dirait "erreur vous n'avez pas rempli la colonne C" ...
Est-ce vous pouvez m'aider svp ?
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 24 Or Target.Column < 37 Then
Application.EnableEvents = False
If Cells(Target.Row, 3) = "" Then MsgBox "erreur vous n'avez pas rempli la colonne C", vbOKOnly + vbExclamation
Application.EnableEvents = True
End If
End Sub
Oui c'est possible, mais il faut repenser le code.
A insérer dans un module de code standard (Module1):
Code:
Sub Fermer()
Dim Cel As Range
On Error GoTo Fin
With Feuil1 'Adapter le nom de la feuille
For Each Cel In .Range("Y1:AJ" & Rows.Count).SpecialCells(xlCellTypeConstants)
If .Cells("C" & Cel.Row) = "" Then MsgBox "erreur vous n'avez pas rempli la colonne C", vbOKOnly + vbExclamation
Next
End With
Fin:
End Sub
A insérer dans ThisWorkBook:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call Fermer
End Sub
Les cellules Y7:J... ne contiendraient-elles pas des formules, par hasard? Auquel cas, il te faudrait remplacer xlCellTypeConstants par xlCellTypeFormulas.
Sinon, peux-tu joindre une copie de ton fichier, sans données confidentielles bien sûr?
Non ce sont des chiffres que l'on écrit manuellement...
J'ai écris ca sur mon workbook mais la fin ne marche pas il me dit
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
If .Cells(i, "j") = 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
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
Dim Cel As Range
With Sheets(1)
For Each Cel In Range("Y7:AJ" & Rows.Count).SpecialCells(xlCellTypeConstants)
If .Cells("C" & Cel.Row) = "" Then MsgBox "Indiquez PERM/TT colonne C", vbOKOnly + vbExclamation
End If
Next
End With
End Sub
End if sans if en me surlignant le dernier End If du code. Pourtant le If est juste au dessus...Je ne vois pas ce qui cloche...
With Sheets(1)
For k = 1 To .[aj65000].End(x1Up).Row
If .Cells(k, 25).Value = .SpecialCells(xlCellTypeConstants) Then
If .Cells(k, "c") = 0 Then MsgBox "Indiquez PERM/TT colonne C": Cancel = True: Exit Sub
End If
Next k
End With
Ca me met "erreur définir par l'application ou par l'objet" pour la ligne
Non ce sont des chiffres que l'on écrit manuellement...
J'ai écris ca sur mon workbook mais la fin ne marche pas il me dit
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
[CODE]With Sheets(1)
For i = 1 To .[c65000].End(xlUp).Row
If .Cells(i, 3).Value = "PERM" Then
If .Cells(i, "j") = 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
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
Dim Cel As Range
With Sheets(1)
For Each Cel In Range("Y7:AJ" & Rows.Count).SpecialCells(xlCellTypeConstants)
If .Cells("C" & Cel.Row) = "" Then MsgBox "Indiquez PERM/TT colonne C", vbOKOnly + vbExclamation
End If
Next
End With
End Sub
End if sans if en me surlignant le dernier End If du code. Pourtant le If est juste au dessus...Je ne vois pas ce qui cloche...
Le dernier End If est de trop puisque la condition If Then... précédente est écrite sur une seule ligne:
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
If .Cells(i, "j") = 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
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
Dim Cel As Range
With Sheets(1)
For Each Cel In Range("Y7:AJ" & Rows.Count).SpecialCells(xlCellTypeConstants)
If .Cells("C" & Cel.Row) = "" Then MsgBox "Indiquez PERM/TT colonne C", vbOKOnly + vbExclamation
End If '<--- End If en trop
Next
End With
With Sheets(1)
For k = 1 To .[aj65000].End(x1Up).Row
If .Cells(k, 25).Value = .SpecialCells(xlCellTypeConstants) Then
If .Cells(k, "c") = 0 Then MsgBox "Indiquez PERM/TT colonne C": Cancel = True: Exit Sub
End If
Next k
End With
Ca me met "erreur définir par l'application ou par l'objet" pour la ligne
Ok ca marche merci
Lorsque j'essaie d'enregistrer la macro j'ai un message d'erreur :
" Vous ne pouvez pas exécuter cette commande sur une feuille protégée. Pour pouvoir l'exécuter vous devez tout d'abord ôter la protection de la feuille "
Cependant, avant de rajouter ce dernier petit de code je peux enregistrer sans pb.. pourquoi tout d'un coup ca ne marche plus ?
Du coup j'ai enlevé la protection de la feuille pour l'enregistrer et ca me met un autre message d'erreur 'appel de procédure incorrect" pour la ligne
Code:
If .Cells("C" & Cel.Row) = "" Then MsgBox "Indiquez PERM/TT colonne C", vbOKOnly + vbExclamation
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.