Mettre deux cellules en une - excel VBA

Résolu
Bonjour,

Je cherche, comme mon titre l'indique, à mettre deux cellules en une.

Voici un bout de code, qui ne fonctionne pas, mais qui permet de bien comprendre.
En gros, dès que j'ai deux cellules qui se suivent et qui ne sont pas vides, je veux en faire qu'une.

A la place de :

aaaaa
--------
bbbbb
--------

--------
ccccccc

J'aurai donc :

aaaaa
bbbbb
--------

--------
ccccccc

Private Sub CommandButton2_Click()

Sheets("Feuil3").Cells.ClearContents
Sheets("Feuil3").Cells.ClearFormats

Dim a As Long
Dim d As Long
For a = 1 To 100
For d = 1 To 100
If Sheets("Feuil1").Cells(d, a).Value <> "" Then
If Sheets("Feuil1").Cells(d, a + 1).Value <> "" Then
Sheets("Feuil3").Cells(d, a).Value = Sheets("Feuil1").Cells(d, a).Value + Sheets("Feuil1").Cells(d, a + 1).Value
End If
End If
Next
Next


End Sub


Merci d'avance !

3 réponses

  1. Modérateur
    Bonjour,
    2 choses :
    1- Cells(Ligne, Colonne) donc lorsque tu écris : Cells(d, a + 1) tu décales d'une colonne vers la droite.
    2- le + est utilisé en VBA pour faire une somme de nombres, pas pour concatener. Remplace donc ton + par 3 choix :
    - par & (le contenu sera alors contigue : aaaaaacccccc)
    - ou par : & " " & (mettra un espace entre tes deux contenus : aaaaa ccccc)
    - ou par : & Chr(10) & (qui te permet d'aller à la ligne dans ta même cellule)
    0
    1. Bonjour,

      Et merci, je vais essayer tout ça et je vous tiens au courant.
      0
      1. C'est très bien merci !
        PS : La remarque sur a+1 est juste, c'est une étourderie.

        Si je peux me permettre, j'essaye à présent de regrouper dans une seule case les valeurs qui se suivent mais qui peuvent être plus de deux.

        Mon code :

        Dim a As Long
        Dim d As Long
        Dim e As Long
        For a = 1 To 100
        For d = 1 To 100
        If Sheets("Feuil1").Cells(d, a).Value <> "" Then
        e = d + 1
        Sheets("Feuil3").Cells(d, a).Value = Sheets("Feuil1").Cells(d, a).Value
        While Sheets("Feuil1").Cells(e, a).Value <> ""
        Sheets("Feuil3").Cells(d, a).Value = Sheets("Feuil3").Cells(d, a).Value & Chr(10) & Sheets("Feuil1").Cells(e, a).Value
        
        e = e + 1
        Wend
        End If
        Next
        Next


        Le problème est que si j'ai par exemple :

        aaaaa
        --------
        bbbbb
        --------
        cccccc

        je vais obtenir :

        aaaaa
        bbbbb
        ccccccc
        --------
        bbbbb
        ccccccc

        et que je voulais juste

        aaa
        bbb
        ccc

        Suis-je clair ?
        Merci en tous cas !
        0
        1. Modérateur
          Salut,
          Oui c'est clair. Il te faut donc, à un moment effacer les cellules que tu regroupes (tes cellules Cells(e, a)). Essaye comme ceci :
          !!! Attention macro qui supprime des données, à tester dans une copie du fichier!!!
          Dim a As Long
          Dim d As Long
          Dim e As Long
          'copie toutes les données de feuil1 à feuil3
          Sheets("Feuil1").Range("A1:CV100").Copy Sheets("Feuil3").Range("A1")
          For a = 1 To 100
              For d = 1 To 100
                  e = d + 1
                       While Sheets("Feuil1").Cells(e, a).Value <> ""
                          Sheets("Feuil3").Cells(d, a).Value = Sheets("Feuil3").Cells(d, a).Value & Chr(10) & Sheets("Feuil3").Cells(e, a).Value
                          e = e + 1
                          Sheets("Feuil3").Cells(e - 1, a).Value = ""
                      Wend
                  End If
              Next d
          Next a
          0
        2. Bonjour,

          Oui, c'est ce que je me suis décidé à faire avec ce code :

          Dim a As Long 
          Dim d As Long 
          Dim e As Long 
          For a = 1 To 100 
          For d = 1 To 100 
          If Sheets("Feuil4").Cells(d, a).Value <> "" Then 
          e = d + 1 
          Sheets("Feuil3").Cells(d, a).Value = Sheets("Feuil4").Cells(d, a).Value 
          While Sheets("Feuil4").Cells(e, a).Value <> "" 
          Sheets("Feuil3").Cells(d, a).Value = Sheets("Feuil3").Cells(d, a).Value & Chr(10) & Sheets("Feuil4").Cells(e, a).Value 
          Sheets("Feuil4").Cells(e, a).Value = "" 
          e = e + 1 
          Wend 
          End If 
          Next 
          Next


          Avant cela, je copie ma feuil1 en feuil4.

          Trouvez-vous cela "cohérent" ?

          Merci pour votre aide
          0
        3. Modérateur
          Trouvez-vous cela "cohérent" ? La vraie question est : est ce que cela fonctionne? Si oui, tout est bon! problème résolu. Sinon posez vos questions...
          0
        4. Haha, oui, ça fonctionne, donc merci.
          Je vais maintenant essayer de faire cela sur tout un tableau.
          Mon problème général est de "ranger" un arbre de type :

          s1
          s11
          s111
          s112
          s12
          s121
          s122
          s123
          s2

          etc...

          Que je voudrais ranger en :

          s111
          s1 s11 s112
          s12 s121
          s122
          s123

          Où tout ceci tient en une ligne de tableau.

          Et je me contente de poser quelques questions "intermédiaires", je pense peut-être tenir une idée pour y parvenir (mais je ne suis évidemment pas réfractaire à d'autres idées).

          Merci bien en tous cas.
          0