Ranger les données d'un tableau en les comptant dans un autre tableau

Makina

XLDnaute Junior
Bonjour à tous,

Encore une fois je vous solicite pour m aider.
Voila j ai un tableau sur 2 colonnes que je range en fonction des des colonnes. Dans ma premiere colonne j ai des chiffres et dans la seconde des lettres. J'aimerais reporter dans un autre tableau les données de la facon suivante :
- tant que le chiffre reste le meme dans ma colonne 1, j'ecris sur une ligne de mon tableau 2
-reporter ce chiffre dans la premiere colonne de mon tableau 2 suivi des lettres de la colonne 2 de mon tableau 1 avec leur nombres d aparition.
J ai deja fait un code très long qui bug parfois quand j ai deux fois la meme lettre qui se suit pour un chiffre different ...

La photo jointe sera beaucoup plus explicite que ma description.

Merci d avance de votre aide ! ! !
 

Pièces jointes

  • Sans titre.png
    Sans titre.png
    23.5 KB · Affichages: 103
  • Sans titre.png
    Sans titre.png
    23.5 KB · Affichages: 105
  • Sans titre.png
    Sans titre.png
    23.5 KB · Affichages: 115

JHA

XLDnaute Barbatruc
Re : Ranger les données d'un tableau en les comptant dans un autre tableau

Bonjour à tous,

Avec mode tableau et filtre

JHA
 

Pièces jointes

  • Classeur2.xlsm
    20.5 KB · Affichages: 53
  • Classeur2.xlsm
    20.5 KB · Affichages: 50
  • Classeur2.xlsm
    20.5 KB · Affichages: 47

Makina

XLDnaute Junior
Re : Ranger les données d'un tableau en les comptant dans un autre tableau

Merci pour ta réponse JHA, mais ce n est pas ce que je cherche.
Deja, grand oublie de ma par, je cherche a le faire en vba car ca sera dans une macro. j ai deja la ligne qui range mon tableau en fonction des deux colonnes. Voici mon programme acctuel :
Code:
'lire le nombre de ligne à prendre en compte
p = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(2, 1).Value

Worksheets("Code_barre").Select

'ranger la matrice de valeur
Range(Cells(3, 1), Cells(p, 7)).Sort Key1:=Cells(3, 6), Key2:=Cells(3, 7)
Worksheets("feuil1").Select

k = 9
i = 3
m = 4
n = 1

'vérifie tous les codes barres
If p = 3 Then
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 1) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m - 1, 6)
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 2) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m - 1, 2)
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, i) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m - 1, 7)
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, i + 1) = n
End If

For m = 4 To p
    n = 1
    If p = 4 Then
        Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 1) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m - 1, 6)
        Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 2) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m - 1, 2)
        Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, i) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m - 1, 7)
        Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, i + 1) = n
        k = k + 1
    End If
    
    'si position n differente de position n+1, sauter une ligne
    If Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + n - 1, 7) <> Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + n - 2, 7) Then
        m = m + 1

    End If

    'compter le nombre de meme position, si la commande est la meme
    While Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + n - 1, 6) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + n - 2, 6) And n < p And Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + n - 1, 7) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + n - 2, 7)
        n = n + 1
    Wend
    
    'inscrire le nombre de meme position
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, i + 1) = n
    
    'décrémenter pour une position differente
    If Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + n - 2, 7) <> Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + n - 3, 7) Then
        m = m - 1
    End If
    
    'inscrire la position
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, i) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 7)

    'vérifier si la commande à changé
    If Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + 1, 6) <> Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 6) Then
        k = k + 1
        i = 3
        z = 1
        If m = p Then
            k = k - 1
            Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 1) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 6)
            Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 2) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 2)
            Else
            GoTo 20
        End If

    End If
    
    'Recopier le numéro de commande technifen
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 1) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 6)
    'recopier le numéro de commande easywin
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 2) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 2)

    'incrémenter la ligne pour la position suivante
    If Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 6) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m - 1, 6) And m < p Then
        i = i + 2
20
    End If
Next

If Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(9, 1) <> Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(3, 6) Then
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(9, 1) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(3, 6)
End If

        
m = 9
i = 3
k = i
C = i
n = 1

'balayer le tableau entier
For m = 9 To 17
For C = 3 To 19 Step 2
n = 1
l = C
    'regarder si deux meme positions se suivent
    While Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(m, C) = Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(m, C + 2)
        C = C + 2
        n = n + 1
        If C >= 21 Then
            GoTo 30
        End If
    Wend
30
    'si deux positions se suivent, décaller les cases
    If n >= 2 Then
        Do Until C >= 21
            Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(m, l + 2) = Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(m, C + 2)
            Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(m, l + 3) = Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(m, C + 3)
            C = C + 1
            l = l + 1
        Loop
    End If
Next C
Next m

Je sais pertinament que ce code à des problèmes. Pour l instant je reporte tout sur une ligne et il bug du coup j utilise la seconde partie du programme pour decaller les case si ca a mal fonctionné.

Merci d avance.
 
Dernière édition:

Makina

XLDnaute Junior
Re : Ranger les données d'un tableau en les comptant dans un autre tableau

Alors après réflexion et reprise à zero de mon code j ai une version beaucoup plus courte et qui fonctionne :

Code:
Sub trier() 'trie le tableau par n° de comd puis position


'lire le nombre de ligne à prendre en compte
p = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(2, 1).Value

Worksheets("Code_barre").Select

'ranger la matrice de valeur
Range(Cells(3, 1), Cells(p, 7)).Sort Key1:=Cells(3, 6), Key2:=Cells(3, 7)
Worksheets("feuil1").Select

k = 9
i = 3
m = 3

'vérifie tous les codes barres
If p = 3 Then
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 1) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m - 1, 6)
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 2) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m - 1, 2)
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, i) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m - 1, 7)
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, i + 1) = n
End If

For m = 3 To p
    n = 1
    l = m
50
    While Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 6) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + 1, 6) And Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 7) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + 1, 7)
        m = m + 1
        n = n + 1
    Wend
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 1) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 6)
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, 2) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 2)
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, i) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 7)
    Workbooks("Cartonette_v2.xlsm").Sheets("Feuil1").Cells(k, i + 1) = n

    If Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m, 6) = Workbooks("Cartonette_v2.xlsm").Sheets("Code_barre").Cells(m + 1, 6) Then
        n = 1
        i = i + 2
        m = m + 1
        GoTo 50
    Else
        k = k + 1
        i = 3
    End If
    
Next
Call ImporterDonnees

    
End Sub

Voila, si ca peut aider quelqun !
 

Discussions similaires

Réponses
0
Affichages
229

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin