Test SI EXISTE sur de grands nombres

CPOusaz Messages postés 3 Date d'inscription   Statut Membre Dernière intervention   -  
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Question d'école… :-P

voilà mon PB.

en colone A
1 100571906500021188112
2 100571910300020105501
3 100571911900020027301
4 100571911900078518701
5 100571915300020133701
6 100571918500098813501
7 100571932700062725901
8 100571955200020047401
9 100961800200074460501


Ma valeur recherchée en C1(exemple): 100571911900020027301

Ma formule en E1: =NB.SI($A$1:$A$9;C2)

me renvoie : 1 =VRAI (existe)

par contre me renvoie aussi VRAI avec 100571911900020027302 … (elle n'est pas dans la liste)
1005719119000201xxxxx, peu importe le X la réponse est "VRAI"

Donc je suppose un PB au niveau Grands Nombres… Comment déclarer cela dans XLS ou autre formule?
A voir également:

4 réponses

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Bonjour à tous les trois

Comme dit eric, reste la solution macro
https://mon-partage.fr/f/xamIBHyw/

Cdlmnt
1
CPOusaz Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
Je viens de tester cette solution de macro/module qui fonctionne très bien pour 2, 3 cellules et je me garde le module sous le coude ;-)
Merci CCM81

Mais quand j'essaye de l'appliquer à plusieurs cellules (>100) l'explose le processeur…
sur 100 cellules ça prend 5min, et plus de cellules ca plante Excel.

Une autre idée?

en colonne A (env. 12000 nombres)
1 100571906500021188112
2 100571910300020105501
3 100571911900020027301
4 100571911900078518701
5 100571915300020133701
6 100571918500098813501
7 100571932700062725901
8 100571955200020047401
9 100961800200074460501


en C (env. 3400 nombres)
1 100571911900020027301
2 100571911900020027371
3 40978000221377773Y001
4 305681991900034300201
5 305681991300012326701
6 302581000008016398076
7 302581000008016235200
8 302581000008016177606
9 100571915300020133701


E
1: =compte(C1;A:A)
2: =compte(C2;A:A)
3: =compte(C3;A:A)

3209: =compte(C3209;A:A)
nC_dernier: 2: =compte(nC_Dernier;A:A)
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Compte(nC_Dernier;A:A)
Ne passe pas la colonne entiere mais une plage A2:A3000 par exemple
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

excel ne garde une précision que sur 15 chiffres.
Au-delà tu es obliger de travailler avec des chaines. Met ta colonne au format texte.
eric
0
CPOusaz Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Eric,

J'ai oublié de préciser que toute ma feuille était déjà en texte…
et je viens de refaire le test pour contrôle. c'est idem.

- sélection feuille -> format texte
- Copie mes 9 valeurs en A, ma formule, mon nombre recherché (calcul = VRAI)
- changement de mon nombre (x+1) résultat VRAI…

j'ai pensé éclater mon nombre en 2
1x 11 caractères et 1x 10 caractères et faire une opération booléenne (AND) des 2 résultat…mais bon pas pratique… ???
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonjour,

- changement de mon nombre (x+1) résultat VRAI
Tu ne peux pas faire ça.
Pour faire l'addition excel doit convertir ton nombre en numérique et tous les chiffres au-delà du 15e deviennent des 0.
Pas d'autre possibilité que de le couper en 2 (ou bien de faire une macro, mais pour si peu...)
eric
0
Vaucluse Messages postés 26496 Date d'inscription   Statut Contributeur Dernière intervention   6 438
 
Bonjour
et salut Eric
à priori ça ne fonctionne qu'en format texte avec des valeurs entrées avec l'apostrophe(autant pour la base de données que pour la valeur cherchée)
mais dans tous les cas, ça ne pourra pas servir pour des calculs ultérieurs, les 4 derniers chiffres étant des 0 en cas de numérisation
crdlmnt
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Re,

si tu n'as besoin que de savoir si la valeur existe dans la liste ça peut être considérablement plus rapide et moins gourmand :
Function exist(valeur As String, plage As Range) As Boolean
    Dim c As Range
    Set c = plage.Find(valeur, , xlValues, xlWhole)
    exist = Not c Is Nothing
End Function

https://www.cjoint.com/c/IGfvin65dRz

Et si tu as besoin du nombre tu pourrais faire en 2 temps.
Détecter ceux qui existent, appliquer la fonction de ccm uniquement à ceux-là.
Je ne suivrai plus ce post, départ pour la plage (pas excel, celle avec du sable) demain ;-)
eric
0