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

Anne -  
Perio Messages postés 2 Date d'inscription   Statut Membre -
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. Papou93 Messages postés 146 Date d'inscription   Statut Membre Dernière intervention   59
     
    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.
    2
    1. Anne
       
      Merci Mille fois Papou93!
      Tu me rends un immense service, comme quoi il faut toujours demander aux gens qui savent...
      Merci encore

      Anne
      0
      1. Perio Messages postés 2 Date d'inscription   Statut Membre > Anne
         
        Bonjour à 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.
        0
  2. champvi Messages postés 8 Statut Membre 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
    1. Anne
       
      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 !!!
      0
  3. Papou93 Messages postés 146 Date d'inscription   Statut Membre Dernière intervention   59
     
    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
    1. Anne
       
      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
      0
    2. Perio Messages postés 2 Date d'inscription   Statut Membre
       
      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.
      0
  4. champvi Messages postés 8 Statut Membre 2
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Sir_DEC Messages postés 143 Statut Membre 75
     
    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 :)
    0