Microsoft 365 convertir une sting en une ligne de nombre

lestatber

XLDnaute Nouveau
bonjour,

Je cherche une formule excel pour convertir pour convertir une string "8-11,51-52,73" en liste de valeur "8,9,10,11,51,52,73" ?
ce qui m'interesse c'est avoir au final 7 ligne.

8

9

10

11 (qui correspond à 8-11)

51

52 (qui correpond à 51-52)

73

Merci d'avance,

Matthieu
 

fanch55

XLDnaute Barbatruc
Bonjour,
1655116928865.png

VB:
Public Function SerieN(V)
    G = Split(V, ",")
    For Each F In G
        N = Split(F, "-")
        Select Case UBound(N)
        Case 0: SerieN = SerieN & "," & N(0)
        Case 1: For I = N(0) To N(1)
                    SerieN = SerieN & "," & I
                Next
        Case Else: SerieN = xlErrValue
        End Select
    Next
    If Left(SerieN, 1) = "," Then SerieN = Mid(SerieN, 2)
End Function
 

fanch55

XLDnaute Barbatruc
Pour avoir n lignes :
A mettre dans un module standard :
VB:
Option Explicit
Public Vcalc As Variant
Public Function SerieN(V, Optional Target)
Dim F, G, N
Dim J As Integer
    G = Split(V, ",")
    For Each F In G
        N = Split(F, "-")
        Select Case UBound(N)
        Case 0: SerieN = SerieN & "," & N(0)
        Case 1: For J = N(0) To N(1)
                    SerieN = SerieN & "," & J
                Next
        Case Else: SerieN = xlErrValue
        End Select
    Next
    If Left(SerieN, 1) = "," Then SerieN = Mid(SerieN, 2)
    
    Select Case True
     Case IsMissing(Target)
     Case TypeName(Target) = "String": Vcalc = Range(Target).Address(External:=True) & "|" & SerieN
     Case TypeName(Target) = "Range":  Vcalc = Target.Address(External:=True) & "|" & SerieN
    End Select
    
End Function

A mettre dans le module ThisWorkBook :
VB:
Option Explicit
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Dim Target As Range
Dim Valeurs, Groupe
Dim J As Integer
    If Not IsEmpty(Vcalc) Then
        Groupe = Split(Vcalc, "|")
        Set Target = Range(Groupe(0))
        Valeurs = Split(Groupe(1), ",")
       ' On ne met à jour que les valeurs changées,
       ' sinon boucle infernale de calcul
        For J = 0 To UBound(Valeurs)
            If Target <> Val(Valeurs(J)) Then Target = Val(Valeurs(J))
            Set Target = Target.Offset(1)
        Next
        Vcalc = Empty
    End If

End Sub

Appel de la fonction dans une feuille :
Le deuxième argument (optionnel) indique la première cellule à renseigner
1655196092888.png
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16