Msgbox et comparaison de valeurs

Bonsoir,

Je travaille sur un classeur (composé de plusieurs feuilles) dans lequel j'ai une colonne dont les cellules sont remplies de données numériques, une autre avec les seuils fixés pour ces valeurs, et une dernière indiquant les noms des éléments mesurés.

Je souhaiterais afficher une seule Msgbox à la fin de l'exécution de la macro permettant de récupérer les données, informant l'utilisateur d'éventuels dépassements de seuils, quels éléments ces dépassements concernent, et la quantité mesurée par rapport au seuil fixé. Enfin, dans le cas où aucun dépassement n'aurait eu lieu, une autre Msgbox informant de la conformité globale des valeurs.

Ci-joint, un exemple de fichier, avec une précision assez importante.

Pensez-vous ceci possible ?

Merci d'avance.

17classeur1.xlsx (11.30 Ko)

bonjour matix le forum

bon alors il est tard ok mais elle sont ou les trois feuilles?????????????????????????????

tu n'as que la feuille 1 et dans cette feuille 3 colonnes, et là tu veux faire quoi si dépassement de la colonne E par rapport à C mettre en évidence dans un message les lignes en défaut ??

Ou alors mettre en couleur les lignes dans la feuille???

mais cela n'explique pas ou sont les autres feuilles ?? à te relire

a+

papou

Bonjour

Pour te répondre paritec, je n'ai pas jugé utile dans cet exemple de mettre toutes les pages (une dizaine au total), car elles sont toutes similaires, avec bien entendu des éléments différents.

Je ne souhaite pas colorier les lignes non, "juste" afficher une fenêtre indiquant par exemple:

Dépassement du seuil autorisé pour:

  • bbb: telle mesure au lieu de tel seuil

Est-ce plus clair à présent ?

Bonjour Matix le forum,

excuses moi de t'avoir posé des questions !!

Il est vrai que j'aurais pu, et du deviner, que tu n'avais mis qu'une feuille volontairement !!!!

bon alors voilà si j'ai compris ce que tu voulais

je n'ai pas encore traité les > ou < mais si la première version te convient je modifierai

a+

papou

19matrix-1.xlsm (22.48 Ko)

Merci paritec !

Cependant, quelques remarques. Ce n'est pas exactement ce que je souhaiterais, mais je n'ai peut-être pas encore été assez clair.

Sur la msgbox, je souhaiterais qu'apparaissent uniquement les valeurs mesurées qui dépassent le seuil fixé (en précisant nom de l'élément + valeur mesurée et seuil), dans le cas où on a bien des valeurs qui dépassent les dits seuils. Dans le cas contraire, une msgbox informant que l'ensemble des valeurs sont conformes. Ok ?

re bonjour matix le forum

bah oui tu veux, et c'est bien ce que la macro fait, mais bien sur pour moi le seuil et un maximum à ne pas atteindre

alors peut-être est-ce là l'erreur?

quoi qu'il en soit si tu avais répondu à mes questions plutôt que de me prendre pour un nied, et si tu avais mis un exemple de message à obtenir tu aurais eu ta réponse du premier coup.

Sachant que moi pour le test j'ai mis deux feuilles choses que tu n'as peut-être pas vu.Tu peux naturellement retrouver plus de défauts!!.

Alors voilà une version qui traite aussi les > et les < au cas ou, mais pour moi la comparaison de la colonne 5 par rapport à la colonne 3 je le fais comme il faut si c'est le résultat inverse que tu souhaite il suffit d'inverser la condition et de mettre

sh.Cells(i, 5) < sh.Cells(i, 3)  à la place de  sh.Cells(i, 5) > sh.Cells(i, 3) 

a+

papou

13matrix3.xlsm (23.22 Ko)

Que les choses soient claires paritec, en aucun cas je ne t'ai pris pour un niais. Tu dois très certainement bien mieux connaître la chose que moi, de ce fait je ne permettrais pas ceci.

En effet j'avoue avoir regardé un peu vite ton code précédent, le seul problème qui reste est que les données affichées dans la msgbox y figurent deux fois:

ddd........

eee.......

hhh........

iii........

ddd........

eee......

hhh......

iii.......

Enfin, pourrais-tu m'expliquer ce que fais la ligne de code suivante stp ?

If sh.Cells(i, 5) Like "*" & "<" & "*" Then

De plus, lors de la déclaration des variables, à quoi sert de rajouter un & derrière la variables ? Et le $ ?

Merci pour ton aide.

Salut le forum

Pour les %, &, $ et autres artifices

Référence Cours et Astuces : Déclaration de variables

Mytå

Merci Mytå !

Bonjour Myta Matix le forum

Matix tu ne lis pas mes réponses c'est dommage!!!!!

Les valeurs sont présentent deux fois car j'ai mis deux feuilles et ces deux feuilles sont identiques !!!

change les valeurs et fais un test dans la feuille 1 et dans la feuille 2 , puis tu cliques traiter et tu verras si le résultat est bon ou pas.

Pour le

 If sh.Cells(i, 5) Like "*" & "<" & "*" Then

c'est pour rechercher si dans les cellules, avant de faire la vérification des valeurs si il y a un supèrieur ou inférieur comme tu avais dit qu'il est possible d'avoir dans ton premier post et si il y a un de ces signes la ligne en dessous je le supprime.

pour les & et les $ le & remplace la déclaration de la variable en long et le $ remplace le string

a+

papou

PS: je t'ai rajouté le fichier avec des noms différents entre la feuille 1 et la feuille 2, comme cela tu pourras tester le résultat, et vérifier qu'il n'y a pas de doublon.

20matrix4.xlsm (23.69 Ko)

Ok, autant pour moi... Merci pour tes explications complémentaires.

Maintenant que je pense avoir saisi ton code sur cet exemple de mise en forme relativement simple, puis-je te suggérer une mise en forme plus complexe que je dois traiter de la même façon sur un autre fichier ? Il y a, notamment, des cellules fusionnées, et autres irrégularités dans les données... Je pense du coup qu'il faudrait traiter les données séparément, mais je ne suis pas convaincu. Si tu es partant, je joindrai un fichier.

Encore merci, et désolé pour ma distraction...

Bonjour Matix le forum

Pour moi pas de soucis, simplement STP tu mets des explications précises dans le fichier de ce que tu as et du résultat souhaité et après je regarderai si je sais faire ou pas mais je ne pense pas que ce soit un problème, Excel sait tout faire sauf la vaisselle(hélas)

a+

papou

Ok !

Voici donc le fichier ci-joint. Concernant les explications, les voici, aussi claires que possible (j'espère): j'ai un classeur avec également plusieurs feuilles (je n'en mets ici qu'une seule car leur mise en forme est du même type), et comme tout à l'heure, je souhaite comparer les mesures avec les seuils fixés comme on peut le voir sur le fichier. Les difficultés (du moins pour moi) résident dans le fait que d'une part, certaines cellules vont être fusionnées, et ainsi des éléments vont pouvoir s'étaler sur plusieurs lignes car plusieurs mesures seront faites pour un même élément. D'autre part, il faut noter la présence d'unités après les seuils, et du coup, le contenu de la cellule n'est plus considéré comme un nombre.

Si j'oublie des infos, n'hésite pas à demander !

22classeur2.zip (5.27 Ko)

re matix le forum

bon alors c'est encore pire que le premier coup!!!

Il faut obtenir quoi? c'est trop compliqué pour toi de faire un exemple du résultat souhaité sur une autre feuille?

Tu parles de cellules fusionnées et de plusieurs mesures mais ou ? pourquoi? comment ? avec qui ? quoi par rapport à quoi d'autre? en clair des explications!!! (n'oublie pas que nous on ne connait pas tes fichiers)

j'ai ouvert ton fichier mais franchement , j'ai lu et relu les explications (enfin les trois lignes du post)et je ne vois pas le résultat à en sortir

des que tu m'expliqueras je fais

a+

papou

Ok. Etant donné que dans mon fichier précédent, toutes les données étaient conformes aux seuils, j’en fournis un nouveau avec des dépassements, et quelques petits changements pour mieux comprendre (je l’espère !).

Voici donc des explications complémentaires basées sur ce dernier fichier. Après analyse, j’aurais souhaité obtenir une msgbox avec un texte similaire au suivant :

Importation des données terminée.

  • ddd, mesure 3 : 0,903 unité pour 0,8 unité imposés.

Dans le cas du fichier précédent que j’avais fourni, où aucun dépassement n’était constaté, un message de ce type :

Importation des données terminée.

Aucun dépassement n’a été constaté.

Comme pour le cas que tu avais traité précédemment, je répète qu’il y aura plusieurs feuilles.

Pour répondre à tes questions, il y en effet plusieurs mesures portant sur un même élément, car il s’agit parfois de relèves bien différentes, dans des lieux différents, etc.. Pour les cellules fusionnées, on voit par exemple que sur cette feuille, les colonnes G et H le sont bel et bien ; les lignes 4 à 7 également sur la colonne A, etc.. Je pense que ceci pourrait être une difficulté supplémentaire en vba.

19classeur3.zip (5.34 Ko)

Bonjour matix le forum

1) les explications c'est dans le fichier qu'il faut les mettre car de jongler entre le post et le fichier c'est pas top

2) c'est trop compliqué pour toi de faire un exemple du résultat souhaité sur une autre feuille?

par exemple le résultat souhaité avec le dernier fichier fourni ce serait quoi?

et pas la peine de me faire des blablas sur les cellules fusionnées, pour le moment un résultat de ta demande actuelle me permettra peut-être de comprendre ce qu'il faut comparer car pour le moment ????

