Mettre deux cellules en une - excel VBA [Résolu/Fermé]

Signaler
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
-
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
-
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

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 593
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)
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
7
Bonjour,

Et merci, je vais essayer tout ça et je vous tiens au courant.
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
7
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 !
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 593
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
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
7
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
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 593
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...
Messages postés
223
Date d'inscription
dimanche 23 décembre 2007
Statut
Membre
Dernière intervention
12 mai 2020
7
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.