Vérifier dans une colonne si les valeurs sont triées

stitchbouck Messages postés 116 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 17 avril 2024 - 22 janv. 2018 à 17:29
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 23 janv. 2018 à 17:39
Bonjour,

j'ai un une feuille excel sur laquelle j'inscris des valeurs en ligne. Via VBA, chaque valeurs qui composent ces lignes sont recopiées dans plusieurs feuilles. Pour faire simple, je fais le tour d'un bâtiment en relevant différent niveau selon l'ordre de mon tour, puis je recopie mes données telles quelles. Ensuite la macro recopie ces données dans les feuilles correspondant aux types de produits relevés. ça classe les infos donc.

A présent, j'ai besoin de palier aux erreurs de frappe : je veux vérifier sur les feuilles de compteur que les valeurs sont naturellement en ordre croissant. en effet, un compteur ne va jamais en arrière, si c'est le cas, alors il y a erreur de saisie. Il n'y a donc pas de tri à faire, "simplement" (hum) une vérification

Un msgbox doit envoyer ensuite quelle cellule ou ligne contient une valeur inférieur à la précédente.

Avez vous une idée ? les lignes 5 et inférieurs sont du texte, il considère cela comme inférieur et renvoie un message. de plus, il compare la première ligne vide aussi, ce qui n'est pas bon non plus...

Help ?

     
Sub test()
' MsgBox d'erreur compteur
For i = 6 To Range("a65536").End(xlUp).Row
If Sheets("Compteur eau gaz").Cells(i, 2) < Sheets("Compteur eau gaz").Cells(i - 1, 2).Value Then
MsgBox ("ligne " & i & " erreur compteur inférieur")
End If
Next
End Sub

3 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 janv. 2018 à 18:25
Bonjour
La "vérification" que tu veux faire-là serait plus gourmande en temps d'exécution que le tri lui-même !
Autant donc trier systématiquement : cela ira plus vite.
0
stitchbouck Messages postés 116 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 17 avril 2024
23 janv. 2018 à 09:04
Tu as raison mais le problème est que je ne dois pas trier : ces relevés sont hebdomadaires, chaque ligne correspond à une semaine précise. Il y aura donc 52 lignes en tout d'ici la fin de l'année. Là, ce qu'il me manque et que je ne trouve pas encore, c'est de ne pas lui faire chercher sur la première ligne vide et/ou la ligne 5 qui contient les en-têtes des colonnes.
0
stitchbouck Messages postés 116 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 17 avril 2024
23 janv. 2018 à 11:39
Bon, j'ai trouvé une solution... elle est moche et barbare, mais elle fonctionne !!

Sub erreur_relevé()
' MsgBox d'erreur compteur eau gaz
For i = 7 To Range("A65536").End(xlUp).Row
If Sheets("Compteur eau gaz").Cells(i, 2) <> "" And Sheets("Compteur eau gaz").Cells(i, 2) < Sheets("Compteur eau gaz").Cells(i - 1, 2).Value Then
MsgBox ("ligne " & i & Chr(10) & "Erreur : relevé 'Compteur EAU GAZ' inférieur au précédent." & Chr(10) & "A vérifier et modifier aussi sur feuille 'Ordre de relevé'.")
End If
End sub
Next


Ma première ligne est la 6 et il ne va plus chercher la 5 :) il ne m'embête plus avec la 1ère vide qu'il trouve non plus.

Et comme je ne m'y connais pas bien ben... ce code est répété autant de fois qu'il y a de colonne sur mes 2 feuilles soit un total de 23 colonnes, donc 23 fois le même texte de msgbox...
J'ai bien essayé un timide GoTo message pour ne faire qu'un seul message mais il ne renvoie qu'une fois le texte, pour la 1ère ligne d'erreur, peu importe le nombre d'erreur.

Si kkun sait comment simplifier et/ou nettoyer ce code, je suis preneur :)

en attendant, ça fonctionne, c'est le principal.
Merci !
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
23 janv. 2018 à 17:39
Bonjour !
Si je comprends bien tu as 23 relevés de compteur à faire chaque semaine
Pourquoi ne fais-tu pas une double boucle qui inclut la ligne et la colonne dans la Msgbox ?
Ainsi si tu as une erreur au relevé n° 4 à la ligne 8 par exemple cette erreur ne se répercute pas sur les relevés 1 à 3 et 5 à 23 !
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
23 janv. 2018 à 14:53
Bonjour,

Plutôt que de mettre systématiquement un MsgBox à chaque erreur, emmagasine-les numéros de lignes dans une chaîne de caractères.

À la fin, si ta chaîne est vide, tu passes droit sinon tu affiches la chaîne dans un MsgBox.
0
Rejoignez-nous