• Initiateur de la discussion Initiateur de la discussion sri75
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

sri75

XLDnaute Occasionnel
bonjour , je cherche à verifier le contenu de cellules via une macro.

je voudrais mettre en anomalie ma celulle si ce qu'elle contient à :

3 chiffres après la virgule ex: 102,123

2 virgules ex: 102,123,10

Il s'agit d'une macro recherchant les erreurs de saisie.

j'ai intégré comme test la présence de points ( 102.123 ) de vides ( 102 123) et de format non numérique "if not isnumeric".

Grace au forum j'avais obtenu une macro rectifiant une grande partie des erreurs mais le risque est trop grand, de rectifier d'office, il vaut mieux pointer les éventuelles anomalies.

merci à tous pour vos conseils.
 
Re : gestion anomalie

Bonjour, un ptit début, il resteras à bouclé sur toutes les cellules concernées

Cordialement Gilbert

Code:
Sub test()
With Sheets("Feuil1")
Dim Val As Variant, Nval As Variant
Nval = Trim(.Range("A1").Text)
For j = 1 To Len(.Range("a1"))
                Val = Mid(Nval, j)
                If Left(Val, 1) = "." Or Left(Val, 1) = "," Or Left(Val, 1) = " "  Then Exit For
                Next
If Len(.Range("a1")) - j > 2 Then MsgBox "Erreur de saisie"
End With
End Sub

ou alors
Code:
Sub test()
With Sheets("Feuil1")
Dim Val As Variant, Nval As Variant, Varep As String
Nval = Trim(.Range("A1").Text)
For j = 1 To Len(.Range("a1"))
                Val = Mid(Nval, j)
                If Left(Val, 1) = "." Or Left(Val, 1) = "." Or Left(Val, 1) = " "  Then Exit For
                Next
If Len(.Range("a1")) - j > 2 Then
Varep = Application.InputBox("Veuilez mettre un valeur correcte SVP") 'MsgBox "Erreur de saisie"
.Range("A1").Value = Varep
End If
End With
End Sub
 
Dernière édition:
Re : gestion anomalie

Merci , la première version a l'air de bien marcher.

ce qui me gène c'est le range("a1") car je dois tester une plage ex a3:k11 .

je serais toujours dans les colonnes k l m n o p q et le nombre de lignes est fluctuant.

Effectivement ce qui me manque c'est la façon de fair boucler la macro sur les cellules concernées.

Merci de votre aide
 
Dernière édition:
Re : gestion anomalie

Code:
Sub test()
Dim Val As Variant, Nval As Variant, Varep As String, C As Range, Plage As Object, Fin As Integer
Set Plage = Worksheets("Feuil1")
With Plage
Fin = .Range("k" & .Rows.Count).End(xlUp).Row
For Each C In Plage.Range("K1:Q" & Fin)
If C.Value = vbNullString Then GoTo suite
Nval = Trim(C.Text)
For j = 1 To Len(C)
                Val = Mid(Nval, j)
                If Left(Val, 1) = "." Or Left(Val, 1) = "," Or Left(Val, 1) = ";" Or Left(Val, 1) = " " Then Exit For
                Next j
If Len(C) - j > 2 Then
Varep = Application.InputBox("Veuilez mettre un valeur correcte SVP") 'MsgBox "Erreur de saisie"
C.Select
ActiveCell.Value = Varep
End If
suite:
Next

End With
End Sub
RE bonsoir, a tester Gilbert
 
Re : gestion anomalie

ca tourne très bien à une exception semble t'il si mon chiffre est ainsi 123.45

si il trouve un point avant deux chiffres il zappe l'anomalie.

voila un petit fichier ce qui est en noir est ok sinon c'est de l'anomalie.


Merci d'avance.
 

Pièces jointes

Re : gestion anomalie

Bonsoir, dans mon code, si je rencontre 1. 1 " " ou 1 , avant 2 chiffres après la virgule ou le point, l' InpuBox te demande de corrigé l'erreur, si tu souhaites une autre action qu'une correction
la correction automatique de l'erreur par exemple dis moi ce qu'il faut garder, notamement quan le cas suivant se presente "123.12,54"
ou remplacer les points en virgule, et afficher au format numérique, zappé les 0 etc.
on peut faire mais il faut en savoir un peu plus sur la finalité de l'opération.

Gilbert
ps C.Select a mettre au dessus de Varep de façon à ce que la cellule soit sélectionnée avant l'InptBox
 
Re : gestion anomalie

en fait je ne cherche qu'a identifier les anomalies et non a les corriger.

Donc il faut pointer : tout ce qui contient :
un point,
un espace ,
deux virgules dans un chiffre
et trois chiffres après la virgule

en gros toute saisie qui peut mal être interprétée par excel.

si j'ai 123.12,54 la bonne saisie serait 12312,54
si j'ai 123 12,54 la bonne saisie serait 12312,54
si j'ai 123,12,54 la bonne saisie serait 12312,54
si j'ai 123,125 la bonne saisie serait 123125

Mon but est de mettre en "anomalie" tout ce qui peut sembler être une erreur de saisie, à moi ensuite de vérifier manuellement et de faire mon choix.

Dans ma macro d'origine toute cellule douteuse fait mettre toute la ligne en rouge, ce qui me permet d'identifier le problème rapidement.

Mon fichier contient 2000 lignes !

Bonne soirée.
 
Re : gestion anomalie

Salut, ci joint ton fichier, la macro met les cellules qui contiennent une anomalie en rouge, pour le nombre de ligne pas de problèmes le code s'adapte, reste à peaufiner, pour gérer les cellules contenant du texte ou n'ayant pas de virgule.
commentaire dans le code
index des couleurs en feuille 2

si problème revient

Gilbert
 

Pièces jointes

Re : gestion anomalie

Effectivement ca marche bien, reste l'éternel problème des données avec trois chiffres après le virgule.

Peut être tout simplement en lancant ensuite une deuxième macro ne gérant que ce problème.

Une idée pour ce cas là ?

Merci beaucoup pour ton aide précieuse, et bone week end.
 
Re : gestion anomalie

Salut, çà marche aussi avec les 3 chiffres après la virgule, une petite erreur, non pas de traitement, mais d'attribution de couleur dans ce cas, je lui ai attribué la couleur blanche, je m'en était servi pour remettre la feuille en l'état qu'elle était quand tu as posté le fichier donc une petite correction comme indiqué ci-dessous et çà iras Désolé😱

If Left(Right(C, 3), 1) = "," Then ' je commence par isoler les bonnes virgules
Nval = Left(Nval, Len(C) - 3)
Val = Mid(Nval, J)
Else
C.Interior.ColorIndex = 9 'si c'est 1 autre cararactere ou plus de trois chiffres aprés la virgule
End If

tu remplaces le 2 actuel (ColorIndex pour le blanc), par le 9 ( ColorIndex pour le Rouge)et çà marchera.

Gilbert
 
Re : gestion anomalie

re bonjour, j'avoue ne plus savoir a quel saint vba me vouer; j'ai peut être mal adpaté le code car avec la nouvelle version j'ai beaucoup plus de rouge que je devrais en avoir.

Désolé de te solliciter encore, voila mon fichier en reel avec en couleur les anomalies.

Merci de ton aide.

Stephane
 

Pièces jointes

Re : gestion anomalie

Bonjour, doit on traiter les cellules ne contenant pas de chiffres aprés la virgule, et les cellules contenant du texte (NEANT), et que fait on des cellules vides ou contenant des zéros.
j'attends ta réponse avant de reprendre le code.

Gilbert
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour