Développement d'une suite numérique interrompu par un tiret

Bonjour,

Je dispose d’excel 2013.

Je dispose d’un tableau comprenant des suites de chiffres, remplis de cette manière (avec d’autres colonnes avant et après, chaque numéro W correspond à une ligne et les chiffres après le W sont dans une autre colonne):

221 W 10 à 15

5 W 1 à 11

5 W 12 à 22

5 W 23 à 33

5 W 34 à 44

5 W 45 à 55

5 W 56 à 66

Et je souhaiterais développer les suites numériques de manière à disposer d’un tableau se présentant comme suit :

221 W 10

(221 W) 11

(221 W) 12

(221 W) 13

(221 W) 14

(221 W) 15

5 W 1

5 W 2

Je suppose qu'il me faudrait faire ça en décomposant tout d’abord les suites numériques (en lignes que je pourrais transformer ensuite en colonnes (et comment ?)? en colonnes directement ?) sans écraser le contenu des autres colonnes. Savez-vous si cela est possible et comment je peux procéder ?

Mon tableau est assez long, plus de 3000 lignes, avec à chaque fois des intervalles différents pour la seconde colonne.

Merci par avance pour toute aide

bonjour,

une proposition

Sub aargh()
    Dim t()
    Set ws = Sheets("sheet1")
    dl = ws.UsedRange.Rows.Count
    dc = ws.UsedRange.Columns.Count
    ReDim t(1 To dl * dc, 1 To 2)
    For i = 1 To dl
        ca = ws.Cells(i, 1)
        For j = 2 To dc
            cc = ws.Cells(i, j)
            If cc <> "" Then
                k = k + 1
                t(k, 1) = ca
                t(k, 2) = cc
            Else
                Exit For
            End If
        Next j
    Next i
    Set wsn = Sheets.Add(after:=ws)
    wsn.Range("A1").Resize(k, 2) = t
End Sub

bonjour,

une autre version. il semble que j'ai mal compris le problème pour ma première solution

Sub aargh()
    Dim t()
    Set ws = Sheets("sheet1")
    dl = ws.UsedRange.Rows.Count
    dc = 100
    ReDim t(1 To dl * dc, 1 To 2)
    For i = 1 To dl
        ca = ws.Cells(i, 1)
        cc = Split(ws.Cells(i, 2), "à")
        For j = cc(0) To cc(1)
            k = k + 1
            If j = Val(cc(0)) Then
                t(k, 1) = ca
            Else
                t(k, 1) = "(" & ca & ")"
            End If
            t(k, 2) = j
        Next j
    Next i
    Set wsn = Sheets.Add(after:=ws)
    wsn.Range("A1").Resize(k, 2) = t
End Sub

Bonjour,

Merci pour votre réponse ! Cela dépasse carrément mes petites compétences en excel par contre... Pour tout dire, je ne sais même pas où saisir cette formule...

Je vous joins deux tableaux illustrant ce que je souhaiterais faire : le premier est celui que j'ai actuellement, le second ce que je souhaiterai obtenir.

bonjour,

c'est quand même plus facile de comprendre de quoi il en retourne quand on dispose d'un fichier.

solution via macro (déjà intégrée au fichier au fichier joint).

faire alt-f8 pour lancer la macro

Sub aargh()
    Set ws = Sheets("all")
    dl = ws.Cells(Rows.Count, 1).End(xlUp).Row
    Set wsn = Sheets.Add(after:=ws)
    ws.Rows(1).Copy wsn.Rows(1)
    k = 2
    For i = 2 To dl
        cc = Split(ws.Cells(i, "H") & ",", ",")
        For j = LBound(cc) To UBound(cc) - 1
            ncc = Split(cc(j) & "à", "à")
            If ncc(1) <> "" Then
                nl = ncc(1) - ncc(0)
            Else
                nl = 1
                ncc(1) = ncc(0)
            End If
            ws.Rows(i).Copy wsn.Rows(k & ":" & k + nl)
            For co = ncc(0) To ncc(1)
                wsn.Cells(k, "H") = co
                k = k + 1
            Next co
        Next j
    Next i
    wsn.Columns.AutoFit
End Sub
Rechercher des sujets similaires à "developpement suite numerique interrompu tiret"