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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
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+
 
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".
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour