Mettre deux cellules en une - excel VBA

Résolu/Fermé
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 - 12 avril 2011 à 15:46
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 - 13 avril 2011 à 10:19
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 !



A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
12 avril 2011 à 15:53
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
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
12 avril 2011 à 16:17
Bonjour,

Et merci, je vais essayer tout ça et je vous tiens au courant.
0
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
12 avril 2011 à 17:39
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 avril 2011 à 08:16
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
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
Modifié par jahawai le 13/04/2011 à 08:54
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
13 avril 2011 à 09:40
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
jahawai Messages postés 223 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 12 mai 2020 11
13 avril 2011 à 10:19
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