Plusieurs cellules dans une seule

Cuberdon -  
Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je voudrais que dans une seule case puisse s'ajouter des données provenant d'autres cellules si celles-ci sont remplies...

je m'explique parce qu'un exemple vaut mieux qu'un grand discours.

Voici mon tableau (simplifié)...

A B

1 a

2 b bonjour

3 c merci

je voudrais que dans une cellule il m'indique la lettre "a" si la cellule B1 est remplie, le "b" si B2 est remplie, "c" si B3 est remplie et ainsi de suite.

Comme résultat pour le tableau ci dessus j'aurais:

b,c

D'avance merci et bonne journée

10 réponses

  1. Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Bonjour, vous trois.

    Pour reprendre la proposition de lermite222 en collant davantage à la demande de Cuberdon, je suggère la formule
    =CONCATENER(SI(B1="";"";A1);SI(B2="";"";A2);SI(B3="";"";A3))

    Et s'il faut séparer les données par une virgule ce serat
    =CONCATENER(SI(B1="";"";A1&",");SI(B2="";"";A2&",");SI(B3="";"";A3))

    Si la liste est longue, ce procédé n'est pas très intéressant, et il vaudrait mieux, dans ce cas, utiliser une colonne disponible, Z par exemple, avec en Z1 la formule =SI(B1="";"";A1&",") et en Z2 la formule =Z1&SI(B2="";"";A2&",") à recopier vers le bas.

    Cordialement.
    1
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Y a peut-être plus simple mais en tout cas voila une solution.
        =CONCATENER(SI(C7<>"";C7;"");SI(C8<>"";C8;"");SI(C9<>"";C9;""))

    Adapter les cellules à ton cas.
    A+
    0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    OK pour la solution de lermite222, mais si le problème concerne un grand nombre de cellules, il va peut être falloir programmer
    0
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    beh non, si ça doit se reproduire sur toute une colonne tu n'a que d'étirer la formule sur toutes les lignes concernées. Ou alors explique mieux ce que tu veux.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    une macro simple qui evite l'ajout d'une colonne de service

    Dim nbli As Integer, li As Integer
    Dim s As String
    With Range("Tab")
    nbli = .Rows.Count
    s = ""
    For li = 1 To nbli
    If .Cells(li, 2) <> "" Then
    s = s + .Cells(li, 1)
    End If
    Next li
    End With
    Range("Resultat").Value = s

    sur la feuille
    - nommer Tab la plage A1:Bxx
    - nommer resultat la cellule devant recevoir le résultat

    bonne suite
    0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    re tous,
    suis-je bête... je pense que ccm81 à tout compris, sauf qu'il y a quelque petite erreurs.
    Sub Relier()
    Dim LigDebut As Long ' commence à la ligne..
    Dim Jusque As Long ' et va jusque la ligne..
    Dim Lig As Long, Ret As String
        LigDebut = 2: Jusque = 20
        For Lig = LigDebut To Jusque
            If Cells(Lig, "B") <> "" Then
                Ret = Ret & Cells(Lig, "A") & ","
            End If
        Next Lig
        Range("C4") = Ret ' à mettre où tu veux
    End Sub

    A+
    0
  8. ccm81 Messages postés 11033 Statut Membre 2 434
     
    oui mais le fait de nommer le tableau dans la feuille
    - permet à VB de travailler sur le tableau lui même : '.Cells(li,1)' est extrait de Tab
    - évitera de toucher le code si le tableau se déplace, s'allonge ... ou se rétrécit
    a+
    0
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Je n'ai rien contre un tableau, sauf que..
    Tab étant un mot réserver il génère une erreur.
    La ligne
        For li = 1 To nbli ' n'a aucun sens si l'ont emploi un tableau, il faut mettre
    Dim Tablo As Range
    Set Tablo = Range("b3:B19") 'par exemple
    Dim Lig As Long, S as string
        For Lig = Tablo.Row To Tablo.Row + Tablo.Rows.Count - 1

    Si le tableau ne comporte qu'une seule colonne ce qui est le cas pour les test il serait plus indiquer d'employer...
    Sub HH()
    Dim Cel As Range
    Dim Tablo As Range
    Set Tablo = Range("B3:B19") 'par exemple
        For Each Cel In Tablo
            If Cel <> "" Then s = s & Cel.Offset(, -1)
        Next Cel
    End Sub


    A+
    0
  10. ccm81 Messages postés 11033 Statut Membre 2 434
     
    le with range("Tab") fait référence à une plage nommée Tab de la feuille et n'a rien a voir avec un tableau VB
    et les .Cells qui suivent se réfèrent à cette plage et non a un tableau VB
    tu devrais essayer ...
    a+
    0
  11. Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Alors, Cuberdon ?
    0