Encore une fois pour toi qui sait ce que tu veux c'est facile, mais pas pour moi, alors fais ton exemple de résultat sur le dernier exemple que tu as envoyé et pas dans le post dans le fichier.

a+

Papou

Bonjour à tous,

M@tix est en train d'entamer sérieusement ton capital patience Papou

Vu qu'il galère à se faire comprendre, je me suis permis d'éclaircir la situation

Edit : Et dans ton dernier post m@tix, pour l'élément ddd, c'est la mesure 4 pas la 3 si j'ai bien compris.

Bonsoir !

Désolé de répondre si tard, journée chargée. Je m'excuse une nouvelle fois si je n'ai toujours pas été assez clair, ou d'avoir mal présenté les choses, ce n'était pourtant pas par manque de bonne volonté ! Du coup merci vba-new, tu as saisi à première vue !

J'ai passé une partie de la journée travailler dessus, au final, il en est ressorti quelques résultats, que je devrais pouvoir améliorer je l'espère. Les feuilles composant le classeur étant tellement différentes, j'ai été obligé de faire un algo pour chacune d'entre elles, au lieu de boucler le tout..

Enfin bref, ne vous tracassez plus trop la tête pour moi, je vais essayer de persévérer. Mais je reviendrai sûrement (dans un nouveau topic) prochainement, car déjà d'autres questions affluent...

Bonne soirée à tous les deux, et encore merci pour votre patience.

Bonsoir VbaNew matix le forum

je te remercie VbaNew , non pas impatient mais un peu lassé, sur tous les forums il faut pleurer pour avoir des réponses, seulement pour pouvoirs se rendre utile et aider!!!!

Mais reconnais que c'est pas à toi de faire cet exemple, même si il est parfait et éclairci parfaitement la situation, je ne pense pas que le fichier est pour toi? donc celui qui devrait un peu s'investir c'est l'ami Matix , il peut aussi essayer d'être plus clair Matix non?

C'est pas compliqué de faire ce que tu as fait et cela a le mérite d'être limpide, ton fichier va peut-être ouvrir les yeux de Matix sur la manière de faire un fichier!!!!!

Mettre des cellules fusionnées partout c'est d'un point de vue gestion une connerie monumentale, mais bon excel a cette possibilité!!!!

en tout cas merci pour m'avoir ouvert les yeux, et franchement je ne voyais pas cela comme ça du tout.

a+

papou

Bonjour à tous,

paritec a écrit :

non pas impatient mais un peu lassé, sur tous les forums il faut pleurer pour avoir des réponses

Peut-être pas tous, mais personnellement, ça m'arrive parfois aussi
paritec a écrit :

Mais reconnais que c'est pas à toi de faire cet exemple

Je suis tout à fait d'accord mais en fait j'avais rien de mieux à faire à ce moment là

Et comme m@tix l'a dit lui-même, ce n'était pas par manque de bonne volonté ! Il a essayé mais il n'a pas réussi

Sinon à part ça : m@tix où vas-tu !!! J'avais moi-même monté une petite macro ! A essayer si tu es encore là :

Sub AlerteSeuil()
Dim tblElt, tblLim, tblNumMes, tblMes
Dim bornInf As Long, bornSup&, i&
Dim temp As Double
Dim depass As String, DebutMsg$, Msg$
Dim temoin As Boolean

derlign = Range("g" & Rows.Count).End(xlUp).Row
tblElt = Range("a4:a" & derlign)
tblLim = Range("c4:c" & derlign)
tblNumMes = Range("f4:f" & derlign)
tblMes = Range("g4:g" & derlign)
bornInf = LBound(tblElt): bornSup = UBound(tblElt)

'traitement des cellules fusionnées
For i = bornInf To bornSup
    If tblLim(i, 1) = "" Then tblLim(i, 1) = tblLim(i - 1, 1)
    If tblElt(i, 1) = "" Then tblElt(i, 1) = tblElt(i - 1, 1)
Next i

'on met les limites au format numérique
For i = bornInf To bornSup
    temp = Val(tblLim(i, 1))
    If temp <> 0 Then tblLim(i, 1) = temp
Next i

DebutMsg = "Importation des données terminée." & vbCrLf & vbCrLf
depass = ""
For i = bornInf To bornSup
    If tblMes(i, 1) > tblLim(i, 1) Then
        temoin = True
        depass = depass & "- " & tblElt(i, 1) & ", mesure " & _
        tblNumMes(i, 1) & " : " & tblMes(i, 1) & " unité pour " & _
        tblLim(i, 1) & " unité max imposé" & vbCrLf
    End If
Next i
If temoin Then
    Msg = "Des dépassements ont été constatés sur les éléments suivants : " & vbCrLf
Else
    Msg = "Aucun dépassement n'a été constaté."
End If
MsgBox DebutMsg & Msg & depass, , "Alerte dépassement"
End Sub
Rechercher des sujets similaires à "msgbox comparaison valeurs"