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

stitchbouck 30 Messages postés mercredi 12 janvier 2011Date d'inscription 31 janvier 2018 Dernière intervention - 22 janv. 2018 à 17:29 - Dernière réponse : vb95 1442 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 7 février 2018 Dernière intervention
- 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
Afficher la suite 

5 réponses

Répondre au sujet
ucfoutu 18034 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 15 février 2018 Dernière intervention - 22 janv. 2018 à 18:25
0
Utile
1
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.
stitchbouck 30 Messages postés mercredi 12 janvier 2011Date d'inscription 31 janvier 2018 Dernière intervention - 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.
Commenter la réponse de ucfoutu
stitchbouck 30 Messages postés mercredi 12 janvier 2011Date d'inscription 31 janvier 2018 Dernière intervention - 23 janv. 2018 à 11:39
0
Utile
1
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 !
vb95 1442 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 7 février 2018 Dernière intervention - 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 !
Commenter la réponse de stitchbouck
cs_MPi 3861 Messages postés mardi 19 mars 2002Date d'inscription 14 février 2018 Dernière intervention - 23 janv. 2018 à 14:53
0
Utile
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.
Commenter la réponse de cs_MPi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.