Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
    23.5 KB · Affichages: 104
  • Sans titre.png
    23.5 KB · Affichages: 106
  • Sans titre.png
    23.5 KB · Affichages: 116

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
327
  • Question
Microsoft 365 couleurs
Réponses
12
Affichages
358
Réponses
5
Affichages
325
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…