Afficher message d'erreur quand une cellule atteint plus de 100%

Lili189

XLDnaute Junior
Bonjour,

je sollicite votre aide pour mon tableau excel.
En effet, j'aimerais qu'avec l'outil de validation données/validation/message d'erreur, je puisse afficher un message d'erreur m'indiquant que mes données sont pas valides et necessites d'être de nouveau saisie.

J'ai 4 lignes avec un secteur et son pourcentage à coté.
Je saisis les pourcentages en manuel, et j'aimerais que lorsque je saisis cela, si jamais je dépasse 100% (car je dois faire le total des 4 secteurs, c'est pour cela que cela peut dépasser 100%) j'ai un message d'erreur me l'indiquant.

Le total des 4 secteurs ne doit pas dépasser 100%. Car en général j'ai 30%,40%,10%,20%

J'ai essayé divers formule sans réussir..

J'ai tenté validation par décimal, quand c'est supérieur à 1, mettre en erreur, mais ca ne marche pas.

Voici en PJ mon fichier excel.

J'espère avoir été claire et que vous allez pouvoir m'éclairer :confused:

merci d'avance.

lili
 

Pièces jointes

  • pourcentagesecteur.xls
    13.5 KB · Affichages: 110
Dernière édition:
G

Guest

Guest
Re : Afficher message d'erreur quand une cellule atteint plus de 100%

Bonjour,

Dans validation des données il faut choisir 'Formule' et mettre la formule suivante dans la zone idoine qui apparaît: =B2<=1

A+
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Afficher message d'erreur quand une cellule atteint plus de 100%

Bonjour le fil, bonjour le forum,

Une solution VBA si ça t'intéresse avec le code ci dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim tot As Double 'déclare la variable tot (TOTal)

'si le changement a lieu ailleurs que dans la plage B2:B5, sort de la procédure
If Application.Intersect(Target, Range("B2:B5")) Is Nothing Then Exit Sub
tot = Application.WorksheetFunction.Sum(Range("B2:B5")) 'définit le total tot
If tot > 1 Then 'condition : si le total est supérieur à 1
    MsgBox "Total supérieur à 100 !" 'message
    Target.ClearContents 'efface la dernière cellule éditée
    Target.Select 'sélectionne ladernière cellule éditée
End If 'fin de la condition
End Sub
Le fichier :
 

Pièces jointes

  • Lili_v01.xls
    23 KB · Affichages: 182

Lili189

XLDnaute Junior
Re : Afficher message d'erreur quand une cellule atteint plus de 100%

merci robert ca fonctionne parfaitement.

j'ai une autre petite question.

j'ai donc pris la méthode à robert et donc ca marche bien, mais j"aimerais ajouter dans microsoft visual basic une autre plage ou ce serait la meme chose => ne pas dépasser 100.

Comment puis je ajouter une nouvelle plage dans ces lignes VB :

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim tot As Double 'déclare la variable tot (TOTal)

--------------Réponse de robert----------------------
'si le changement a lieu ailleurs que dans la plage D8:H9, sort de la procédure
If Application.Intersect(Target, Range("D8:H9")) Is Nothing Then Exit Sub
tot = Application.WorksheetFunction.Sum(Range("D8:H9")) 'définit le total tot
If tot > 1 Then 'condition : si le total est supérieur à 1
MsgBox "Total supérieur à 100 !" 'message
Target.ClearContents 'efface la dernière cellule éditée
Target.Select 'sélectionne ladernière cellule éditée
End If 'fin de la condition
End Sub
-------------------------------------------------------

là j'ai ma plage D8:H9, donc OK. mais j'aimerais aussi D11: D13.

Comment on peut ajouter cela dans ces lignes ?

merci d'avance.

Lili
 
Dernière édition:
G

Guest

Guest
Re : Afficher message d'erreur quand une cellule atteint plus de 100%

Bonjour,

