XL 2013 Formule ou macro pour intercaller des cellules vides dans une liste de noms

CHLOE90

XLDnaute Junior
Bonsoir le Forum,

J'essaye en vain depuis cet après midi de trouver une solution à mon problème et je me résous à vous écrire.
Voilà, j'ai une liste de noms dans un colonne qui est très longue et je souhaiterais dans la colonne voisine disposer de la même liste mais que les noms soient séparés par deux cellules vides.
Je vous joins un petit fichier pour illustration.
Merci pour votre bienveillance

Chloé
 

Fichiers joints

vgendron

XLDnaute Barbatruc
Hello
un exemple par macro avec ce code
VB:
Sub intercalle()
Dim tabloinit() As Variant
Dim tabloFinal() As Variant

With ActiveSheet
    Fin = .Range("B" & .Rows.Count).End(xlUp).Row
    tabloinit = .Range("B10:B" & Fin).Value
    ReDim tabloFinal(1 To 3 * UBound(tabloinit, 1), 1 To 1)
    
    For i = LBound(tabloinit, 1) To UBound(tabloinit, 1)
        tabloFinal(3 * (i - 1) + 1, 1) = tabloinit(i, 1)
        tabloFinal(3 * (i - 1) + 2, 1) = ""
        tabloFinal(3 * (i - 1) + 3, 1) = ""
    Next i
    
    .Range("C10").Resize(UBound(tabloFinal), 1) = tabloFinal
End With
End Sub
 

CHLOE90

XLDnaute Junior
Bonjour le Forum,

Merci Vgendron, Barbatruc +++, c'est tout à fait ça, j'ai du mal à comprendre le code entre le For i et le Next i....mais ça marche super.

Belle journée à tous
Chloé.
 

vgendron

XLDnaute Barbatruc
Hello

Le meme code avec quelques commentaires..
VB:
Sub intercalle()
'déclaration de deux tableaux vba
Dim tabloinit() As Variant
Dim tabloFinal() As Variant

With ActiveSheet 'dans la feuille active
    Fin = .Range("B" & .Rows.Count).End(xlUp).Row 'on recupère la dernière ligne non vide de la colonne B
    tabloinit = .Range("B10:B" & Fin).Value 'on met les valeurs dans le tablo
    ReDim tabloFinal(1 To 3 * UBound(tabloinit, 1), 1 To 1) 'on redimensionne le tablo final sur 3fois la taille du tabloinit (3 = 1 nom + 2 lignes vides)
    
    For i = LBound(tabloinit, 1) To UBound(tabloinit, 1) 'pour chaque ligne du tablo init
        tabloFinal(3 * (i - 1) + 1, 1) = tabloinit(i, 1) 'on met le nom dans le tablofinal
        tabloFinal(3 * (i - 1) + 2, 1) = "" 'on ajoute deux lignes vides
        tabloFinal(3 * (i - 1) + 3, 1) = ""
    Next i
    
    .Range("C10").Resize(UBound(tabloFinal), 1) = tabloFinal 'on colle le tablofinal dans la feuille
End With
End Sub
 

CHLOE90

XLDnaute Junior
Merci à JOB75 pour sa solution "formuliste", ainsi qu'à Vgendron pour ce complément d'information.
Bonne soirée à tous
Chloé
 

Discussions similaires


Haut Bas