XL 2010 Msg box d'erreur

Nonno

XLDnaute Nouveau
Bonjour,

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 ?

Merci
Cdt
 

Papou-net

XLDnaute Barbatruc
Re : Msg box d'erreur

Bonjour Nonno,

Dans le module de ta feuille de travail:

Code:
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
A +

Cordialement.
 

Papou-net

XLDnaute Barbatruc
Re : Msg box d'erreur

RE:

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
Voir exemple en PJ.

Cordialement.
 

Pièces jointes

  • Exemple Nonno.xlsm
    13.4 KB · Affichages: 27
Dernière édition:

Nonno

XLDnaute Nouveau
Re : Msg box d'erreur

Merci beaucoup ! Le fichier ne s'ouvre pas...
Par contre ca commence à partir de la ligne 7 et lorsque j'ai modifié ca ne marche pas il y a un bug ...
Code:
For Each Cel In .Range("Y7:AJ65500" & Rows.Count).SpecialCells(xlCellTypeConstants)
 

Papou-net

XLDnaute Barbatruc
Re : Msg box d'erreur

RE:

Tu as une erreur dans l'adresse de ta plage de cellules:

Code:
For Each Cel In .Range("Y7:AJ" & Rows.Count).SpecialCells(xlCellTypeConstants)
Rows.Count définissant le nombre de lignes d'une feuille, il ne faut pas mettre 65500 après AJ.

A +

Cordialement.
 

Nonno

XLDnaute Nouveau
Re : Msg box d'erreur

Ah d'accord merci !!
Ca ne marche toujours pas ca me met "argument ou appel de procédure incorrect" pour la ligne
Code:
For Each Cel In .Range("Y7:AJ" & Rows.Count).SpecialCells(xlCellTypeConstants)
 

Papou-net

XLDnaute Barbatruc
Re : Msg box d'erreur

RE:

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?

A +

Cordialement.
 

Nonno

XLDnaute Nouveau
Re : Msg box d'erreur

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...
 

Nonno

XLDnaute Nouveau
Re : Msg box d'erreur

Je ne peux pas écrire cela ?

Code:
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
Code:
 For k = 1 To .[aj65000].End(x1Up).Row
 

Papou-net

XLDnaute Barbatruc
Re : Msg box d'erreur

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

End Sub[/CODE]
Cordialement.
 

Papou-net

XLDnaute Barbatruc
Re : Msg box d'erreur

Je ne peux pas écrire cela ?

Code:
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
Code:
 For k = 1 To .[aj65000].End(x1Up).Row

Erreur de syntaxe dans la ligne For k = 1 To .[aj65000].End(xlUp).Ro.

Remplace le 1 de (xl1Up) par un L minuscule comme ci-dessus.

Cordialement.
 

Nonno

XLDnaute Nouveau
Re : Msg box d'erreur

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

C'est vraiment le
Code:
.cells("C" & Cel.row) = ""
qui est surligné en jaune...

Je suis désolée pour toutes mes questions....
 
Dernière modification par un modérateur:

Papou-net

XLDnaute Barbatruc
Re : Msg box d'erreur

RE:

Peux-tu joindre ton fichier après avoir remplacé les données confidentielles par des données anonymes?

Tu peux l'alléger en supprimant le maximum de données, l'essentiel étant d'avoir la structure du classeur et du code sous les yeux.

A +

Cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
312 413
Messages
2 088 199
Membres
103 765
dernier inscrit
Pi4