[Excel VBA] Macro Spéciale pour concaténation

Besoin d'aide !!

Bonjour à tous, je vois qu'un certain nombre d'entres vous maitrisent Excel et le VBA, alors j'aurais besoin de votre aide car je suis biologiste et mes connaissances en informatique sont limitées...

J'ai un tableau excel du genre
>nomproteine1
ABC
DE
>nomproteine2
GHIJ
KLM
NO
>etc

J'aimerai concaténer la séquence de chacune des protéines dans une cellule (soit dessous, soit à côté du nom, de préférence) et effacer les cellules ayant servi à la concaténation pour avoir :

>nomproteine1
ABCDE
>nomproteine2
GHIJKLMNO
>etc

En sachant que, (et oui il faut bien compliquer, c'est pour ça que je me casse les dents dessus) la séquence est de taille variable et le seul point commun est le > en début de chaque nouveau nom...

Celui qui arrivera à me pondre quelquechose aura droit à.....une deuxième question !!

Merci d'avance !

Anne
Configuration: Windows XP
Internet Explorer 6.0

5 réponses

  1. Voici la macro modifiée pour effacer les cellules d'origine:

    Sub NomProteine()
      With Sheets(1)
        For n = 1 To .Range("a65536").End(xlUp).Row
          If Left$(Cells(n, 1), 1) = ">" Then lg = n
          If Not Left$(Cells(n, 1), 1) = ">" And lg > 0 Then
            Cells(lg, 2) = Cells(lg, 2) & Cells(n, 1)
            Cells(n, 1) = ""
          End If
        Next
      End With
    End Sub

    Cordialement.
    1. Merci Mille fois Papou93!
      Tu me rends un immense service, comme quoi il faut toujours demander aux gens qui savent...
      Merci encore

      Anne
    2. @AnneBonjour à tous,

      Je n'arrive pas à utiliser ce code pour mes propres besoins...

      Mon besoin concerne la concaténation de colonnes dans un ficher SIREN de l'INSEE contenant 11 000 enregistrements : je souhaite avoir dans une colonne créée pour cela (A1 par ex), des adresses d'entreprises (A0) complètes formées d'éléments situés dans des colonnes individualisées (A2, A3, A4, etc).

      Merci à vous pour toute tentative d'explication !

      Pierre.
  2. tu marques dans une case '=C1 & D1' par exemple. Ca fait ca betement mais ca concatene 2 cases.
    pour plus complexe faut toucher à VBA... donc tente avec ca d'abord
    1. Merci Champvi mais il faut justement que je passe en VBA parce que j'ai environ 1000 entrées !!!
      J'arrive bien à concaténer avec la fonction concatène d'excel mais je peux pas y passer la nuit...une petite macro serait pas mal ! Peut être avec la fonction join mais j'ai pas réussi à l'utiliser.
      Please help !!!
  3. Bonjour Anne et Champvi,

    Voici une macro à insérer dans un module de code :

    Sub NomProteine()
      With Sheets(1)
        For n = 1 To .Range("a65536").End(xlUp).Row
          If Left$(Cells(n, 1), 1) = ">" Then lg = n
          If Not Left$(Cells(n, 1), 1) = ">" And lg > 0 Then Cells(lg, 2) = Cells(lg, 2) & Cells(n, 1)
        Next
      End With
    End Sub

    Cette macro concatène la séquence des protéines dans la cellule immédiatement à droite du nom.
    Elle fonctionne quelle que soit la ligne de départ de la liste.
    Il est facile d'adapter la position des colonnes en fonction des besoins.

    Espérant avoir été utile.

    Cordialement
    1. Alors là, je suis scotchée !!!!!
      Merci mille fois, dire que j'ai passé la journée à essayer de bidouiller des trucs....

      Par contre pourrais tu m'effacer les cellules qui ont servi à la concaténation.

      Merci d'avance Papou93 !!

      Merci aussi à Champvi mais du coup j'ai pas essayé ta combine !

      Anne
    2. Bonjour à tous,

      Je ne parviens pas à utiliser cette macro... Où, dans le code que nous a gentiment indiqué Papou93, faut-il changer quelque chose pour qu'il soit utilisable par tous ? C'est la valeur "a65536" ?

      Mon besoin concerne la concaténation de colonnes dans un ficher SIREN de l'INSEE contenant 11 000 enregistrements : je souhaite avoir dans une colonne créée pour cela (A1 par ex), des adresses d'entreprises (A0) complètes formées d'éléments situés dans des colonnes individualisées (A2, A3, A4, etc).

      Merci à vous pour toute tentative d'explication !

      Pierre.
  4. tu peux tenter un truc du style

    ActiveSheet.Range("E1").Select 'se place en E1
    do while activecell.value = "" 'boucle tant que la cellule est pas vide
    activecell.value = activecell.offset(0,-2) & activecell.offset (0,-1) 'concatene les 2 cases de gauche

    activecell.offset (1,0).select 'se depalce d'une case vers le bas
    loop
    1. Ou sans utiliser VB, disons qu'on a le tableau suivant :

      A1 : nomprotéine1
      A2...Ax : les trucs gens "ABC", "DE" et compagnie
      Ax+1 : nomprotéine2

      En Bx-1 : =Ax & Bx
      Ensuite il suffit de développer en remontant jusqu'à la ligne du nom. (En B1 : =A2 & B2)

      Bien sûr c'est faisable en VB, mais cette solution l'écarte :)