@eddy51, va lire la charte du forum. Répondre pour répondre n'est pas très interessant. Surtout sans bonjour, ni suivi de la discussion.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Afficher message d'erreur quand une cellule atteint plus de 100%

Bonjour le fil, bonjour le forum,

peut-être comme ça :
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim pl1 As Range 'déclare la variable pl1 (Plage 1)
Dim pl2 As Range 'déclare la variable pl2 (Plage 2)
Dim t(1) As Double 'déclare le tableau de deux variables t (Total)

Set pl1 = Range("B2:B5") 'définit la plage pl1
Set pl2 = Range("D11:D13") 'définit la plage pl2
'si le changement a lieu ailleurs que dans la plage B2:B5 ou D11:D13, sort de la procédure
If Application.Intersect(Target, Application.Union(pl1, pl2)) Is Nothing Then Exit Sub
t(0) = Application.WorksheetFunction.Sum(pl1) 'définit le total t(0)
t(1) = Application.WorksheetFunction.Sum(pl2) 'définit le total t(1)
For x = 0 To 1 'boucle sur les deux totaux t(0) et t(1)
    If t(x) > 1 Then 'condition : si le total est supérieur à 1
        MsgBox "Total supérieur à 100 !" 'message
        Target.ClearContents 'efface la dernière cellule éditée
        Target.Select 'sélectionne ladernière cellule éditée
    End If 'fin de la condition
Next x 'prochain total de la boucle
End Sub
 

Raphaële

XLDnaute Nouveau
Bonjour à tous,

J'ai la même problématique que Lili ; j'ai donc suivi les conseils de Robert mais ma macro ne fonctionne pas.

Quand je lui demande de l'exécuter, elle me demande de renseigner son nom.

J'y ai apporté les modifications suivantes :
- je ne mets pas une somme mais une plage de données de plusieurs cellules
- j'ai ajouté une troisième plage de cellules

Voici ce que cela donne :
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet

Dim pl1 As Range 'déclare la variable pl1 (Plage 1)
Dim pl2 As Range 'déclare la variable pl2 (Plage 2)
Dim pl3 As Range 'déclare la variable pl3 (Plage 3)
Dim t(1) As Double 'déclare le tableau de deux variables t (Total)

Set pl1 = Range("E9;G9;I9;K9;M9") 'définit la plage pl1
Set pl2 = Range("E10;G10;I10;K10;M10") 'définit la plage pl2
Set pl3 = Range("E11;G11;I11;K11;M11") 'définit la plage pl3
'si le changement a lieu ailleurs que dans les plages définies, sort de la procédure

If Application.Intersect(Target, Application.Union(pl1, pl2)) Is Nothing Then Exit Sub
t(0) = Application.WorksheetFunction.Sum(pl1) 'définit le total t(0)
t(1) = Application.WorksheetFunction.Sum(pl2) 'définit le total t(1)
t(2) = Application.WorksheetFunction.Sum(pl3) 'définit le total t(2)

For x = 0 To 1 'boucle sur les deux totaux t(0) et t(1)
If t(x) > 1 Then 'condition : si le total est supérieur à 1
MsgBox "Quantity required is over 100%. Please modify." 'message
Target.ClearContents 'efface la dernière cellule éditée
Target.Select 'sélectionne ladernière cellule éditée
End If 'fin de la condition

Next x 'prochain total de la boucle

End Sub

Je ne sais pas ce que j'ai fait de travers pour que cela ne s'exécute pas.

Ah et autre problématique, j'aimerais pouvoir appliquer cette macro sur différents onglets d'un même fichier. Comment puis-je indiquer l'onglet et la plage de cellules, svp?

Pouvez-vous m'aider svp ?

Merci beaucoup
Bonne journée,
Raphaële

PS : première fois sur le forum, ravie de vous rejoindre !
 
Dernière édition:

Discussions similaires

Réponses
10
Affichages
573