Extraction de caractères numériques d'une liste (Résolu)

whiskyfizz

XLDnaute Nouveau
Bonsoir.

Je me permets de vous solliciter de nouveau pour m'aider à résoudre un nouveau problème. J'ai beau essayé, mais je crois que la maîtrise d'excel est encore très loin pour moi. Plutôt que de m'entêter et perdre du temps, je me suis dit qu'il serait plus judicieux de demander assistance à des personnes nettement plus fortes que moi.

Mon problème est d'extraire les nombres d'un texte sous forme de liste et de les mettre dans des cases séparées. Il y a au plus 8 nombres, donc 8 cases à remplir. Voici un exemple de liste : "1 - 5 - 6 - 10 - 9". Dans cet exemple, comme il n'y a que 5 nombres, les 3 cases restantes seront remplies avec des 0.

La difficulté est qu'on ne sait pas à l'avance combien il y aura de nombres sans dépasser 8, mais surtout qu'on ne sait pas à l'avance lesquels de combien de chiffres ils seront composés (1 ou 2).

Vous trouverez un petit fichier en exemple avec un début de solution (lourde et fastidieuse si on décide de pousser la logique jusqu'au bout) pour les deux premiers nombres dans la partie VBA du fichier .xls. Ma solution étant trop grossière et pas très intelligente, elle devient trop fastidieuse à écrire puisque pour le 7ème nombre, il faudrait écrire pas moins de 132 fonctions SI. Un cauchemar que je n'ai pas la force de vivre, donc je me tourne vers les esprits plus aguerris de ce forum pour me sortir de mon impasse.

D'avance merci et bonne année !
 

Pièces jointes

  • extraction_001j.xls
    33.5 KB · Affichages: 43
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Extraction de caractères numériques d'une liste

Bonjour whiskyfizz

Comme je passais par là ;)
Voici une petite fonction qui devrait t'aider à trouver ton bonheur
VB:
Function Extract(Rng As Range, Col As Integer)
  Dim Inc As Integer, TabN() As String
  ' Exécuter cette fonction à chaque recalcul
  Application.Volatile
  ' Créer le tableau des nombres
  TabN = Split(Rng, " - ")
  ' Si le numéro de colonne transmise à la fonction
  ' est inférieur ou égale au nombre d'éléments
  If Col - 1 <= UBound(TabN()) Then
    ' on renvoit l'élément en question
    Extract = TabN(Col - 1)
  Else
    ' Sinon on renvoit un tiret (pas nécessaire)
    Extract = "-"
  End If
End Function

Dans ta cellule B3, tu insères la formule
Code:
=extract($A3;B$2)
A recopier vers la droite et vers le bas

A+
 

whiskyfizz

XLDnaute Nouveau
Re : Extraction de caractères numériques d'une liste

Bonjour.

Je n'ai pas tout compris à cette solution ce qui m'empêche de l'utiliser dans d'autres feuilles. Toutefois à force d'exploration, j'ai trouvé une fonction sur un site (The Spreadsheet Page - By John Walkenbach) qui s'appuie aussi sur la macro Split et que voici :

Code:
Function ExtractElement(str, n, sepChar)
'   Returns the nth element from a string,
'   using a specified separator character
    Dim x As Variant
    x = Split(str, sepChar)
    If n > 0 And n - 1 <= UBound(x) Then
       ExtractElement = x(n - 1)
    Else
        ExtractElement = ""
    End If
End Function

Elle me semble plus simple que la solution précédente, la preuve je l'ai comprise. En tout cas un grand merci pour votre réponse. Vous êtes formidables. Je marque le fil comme "Résolu".
 

Discussions similaires