Problème Excel

Bonjour a tous,

J'ai un petit soucis avec excel... Je vais essayer de l'expliquer le plus clairement possible.

J'ai besoin d'informations de deux tableaux excel différents. 3 colonnes d'un tableau et 3 colonnes de l'autre. Pour simplifier les choses, disont que du premier tableau j'ai besoin de colonnes 1, 2 et 3, et du deuxième tableau j'ai besoin de colonnes A, B et C.

Dans mon nouveaux tableau, j'ai donc colonnes 1,2,3,A,B et C a l'affilé. Ce que j'aimerai faire maintenant c'est que j'aimerai trier la colonne 1 en ordre croissant mais que les colonnes 2 et 3 reste en relation avec la colonne 1. Et en plus de ça j'aimerai que les celulles de la colonne A qui correspondent a la colonne 1 soit au même niveau que celle-ci et que les colonnes B et C correspondent a la colonne A.

Dites moi si c'est pas clair, je vous aiderais a comprendre :)

Merci d'avance!

Guillaume

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Oui pas trop clair ton truc sachant que 1,2,3 sur excel sont des lignes, mais bon bref,

    Ce que je ne comprend pas c'est ton tri,
    Car quand tu tri une colonne par ordre croissant les autres colonnes suivent le pas (c'est a dire que si tu as 2 en B5 et 7 en C5, avant ton tri, tu retrouvera 2 en B2 et 7 en C2, en ayant trié que sur ta colonne B)

    Du coup... je ne vois pas ton problème ....

    Et en plus de ça j'aimerai que les celulles de la colonne A qui correspondent a la colonne 1 soit au même niveau que celle-ci et que les colonnes B et C correspondent a la colonne A.
    Et là je suis totalement perdu ...

    Edit: tu peux déposé ton fichier via cjoint.com et coller le lien ici

    "La vie c'est comme une boite de chocolat, on ne sait jamais sur quoi on va tomber"
    1. J'avoue ne pas avoir été très clair...

      En gros j'ai 6 colonnes qui viennent de 2 tableau différents, colonnes A, B, C, D, E et F. Colonnes A,C et E viennent d'un premier tableau et colonnes B,D et F viennent d'un autre tableau. Colonnes A et B reprennent les mêmes infos: un numéro d'achat. Donc, pour donner un exemple, le numéro en A1 correspond ac une date en C1 et un montant en E1, et le numéro en B1 correspond ac une date en D1 et un montant en F1. Ce que j'aimerai obtenir, c'est un tableau ou la colonne A est triée en ordre croissant, que les colonnes C et E suivent ce tri (donc qu'après le tri, le numéro en A1 corresponde a la date en C1 et le montant en E1), et que les valeurs en B qui correspondent avec les valeurs en A se mettent au même niveau que celles ci (donc que quand la valeur en A1 = 0,6 et que la valeur en B18 = 0,6 celle ci se mettent l'une a coté de l'autre en A1 et B1) et finalement je voudrais que, comme ac les colonnes A,C et E, les colonnes B, D et F restent en relation (donc que le numéro en B1 corresponde tjs a la date en D1 et le montant en F1).

      J'espère que c'est plus clair comme ça...

      Par contre je ne peux pas déposé mon fichier sur ce site car les informations sont confidentielles... désolé.

      Merci pour ton aide en tout cas!

      Guillaume
      1. C'est horrible ton truc ... j'en ai mal au crane ...

        Que ça soit confidentielle ou pas, remplace tes données par des valeurs test et ... met le fichier sur cjoint !!
        C'est un casse tete à lui tout seul !!
      2. ça m'aide un peu plus ...
        mais si tu fais un tri par ordre croissant sur ta colonne A ça ne t'avance pas ?
      3. Si, mais le soucis c'est que les autres colonne ne suivent pas...
        Et vu que je ne m'y connais que très peu en excel je ne sais pas comment régler le problème...
    2. Modérateur
      Bonjour,
      Excusez l'incruste...
      Certaines lignes contiennent en C une valeur et en A rien... Comment tu fais???
      1. les lignes qui contiennent une valeur en C et rien en A peuvent être supprimer. En fait les cellules A sont celle qui importe.
    3. Modérateur
      Encore une question :
      Certaines cellules en A qui possèdent plusieurs correspondances en B, que fait-on ?
      1. Il les faut aussi donc a ce moment la vous pouvez laisser des celulles vides après la celulle A jusqu'à ce qu'il n'y ai plus de correspondance ac les cellules B puis reprendre ac la suite. (p.e. A1=0,6 ; B1=0,6, B2=0,6, B3=0,6 puis poursuivre avec A2=0,7; B4=0,7) Donc il ne faut pas absolument que les cellules A et B soit les mêmes. Merci de ton aide!
      2. Modérateur
        Et pour les valeurs contenues dans la colonne B mais pas dans la colonne A???
      3. Pareil que pour C et A. Ce ne sont que les valeurs en A qui compte
      4. Les valeurs en B qui n'ont pas de correspondant en A peuvent donc être supprimées
    4. Modérateur
      Bon j'me suis pris la tête pendant 2 heures, je n'arrive pas à la simplifier...
      Un résultat approchant de ce que je crois que tu souhaites...
      Option Explicit
      
      Sub test()
      Dim TabloACE(), TabloBDF(), DrLig As Long, Lign As Long, Col As Integer
      Dim IndicC As Integer, IndicL As Long
      Dim Valeur As Integer
      Dim i As Integer, j As Integer
      Dim Cible1 As Variant, Cible2 As Variant, Cible3 As Variant
      
      With Sheets("Sheet4")
      'remplir la var TabloACE des données contenues en colonnes A, C & E
          IndicC = 3
          IndicL = Application.CountA(.Columns(1)) - 1
          ReDim TabloACE(1 To IndicC, 1 To IndicL)
          IndicC = 1
          IndicL = 1
          DrLig = .Range("A" & Rows.Count).End(xlUp).Row
          For Lign = 2 To DrLig
              If .Cells(Lign, 1) <> "" Then
                  For Col = 1 To 6 Step 2
                      TabloACE(IndicC, IndicL) = .Cells(Lign, Col)
                      IndicC = IndicC + 1
                  Next Col
                  IndicC = 1
                  IndicL = IndicL + 1
              End If
          Next Lign
      'trier la variable tableau ACE
          Do
              Valeur = 0
              For i = 1 To UBound(TabloACE, 2) - 1
                  If TabloACE(1, i) > TabloACE(1, i + 1) Then
                      Cible1 = TabloACE(1, i)
                      Cible2 = TabloACE(2, i)
                      Cible3 = TabloACE(3, i)
                      TabloACE(1, i) = TabloACE(1, i + 1)
                      TabloACE(2, i) = TabloACE(2, i + 1)
                      TabloACE(3, i) = TabloACE(3, i + 1)
                      TabloACE(1, i + 1) = Cible1
                      TabloACE(2, i + 1) = Cible2
                      TabloACE(3, i + 1) = Cible3
                      Valeur = 1
                  End If
              Next i
          Loop While Valeur = 1
      'remplir la var TabloBDF des données contenues en colonnes B, D & F
      'si on trouve en colonne B une des valeurs de A
          IndicL = 1
          DrLig = .Range("B" & Rows.Count).End(xlUp).Row
          For i = 1 To UBound(TabloACE, 2)
              For Lign = 2 To DrLig
                  If TabloACE(1, i) = .Cells(Lign, 2) Then
                      If i > 1 Then
                          If TabloACE(1, i) <> TabloACE(1, i - 1) Then
                              ReDim Preserve TabloBDF(1 To 3, 1 To IndicL)
                              TabloBDF(1, IndicL) = .Cells(Lign, 2)
                              TabloBDF(2, IndicL) = .Cells(Lign, 4)
                              TabloBDF(3, IndicL) = .Cells(Lign, 6)
                              IndicL = IndicL + 1
                          End If
                      Else
                          ReDim Preserve TabloBDF(1 To 3, 1 To IndicL)
                          TabloBDF(1, IndicL) = .Cells(Lign, 2)
                          TabloBDF(2, IndicL) = .Cells(Lign, 4)
                          TabloBDF(3, IndicL) = .Cells(Lign, 6)
                          IndicL = IndicL + 1
                      End If
                  End If
              Next Lign
          Next i
      End With
      MsgBox IndicL
      'restitution des données triées et réparties dans une nouvelle feuille
      ThisWorkbook.Worksheets.Add
      Lign = 1
      With ActiveSheet
          .Cells(Lign, 1) = TabloACE(1, 1)
          .Cells(Lign, 3) = TabloACE(2, 1)
          .Cells(Lign, 5) = TabloACE(3, 1)
          For i = 1 To UBound(TabloBDF, 2)
              If TabloACE(1, 1) = TabloBDF(1, i) Then
                  .Cells(Lign, 2) = TabloBDF(1, i)
                  .Cells(Lign, 4) = TabloBDF(2, i)
                  .Cells(Lign, 6) = TabloBDF(3, i)
                  Lign = Lign + 1
              End If
          Next i
          For j = 2 To UBound(TabloACE, 2)
              .Cells(Lign, 1) = TabloACE(1, j)
              .Cells(Lign, 3) = TabloACE(2, j)
              .Cells(Lign, 5) = TabloACE(3, j)
              If TabloACE(1, j) <> TabloACE(1, j - 1) Then
                  For i = 1 To UBound(TabloBDF, 2)
                      If TabloACE(1, j) = TabloBDF(1, i) Then
                          .Cells(Lign, 2) = TabloBDF(1, i)
                          .Cells(Lign, 4) = TabloBDF(2, i)
                          .Cells(Lign, 6) = TabloBDF(3, i)
                          Lign = Lign + 1
                      End If
                  Next i
              End If
              Lign = Lign + 1
          Next j
          DrLig = .Range("B" & Rows.Count).End(xlUp).Row
          'suppression des lignes vides
          For Lign = 1 To DrLig
              If Application.CountA(.Rows(Lign)) = 0 Then
                  .Rows(Lign).Delete
              End If
          Next
      End With
      End Sub

      Je sais ça à l'air trash... Mais bon quelqu'un d'autre trouvera surment (certainement même) mieux...
      Désolé...
      1. Waw! :o par contre je n'ai aucune idée de comment je dois remplir cela sur excel...
    5. Modérateur
      Re-
      1- Tu ouvres UNE COPIE DE ton fichier,
      2- tape ALT+F11,
      3- Insertion/Module
      4- copier coller le code placé plus haut.
      5- fermer la fenêtre visual basic editor

      6- Pour l'utiliser, tu retournes sous ta feuille Sheet4, tape ALT+F8, choisir test et cliquer sur exécuter...

      Regarde ton fichier exemple sans les feuilles inutiles...
      1. Bonjour Pijaku,
        Tout d'abord merci bcp pour ton aide et le temps que tu as mis a solutionné mon problème! Le résultat est impressionant. Par contre je n'arrive pas a un bon résultat en remplissant ton code dans excel, même si j'ai vu que mon fichier de départ que tu as modifier est exactement ce que je recherche... Peut-être pourrais-tu m'éclairer sur ce qui pourrait être le problème? Merci d'avance,

        Guillaume
      2. Modérateur
        Bonjour,
        Sans ton fichier original je ne peux pas t'aiguiller davantage.
        Tu peux me l'envoyer en Messagerie Privée, tu l'as trouveras dans mon profil en cliquant sur mon pseudo.