XL 2019 Cellule avec chiffres ou texte ou les 2

loiclass

XLDnaute Occasionnel
Bonjour,
Existe t'il une macro permettant de dire si dans une cellule nous avons saisi uniquement des chiffres (entier ou non), ou uniquement du texte, où les deux ?

Merci de votre aide.
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
C'est pour du calcul de besoin à partir d'un inventaire.
Certaines cellules de l'inventaire sont en nombre de sacs par exemple, d'autres sont en gr et d'autres sont en nb sacs + gr.
Les nb sacs se remplissent automatiquement dans le calcul de besoin, par pour ce qui des autres je souhaite faire intervenir l'utilisateur pour qu'il renseigne lui même l'info après contrôle des valeurs
un fichier exemple avec les diverses écritures possibles et les résultats attendus
aurait évité 15 messages non productifs ...

la lecture ou relecture de la charte aurait été bienvenue !
4 – La question doit être posée le plus clairement possible en comprenant bien que le lecteur ne peut pas s’imaginer le problème.

5 – La possibilité de joindre des fichiers est donnée sur ce forum. Ne pas hésiter à utiliser cette fonction, tout en veillant que les données soient bidons et donc qu’aucune donnée confidentielle, nominative ne soit dans le fichier.
 

job75

XLDnaute Barbatruc
Bonjour,

Voyez le fichier joint et cette fonction VBA :
VB:
Function Test$(x As Variant)
Dim i%, t1 As Boolean, t2 As Boolean
If IsError(x) Then x = ""
For i = 1 To Len(x)
    If IsNumeric(Mid(x, i, 1)) Then t1 = True Else t2 = True
Next
If Not t1 Then Test = "Aucun chiffre" Else If IsNumeric(Left(x, 1)) And Not t2 Then Test = "Chiffres seulement" Else Test = "Mélange"
End Function
Edit : ajouté le traitement des valeurs d'erreur.

A+
 

Pièces jointes

  • Chiffres(1).xlsm
    15.4 KB · Affichages: 8
Dernière édition:

job75

XLDnaute Barbatruc
Maintenant si l'on s'intéresse aux nombres il faut traiter le séparateur décimal de l'ordi :
VB:
Function Test$(x As Variant)
Dim ds$, i%, t1 As Boolean, t2 As Boolean
ds = Application.DecimalSeparator
If IsError(x) Then x = ""
For i = 1 To Len(x)
    If i > 1 And Mid(x, i, 1) = ds Then If IsNumeric(Mid(x, i - 1, 1)) And IsNumeric(Mid(x, i + 1, 1)) Then i = i + 1 'le séparateur est ignoré
    If IsNumeric(Mid(x, i, 1)) Then t1 = True Else t2 = True
Next
If Not t1 Then Test = "Aucun nombre" Else If IsNumeric(Left(x, 1)) And Not t2 Then Test = "Nombres seulement" Else Test = "Mélange"
End Function
 

Pièces jointes

  • Nombres(1).xlsm
    16.8 KB · Affichages: 7

Patrice33740

XLDnaute Impliqué
C'est pour du calcul de besoin à partir d'un inventaire.
Certaines cellules de l'inventaire sont en nombre de sacs par exemple, d'autres sont en gr et d'autres sont en nb sacs + gr.
Dans ce cas, tester si la cellule contient du texte ou non n'apporterait une solution qu'au travers d'une véritable usine à gaz en VBA alors que la solution d'Eric au post #16 (une colonne dédiée aux unités) résoudrait le problème de la façon la simple possible !
 

job75

XLDnaute Barbatruc
Puisqu'on a parlé de "sacs" et de "gr" voyez le fichier joint qui utilise ces 2 unités de mesure.

L'inventaire est en colonne B, en colonne C tout est converti en "gr" par cette fonction VBA :
VB:
Function Gr(x$, sac#)
Dim s, i%
s = Split(Replace(x & " ", ",", ".")) 'le séparateur décimal n'a pas d'importance
For i = 0 To UBound(s)
    If Val(s(i)) Then Gr = Gr + IIf(LCase(s(i + 1)) Like "sac*", sac, 1) * Val(s(i))
Next
End Function
Le total en C6 est reconverti en B6 par la formule :
Code:
=ENT(C6/F2)&" sac"&REPT("s";ENT(C6/F2)>1)&REPT(" + "&ARRONDI(C6-F2*ENT(C6/F2);2)&" gr";ARRONDI(C6-F2*ENT(C6/F2);2)>0)
 

Pièces jointes

  • Sacs et Gr(1).xlsm
    16.6 KB · Affichages: 7

eriiic

XLDnaute Barbatruc
Pour info, je récupère ces données dans un fichier créé par qqn d'autre.
Le but étant de simplifier certaines choses.
Dans ce cas le fait de savoir que c'est un mélange ou pas va t'aider ? Que comptes-tu faire de cette info ?
Moi j'aurais demandé qu'on m'éclate les données dans 4 colonnes. Au moins j'y verrai clair pour travailler avec...
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Le but étant de simplifier certaines choses.

La simplification ultime eut été de fournir un fichier contenant différents exemples d'expressions à traiter et les résultats souhaités. Les répondeurs aurait sans doute trouvé une solution depuis belle lurette sans être contraints à créer de toutes pièces un fichier. On préfère ne rien faire et attendre que les autres fassent. Bon, ce doit être le confinement qui me met à cran.
J'avais élaboré trois ou quatre formules et codes mais j'ai abandonné devant le manque d’information fournie et les précisions distillées au compte-gouttes, je suis très mauvais en devinette (pas comme @job75 que je salue ;) - et tous les autres aussi, je les salue ;) - et @loiclass aussi, je le salue :))
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
191

Membres actuellement en ligne

Statistiques des forums

Discussions
312 489
Messages
2 088 854
Membres
103 975
dernier inscrit
denry