Mettre deux cellules en une - excel VBA

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. Utilisateur anonyme
     
    Bonjour,

    Et merci, je vais essayer tout ça et je vous tiens au courant.
    0
  3. Utilisateur anonyme
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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. Utilisateur anonyme
       
      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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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. Utilisateur anonyme
       
      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