anomalie numérique

sri75

XLDnaute Occasionnel
Bonjour, je recois des fichiers excel dans lesquels des données numériques sont saisies, mais suite à des fautes de frappe d'opérateurs, mes données numériques ne le sont plus di fait d'insertions de points, d'espaces ou de mauvaise saisie. J'ai meme des opérateurs qui saissisent des , comme séparateurs de milliers !

J'ai donc à verifier la présence de points, d'espaces et la présence de trois chiffres après la virgule comme indicateur d'erreur de saisie, et les cellules ou les données sont alignées à gauche.

j'ai testé la commande if not isnuméric(...) then

mais ça ne gère pas tous les cas loin de là.

j'ai joint un fichier où les lignes en anomalie sont de couleur toutes les cellules sont à vérifier.

Merci d'avance pour votre aide précieuse car j'y pers un peu mon latin et mon vba excel
 

Pièces jointes

  • TEST3.xls
    48.5 KB · Affichages: 62
  • TEST3.xls
    48.5 KB · Affichages: 102
  • TEST3.xls
    48.5 KB · Affichages: 65

jeanphichec

XLDnaute Nouveau
Re : anomalie numérique

Salut Sri75,

Après un bref regard sur ton tableur, j'ai réussi à avoir quelque chose de plus cohérent en transformant toutes les colonnes en "convert to number" et ensuite, tout mettre au même format par exemple. C'est peut être un premier pas....

Bien à toi,

Jeanphiichec
 

Pièces jointes

  • TEST4.zip
    13 KB · Affichages: 30
  • TEST4.zip
    13 KB · Affichages: 30
  • TEST4.zip
    13 KB · Affichages: 31

jeanphichec

XLDnaute Nouveau
Re : anomalie numérique

Sri 75,

Je pense que cela doit être faisable, mais en vba, je laisse la main... ;)
Par contre, c'est assez simple de faire tout en une fois; la procédure:

In an empty cell, enter the number 1.
Select the cell, and on the Edit menu, click Copy.
Select the range of numbers stored as text you want to convert.
On the Edit menu, click Paste Special.
Under Operation, click Multiply.
Click OK.
Delete the content of the cell entered in the first step.

En français dans le texte:
simplement mettre un 1 dans une cellule vide, ensuite copier la cellule, et sélectionner tout le tableau, faire copier spécial, sélectionner multiplier et faire ok. Et tout fonctionne!

Bien à toi,

Jean-Phiichec

PS: il serait peut être plus simple de donner aux encodeurs un fichier déjà formaté dans lequel ils ne pourraient pas mettre n'importe quelles chiffres....
 

Modeste

XLDnaute Barbatruc
Re : anomalie numérique

Bonjour à tout la monde,

Pour jeanphichec: les deux idées sont excellentes, mais la seconde ne me semble pas régler tous les problèmes: il reste 14 données non-numériques (dont les "NEANT", évidemment!)

Modeste
 

abcd

XLDnaute Barbatruc
Re : anomalie numérique

Bonjour à tous,

Cela ne me semble pas trop compliqué à résoudre.
Le problème est qu'il me semble aussi que tu travailles avec la , (virgule) comme séparateur décimal, alors que je travaille avec le . (point).

De là j'ai un ensemble de valeurs (la ligne 7 par exemple) qui sont colorées, alors que chez moi ces valeurs sont normales.
A moins que D7 (44.715 affiché comme 44.72) ne doive être interprêté comme 44715.

Si aucune méthode valable n'est proposée, pourrais-tu remettre ton fichier en pièce jointe avec à droite du tableau les résultats que tu souhaites obtenir
Ce sera plus facile pour comprendre

abcd
 

jeanphichec

XLDnaute Nouveau
Re : anomalie numérique

Bonjour Modeste (de mon petit coin de Belgique aussi.... ;)), Sri 75 et abcd,


J'ai fait une petite macro pour info, avec mes moyens... ;) et effectivement, il y a encore les Neants, mais cela devrait être résolu assez facilement....

Bonne soirée à tous!

Jeanphichec
 

Pièces jointes

  • TEST3.1.zip
    14.2 KB · Affichages: 31

sri75

XLDnaute Occasionnel
Re : anomalie numérique

Merci à tous, le NEANT n'est pas un problème.

par contre je n'arrive pas à telecharger le fichier de jeanphichec, j'ai un message comme quoi le zip n'est pas valide.

je me suis apercu que j'avais laissé des vieilles macro dans le fichier n'hésite pas à les écraser pour alléger le fichier pour passer en dessous des 50ko fatidiques.

merci de resposter le fichier.
 

jeanphichec

XLDnaute Nouveau
Re : anomalie numérique

Salut SRi75,

J'arrive à le télécharger sans problème, mais je te l'attache à nouveau, pour la macro, tu peux l'améliorer en mettant tout les chiffres alignés par exemple etc...

Bonne soirée à tous!

JeanPHiichec
 

Pièces jointes

  • TEST3.2.zip
    14.8 KB · Affichages: 19

ROGER2327

XLDnaute Barbatruc
Re : anomalie numérique

