Distribution des nombres sur plusieurs cellules

Bonjour le Forum ,

J'espère que vous vous portez bien:

SVP, je sollicite votre aide pour m'aider à trouver une fonction Excel . Je m'explique:

J'ai le nombre de matricule des opérateurs qui sont réunis tous dans la même première cellule. Ce que j'aimerai faire c'est de les distribuer chacun sur une seule cellule.

op

J'ai pensé à essayer la fonction stxt mais ça n'a pas marché vu que :

  • Le nombre des opérateurs n'est pas stable à 4 caractères
  • En saisissant , on pourra saisir des espaces entre les tirets

Du coup, je veux une fonction qui me renvoie le nombre avant le premier tiret , et puis le nombre entre le 1et et deuxième tiret .. et ainsi de suite

Merci beaucoup

Bonjour,

Utilise Données > Convertir avec le séparateur "-"

A+

Bonsoir,

Un fichier serait mieux venu... et permettrait de te répondre.

Cordialement.

Ci-joint le fichier

25ops.xlsx (10.89 Ko)

Merci beaucoup

Bonsoir,

Excel est plutôt pauvre pour traiter du texte. Tu peux jongler avec GAUCHE, DROITE, STXT, SUBSTITUE, CHERCHE ou TROUVE, etc.

Mais tu seras contraint d'utiliser plusieurs formules différentes pour aboutire au résultat.

On y arrive souvent beaucoup plus facilement avec une fonction personnalisée.

En voilà une :

Function DECOMPTXT(ch As String)
    Dim tsch
    Application.Volatile
    tsch = Split(ch, "-")
    DECOMPTXT = tsch
End Function

Cette fonction est à utiliser en fonction matricielle pour décomposer ta chaîne d'un seul coup en autant de fragments qui étaient séparés par un tiret.

Pour ta première valeur, par exemple, tu sélectionnes préalablement 5 cellules, tu tapes la fonction: =DECOMPTXT(B5), B5 étant l'emplacement de ta chaîne, tu valides par la combinaison de touches Ctrl+Maj+Entrée, la formule s'encadre d'accolades (indiquant qu'elle est matricielle) et les 5 valeurs apparaîssent dans les 5 cellules.

Si tu n'as pas sélectiionné assez de cellules au départ,, tu ne recommences pas à 0, tu étends ta sélection pour augmenter le nombre de cellules, tu édites la formule en positionnant le curseur dans la barre de formules, et tu valides à nouveau par Ctrl+Maj+Entrée.

Cordialement.

7riri92-ops.xlsm (16.05 Ko)
MFerrand a écrit :

Bonsoir,

Excel est plutôt pauvre pour traiter du texte. Tu peux jongler avec GAUCHE, DROITE, STXT, SUBSTITUE, CHERCHE ou TROUVE, etc.

Mais tu seras contraint d'utiliser plusieurs formules différentes pour aboutire au résultat.

On y arrive souvent beaucoup plus facilement avec une fonction personnalisée.

En voilà une :

Function DECOMPTXT(ch As String)
    Dim tsch
    Application.Volatile
    tsch = Split(ch, "-")
    DECOMPTXT = tsch
End Function

Cette fonction est à utiliser en fonction matricielle pour décomposer ta chaîne d'un seul coup en autant de fragments qui étaient séparés par un tiret.

Pour ta première valeur, par exemple, tu sélectionnes préalablement 5 cellules, tu tapes la fonction: =DECOMPTXT(B5), B5 étant l'emplacement de ta chaîne, tu valides par la combinaison de touches Ctrl+Maj+Entrée, la formule s'encadre d'accolades (indiquant qu'elle est matricielle) et les 5 valeurs apparaîssent dans les 5 cellules.

Si tu n'as pas sélectiionné assez de cellules au départ,, tu ne recommences pas à 0, tu étends ta sélection pour augmenter le nombre de cellules, tu édites la formule en positionnant le curseur dans la barre de formules, et tu valides à nouveau par Ctrl+Maj+Entrée.

Cordialement.

Je vous remercie énormément MFerrand pour votre collaboration , mais le problème c'est que je veux l'insérér dans mon tableau , et cette fonction ne marche pas dans les cellules d'un tableau

Je ne m'en étais pas encore avisé ! Une raison de plus pour que je n'apprécie pas ces tableaux

Bon ! je te l'aménage pour traitement non matriciel :

Function DECOMPTXT(ch As String, no As Integer)
    Dim tsch
    Application.Volatile
    tsch = Split(ch, "-")
    If no <= UBound(tsch) + 1 Then
        DECOMPTXT = tsch(no - 1)
    Else
        DECOMPTXT = ""
    End If
End Function

Tu substitue celle-ci à la précédente.

Le 2e argument est le numéro d'ordre de l'élément à extraire de la chaîne.

Tu l'utilises en formulant de cette façon :

=DECOMPTXT($B5;COLONNE(A:A))

Formule à mettre en C5 et à tirer sur l'ensemble de ton tableau (si l'élément n'existe pas, elle n'affichera rien).

Cordialement.

galopin01 a écrit :

Bonjour,

Utilise Données > Convertir avec le séparateur "-"

A+

Sinon... avec le ruban ça serait trop simple ?

Copier B5:B8 en C5:C8 puis C5:C8 étant encore sélectionnée : Données > Convertir avec le séparateur "-"

A+

MFerrand a écrit :

Je ne m'en étais pas encore avisé ! Une raison de plus pour que je n'apprécie pas ces tableaux

Bon ! je te l'aménage pour traitement non matriciel :

Function DECOMPTXT(ch As String, no As Integer)
    Dim tsch
    Application.Volatile
    tsch = Split(ch, "-")
    If no <= UBound(tsch) + 1 Then
        DECOMPTXT = tsch(no - 1)
    Else
        DECOMPTXT = ""
    End If
End Function

Tu substitue celle-ci à la précédente.

Le 2e argument est le numéro d'ordre de l'élément à extraire de la chaîne.

Tu l'utilises en formulant de cette façon :

=DECOMPTXT($B5;COLONNE(A:A))

Formule à mettre en C5 et à tirer sur l'ensemble de ton tableau (si l'élément n'existe pas, elle n'affichera rien).

Cordialement.

Merci beaucoup, ça fonctionne maintenant , mais je voulais juste comprendre l'intérêt de la colonne A:A dans le code de la fonction DECOMPTXT , pourquoi déjà ?

Bonsoir,

COLONNE(A:A) renvoie 1. Mais A étant en références relatives, recopié d'une colonne à l'autre, A va devenir B, C, D... et donc cette expression renverra successivement 2, 3, 4...

C'est un moyen d'incrémenter une série numérique en colonnes.

On fait pareil en lignes avec LIGNE(1:1)...

Cordialement.

Rechercher des sujets similaires à "distribution nombres"