Exercice N° 8 - Séparer Lignes et Colonnes

Salut @Mimimathy, :wink:

Non pour ma part, je n’avais pas boudé l’exercice, mais disons que je n’ais pas apprécié cette phrase: :face_with_raised_eyebrow:

Certes, je m’aide pour trouver la solution à tes exercices d’internet, mais de là a laisser penser que je n’ais fait que copier un code sans avoir travaillé ce n’ai pas juste venant de ta part.

Alors pourquoi mes variables étaient mal déclarées ?

Parce-que il m’avait semblé comprendre qu’en déclarant sur une seule ligne de code plusieurs variables ( dans ce cas STRING ) le fait de mettre la dernière variable ( $ ) prenait en compte toute la ligne.
Et comme le code fonctionnait, il m’avait semblé avoir trouvé quelque chose d’intéressant.

Mais ton explication, m’a prouvé le contraire et que je commettais là une erreur, d’où l’intérêt de tes exercices pédagogiques.

Alors voici le travail que j’ai fais pour résoudre l’Exercice N°8 tel que tu souhaitais avoir le résultat dans les même colonne « B, C, D »

Dans la colonne « D » pour chaque ligne séparée d’un point virgule je crée une ligne pour chaque mot ceci dans une boucle jusqu’au dernier mot de de la dernière ligne.

Ensuite pour les colonnes « B & C » avec une formule je comble chaque ligne vide crée par la colonne « D » par la cellule non vide du dessus.

Mon code est différent du tien et tu me corrigeras, mais il est fonctionnel.

Le code:

Option Explicit
Sub Separe_ligne_colonne()
Dim Donn?es As Worksheet 'Variable feuille Donn?es
Dim Tableau() As String 'Variable Tableau
Dim i% 'Variable de boucle For dans boucle Do
Dim X$ 'Variable suite de caract?re
Dim D%, y% 'Varables boucle For pour combler cellules vides
Application.ScreenUpdating = False 'Rafraichissement ecran acc?l?re l'execution de la macro

 Set Donn?es = Worksheets("Donn?es") 'A partir de la feuille Donn?es
  Cells(3, 4).Activate 'Active la cellule D3
  
    Do 'Boucle faire (Effectuer, faire les actions qui suivent)

     X = ActiveCell.Value '1er, 2?me et ainsi de suite chaine de caract?re
     Tableau = Split(X, ";") 'Tableau s?paration chaine de caract?re par point virgule

     For i = 0 To UBound(Tableau) 'Dimentionne le tableau de 0 ? chaine de caract?re
     ActiveCell.Value = Tableau(i) 'Pour chaque chaine cr?e un tableau

     '******************************************************************************
     'Cr?ation d'une nouvelle plage avec rowoffset:=0,columnoffset:=0
     'rowoffset:=1 = ? D3 et d?calage vers le bas, D4, D5 etc...
     'columnoffset:=0 = ? colonne D sans d?calage
     '******************************************************************************
     ActiveCell.Offset(rowoffset:=1, columnoffset:=0).Activate
     'Si  le tableau est diff?rent alors copie la plage en inserant chaque ligne
     If i <> UBound(Tableau) Then Selection.EntireRow.Insert
     
     Next i 'Fin de la boucle For

    Loop Until ActiveCell = "" 'Jusqu'? ce que (Jusqu'? ce que X soit vide)
    
    With Range("D2:D65000") 'Centre le r?sultat en colonne D
     .HorizontalAlignment = xlCenter
     .VerticalAlignment = xlBottom
    End With
    
'***********************************************************************************
'A la fin de cette macro, on comble les cellules vides
'on copie en face de chaque ligne colonne D vide
'les lignes du dessus pour chaque colonnes B & C
'***********************************************************************************

D = Range("D65000").End(xlUp).Row

    For y = 2 To D
     If Range("B" & y) = "" Then Range("B" & y) = Range("B" & y - 1)
     If Range("C" & y) = "" Then Range("C" & y) = Range("C" & y - 1)
    Next
    
End Sub

Le fichier Séparer L & C .xlsm (362,0 Ko)

Amicalement.