[EXCEL] Infos colonne en ligne avec ;

Résolu
Bonjour,

Je souhaiterais sous Excel pouvoir mettre des infos en colonne en ligne (100 valeurs par ligne séparées par des ";") :

Exemple :

Au départ on a dans la colonne A les infos suivantes :

Ordinateur
Voiture
Choucroutte
Frigo
Budget

Je voudrais donc obtenir : Ordinateur;Voiture;Choucroutte;Frigo;Budget

A savoir que s'il y a 245 valeurs en tout avoir 3 lignes au total (deux lignes avec 100 valeur et la dernière avec les 45 restantes...)

Je ne sais pas si je suis assez clair !

Merci en tout cas de me venir en aide !

Cordialement,

Jean.
Configuration: Windows XP Internet Explorer 6.0

12 réponses

  1. Contributeur
    Re,
    Si vraiment le VBA te pose problème et que tu n'as rien contre 2-3 copier/coller, tu peux tjs utiliser ce fichier (je l'utilise pour construire des listes de valeurs pour des requêtes SQL par ex....dsl pour les couleurs, mais ça correspondait aux couleurs de mon ancienne boite lol) : http://www.cijoint.fr/cjlink.php?file=cj200908/cijYFK9N8T.xls
    2
    1. Bonjour,

      Dim i,j,a,valeur as string

      i=1 ‘ ta première ligne ou se trouve ta valeur
      j=1 ‘ ta première colonne ou se trouve ta valeur
      a=0
      cells(i,j).select

      do while selection <> ""
      if a <=100 then
      a=a+1
      if valeur = then
      valeur = selection
      else
      valeur = valeur & ";" & selection
      end if
      a=a+1
      else
      cells(1,2).select
      selection = valeur
      a=0
      valeur =""
      end if
      i=i+1
      cells(i,j).select
      loop
      Un conseil fais le par F8 et regarde si ca te convient.
      1
      1. Voilà une autre solution...
        j'ai été moins rapide à la créer mais je te la met quand même...

        Dim Ligne As String
        Sub CompilLigne()
        Ligne = ""
        For i = 1 To 100
        If Sheets(1).Cells(i, 1) <> "" Then
        Ligne = Ligne & ";" & Sheets(1).Cells(i, 1)
        End If
        Next i
        Sheets(2).Cells(1, 1) = Ligne

        Ligne = ""
        For i = 101 To 200
        If Sheets(1).Cells(i, 1) <> "" Then
        Ligne = Ligne & ";" & Sheets(1).Cells(i, 1)
        End If
        Next i
        Sheets(2).Cells(1, 2) = Ligne

        Ligne = ""
        For i = 201 To 300
        If Sheets(1).Cells(i, 1) <> "" Then
        Ligne = Ligne & ";" & Sheets(1).Cells(i, 1)
        End If
        Next i
        Sheets(2).Cells(1, 3) = Ligne

        '... tu peux répéter autant de fois ce modèle que tu as de multiple de 100 cellules

        end sub
        1
        1. Contributeur
          Oki, alors regarde le fichier que j'ai posé sur cijoint.fr, ça devrait t'être utile ;)
          1
          1. Contributeur
            J'ai limité à 400 pr des questions de perf mais tu peux adapter ;)
            1
            1. essaye qqchose comme ça:
              Dim ligne as string

              Sub...()
              for j =1 to 65
              Ligne = ""
              for i = ((j-1)*100)+1 to j*100
              if sheets(1).cells((i,1)<>"" then
              Ligne=Ligne&";"&Sheets(1).Cells(i,1)
              end if
              next i
              Sheets(2).cells(j,1)=Ligne
              Next j

              end sub

              Avec ça tu devrais pouvoir faire jusqu'à 65 listes de 100 identifiants
              1
              1. Contributeur
                Normalement ta liste de valeurs est à coller en B5:B405, les parametres en F4:F6 et le résultat en F2.....
                Si le résultat s'affiche pas essaie de modifier la couleur du texte, c'est peut etre un pb de conversion de couleurs (fichier réalisé en Excel 2007)....
                1
                1. Bonjour Mélanie et merci pour ce retour rapide !

                  Je ne m'y connais pas énormément en VBA...

                  J'ai donc ajouté un module et copié le code que tu m'as indiqué.

                  Faut-il auparant ajouter une ligne de type "Sub Ligne()" au début et "End Sub" à la fin ?

                  De plus dans le code que tu m'a donné à un moment il y a If valeur = Then faut-il mettre une valeur avant le "then" ?

                  Je suis embetant je sais ... :)

                  D'avance merci pour le coup de main !
                  0
                  1. Contributeur
                    Bonjour,
                    Si tu ne connais pas VBA et que tu n'as que 245 lignes, pourquoi ne pas simplement utiliser un copier/collage spécial ? Tu sélectionne tes 100 premieres cellules, ensuite tu les copie (CTRL+C ou click droit/copier), ensuite un clique droit sur ta cellule de destination/collage spécial et tu coches "Transposé".
                    0
                  2. @tompolsJe crois que son but est de copier les 100 cellules de sa colonne dans une seule, toutes séparé par ";"... transposé ne permet que de copier ses 100 cellules en ligne...
                    0
                  3. Contributeur
                    @ben13.51Oki, autant pr moi alors j'ai lu trop vite ! J'aimerai bien comprendre la finalité qd même, c une drôle de manip' (et puis si c'est pour générer un .csv, ça tient tjs la route avec le transposé...)
                    0
                  4. @tompolsOui tu as raison il serait intéressant de connaître le but de tout ça...
                    0
                2. Hello et merci d'être autant à me répondre !

                  Alors pour tout vous dire je travaille sous Business Objects sur des identifiants que l'on m'adresse sous Excel (j'ai pris 245 lignes dans mon exemple mais ca peut très bien être 950 lignes...voir plus) or dans Businiess Objets, lorsque que je veux travailler sur ces identifiants je ne peux pas en mettre plus de 100 dans une même ligne.

                  Exemple: chaque marque de voiture a un identifiant (123 pour renault, 456 pour peugeot, 789 pour citroën)

                  Je vais devoir remonter pour renault et peugeot le nombre de voiture en circulation, donc dans BO il va falloir que dans les critères de la requête je fasse la chose suivante:

                  Identifiant_voiture DANS LISTE (123;456) et chaque identifiant doit être séparé par un ";"

                  La il y a que deux identifiants mais je peux avoir à en mettre plusieurs centaines or par ligne dans BO il n'en accepte que 100...c'est pour que je puisse faire des copier coller rapidement des identifiants par liste de 100...

                  Je sais c'est pas évident à expliquer sur le net comme ça...si je ne suis pas clair n'hésitez pas à me revenir !

                  Merci encore!
                  0
                  1. Effectivement ton fichier peut m'être utile dans le cas ou j'ai moins de 100 identifiants...après ca se complique...
                    0
                    1. Par contre effectivement on voit pas le résultat du coup je copie colle la cellule I204 (je crois que c'est celle la) et j'ai l'info, merci pour ton aide en tout cas.
                      0
                      1. Merci à tous, en prenant les idées à droite à gauche de vos aides je suis parvenu à bout ! et il y a une grosse utilité derrière, un grand merci à tous encore une fois !

                        Cdt,

                        Jean
                        0
                        1. Bonjour Pissdrunk,

                          Désolé de reveiller un vieux topic mais étant moi même en train de faire du requêtage sous BO XI depuis pas longtemps, j'ai besoin de ton aide.

                          Je dois requeter à partir de fichiers .csv qui peuvent aller a beaucoup plus que 400 entrées, l'idée étant de faire une requête de 1000/2000 numéros et de la laisser tourner autant de temps que necessaire.

                          J'ai requêté pour une liste de 147 éléments et il n'y a eu aucun message d'erreur, je récupère bien les donnèes. Que voulais tu dire par "business object est limité a 100 entrées"?

                          Ce serait sympa de m'envoyer ta méthode.

                          Cordialement,

                          quentin
                          0