Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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,

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
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…