Bonsoir à tous
Pour savoir ce qu'il faut faire exactement il serait bon d'avoir d'une part les données avant traitement (ce qu'on a), d'autre part les mêmes données traitées (ce qu'on a pas).
Voici, en attendant mieux, une base de travail avec ce code :
Code:
Sub nettoyage()
Dim oCel, s, i As Long
    For Each oCel In Selection
        s = ""
        For i = 1 To Len(CStr(oCel))
            Select Case Mid$(CStr(oCel), i, 1)
            Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
                s = s & Mid$(CStr(oCel), i, 1)
            End Select
        Next i
        If s <> "" Then oCel.Value = CDbl(s)
    Next oCel
End Sub
Sélectionnez l'ensemble des cellules à traiter et exécutez "nettoyage".​
ROGER2327
 

Pièces jointes

  • Anomalie_numérique.xls
    21 KB · Affichages: 51
Dernière édition:

sri75

XLDnaute Occasionnel
Re : anomalie numérique

Merci à tous !

comme il m'a été demandé j'ai joint un fichier avec les données brutes ( couleur ) et les données telles qu'elles devraient être ( noir ).

Comme je l'expliquait dans le premier post toutes ces anomalies viennent de la façon dont les données ont été saisies dans le fichier excel d'origine.

"J'ai donc à verifier la présence de points, d'espaces et la présence de trois chiffres après la virgule comme indicateur d'erreur de saisie, et les cellules ou les données sont alignées à gauche."



Merci pour votre aide
 

Pièces jointes

  • comparaison.xls
    27 KB · Affichages: 61
  • comparaison.xls
    27 KB · Affichages: 60
  • comparaison.xls
    27 KB · Affichages: 63
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : anomalie numérique

Re-Bonjour à tous, de Belgique, de France et du monde,

Je me suis permis de récupérer l'essentiel du code proposé par ROGER2327, qui fonctionnait à merveille, mais comme les "vraies décimales" n'en étaient plus (des décimales, je veux dire !), j'ai donc "bricolé" un système pour les conserver et ajouté 2 lignes qui transforment les "NEANT" en 0.
Ca vaut ce que ça vaut (et j'espère que ROGER2327 ne me réclamera pas de droits d'auteur:eek:)

Pour ce que j'y ai ajouté, je suis ouvert à la critique (ça à l'air de fonctionner, mais il y a sans doute moyen de faire mieux)

Sub nettoyage()
Dim oCel, s, i As Long, flag As Boolean
For Each oCel In Selection
If oCel.Value = "NEANT" Then
oCel.Value = 0
End If
flag = False
s = ""
For i = Len(CStr(oCel)) To 1 Step -1 'lire les données de droite à gauche
Select Case Mid$(CStr(oCel), i, 1)
Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
s = s & Mid$(CStr(oCel), i, 1)
Case ","
If Not flag Then
s = s & Mid$(CStr(oCel), i, 1)
flag = True 'conserve la virgule la plus à droite
End If
End Select
Next i
If s <> "" Then
s = StrReverse(s)
oCel.Value = CDbl(s)
End If
Next oCel
End Sub​
Modeste
 

ROGER2327

XLDnaute Barbatruc
Re : anomalie numérique

Bonsoir à tous.
À sri75 :
Je ne comprends pas vos explications ; pouvez-vous préciser pourquoi 553.726,21 doit devenir 5537261 ?
De même 44.98 --> 4498 et 96,473,29 --> 964739 ?
Quel est le rapport avec ce que vous dites ?
J'ai donc à verifier la présence de points, d'espaces et la présence de trois chiffres après la virgule comme indicateur d'erreur de saisie, et les cellules ou les données sont alignées à gauche.
Merci d'avance de clarifier votre demande.​
ROGER2327
 

ROGER2327

XLDnaute Barbatruc
Re : anomalie numérique

Re...
En attendant d'éventuelles précisions, voici un code qui donne (sur ma machine) les résultats escomptés dans le classeur de démonstration de sri75, hors les trois cas signalés précédemment.
Code:
Sub nettoyage()
Dim oCel As Range, s As String, i As Long, tf As Boolean
    For Each oCel In Selection
        tf = False
        s = ""
        For i = 1 To Len(CStr(oCel))
            Select Case Mid$(CStr(oCel), i, 1)
            Case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
                s = s & Mid$(CStr(oCel), i, 1)
            Case ".", ","
                If tf Then Exit For
                tf = True
                If Len(Mid$(CStr(oCel), i)) > 4 Then
                    If Not (Mid$(CStr(oCel), i + 4, 1) Like [",."] Or Len(Mid$(CStr(oCel), i + 1, 3)) = 3) Then Exit For
                ElseIf Len(Mid$(CStr(oCel), i)) <> 4 Then
                    Exit For
                End If
            End Select
        Next i
        If s <> "" Then oCel.Value = s
    Next oCel
End Sub
Vos avis m'intéressent...​
Bonne nuit !
ROGER2327
 

Modeste

XLDnaute Barbatruc
Re : anomalie numérique

Bonjour à tous,

Effectivement, ROGER2327 a "épluché" le fichier de sri75 avec plus d'attention que moi et relevé ce qui ressemble à des incohérences dans les "données après traitement".
Ma proposition conservait les décimales, tandis que la dernière macro de ROGER2327 répond aux attentes formulées.

Bonne journée à tous,

Modeste
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 866
Membres
103 979
dernier inscrit
imed