[ RESOLU ] Tries ,classer.et transferer dans d'autres pages..???

Guido

XLDnaute Accro
Bonjour le Forum

Dans la page Data Données Brute se trouve des données .

La page Data D B est divisée par 4 plages identiques, qui elle-même contiennent 10 plages

Ces données change selon l'évolution des arrivées par un clic de ma part.

Clic que je fait une fois toutes les demi heures..???

Je Vous explique ma demande

1° Triés les 40 plages qui se trouvent dans Data Données Brute

Le tri concerne la colonne " F " du plus petit au plus grand

ceci pour les 40 plages contenant les données en colonne " F " pour faire les classements

2° Apres avoir effectués les tris….

Sélectionnées les 3 premiers N° qui se trouvent dans la colonne " K "

et faire un copier -coller speciale avec transposé dans les


feuilles V 1000 % R1 ,R2 .R3 ,R4 dans le Tableau arrivées Plage C29:E38.

Dans la page Data …Dezire je l'ai fais manuellement..

Merci pour votre future aide.

Guido
 

Pièces jointes

  • TRANSFERER LES CHIFFRES DES 3 PLUS PETITS N° de chaques plages....xls
    348.5 KB · Affichages: 52

klin89

XLDnaute Accro
Bonsoir Guido, le forum :)

Une piste à suivre :

Quand vous avez des données "dispersées" (c'est le cas ici), le mieux est d'utiliser un dictionnaire parent et des dictionnaires enfants. (enfin : c'est mon avis)
De toute de façon, je suis nul en formules :confused:

Il faudra parcourir toutes les zones de la feuille "Data Données Brute"
zone = matrice de 20 lignes x 12 colonnes à partir de la ligne 2

Exemple :
Pour la 1ère zone de la feuille "Data Données Brute"

La clé du dictionnaire parent prendra la valeur de la concaténation de la chaine "V 1000 % " et des 2 premiers caractères de la cellule "L3" soit la chaine "R1"
clé = "V 1000 % R1"

La clé du dictionnaire enfant prendra la valeur de la cellule "L3" soit la chaine "R1C1"
clé = "R1C1"

Les clés du dictionnaire petit enfant prendront les valeurs figurant en colonne F de la zone concernée soit l'ordre d'arrivée 1,2,3 etc....
Pas besoin de trier, l'ordre n'a pas d'importance
Les différentes clés seront converties ou remplacées comme ci-dessous :
clé = "1er"
clé = "2è"
clé = "3è"
etc....

Les éléments, associés à toutes ces clés, prendront les valeurs situées en colonne K au regard de la colonnes F soit les n° de dossard

Ensuite, à l'aide de la méthode exists du dictionnaire, vous parcourrez successivement :

- les feuilles concernées commençant par la chaine "V 1000 % " (clés du dictionnaire parent)
- le tableau "Arrivée" commençant en "B27"
- les cellules de la colonne 1 (clés du dictionnaire enfant)
- et enfin les cellules de la ligne 2 (clés du dictionnaire petit enfant)

A partir de là, vous affecterez les éléments (n° de dossard) issus des dictionnaires aux cellules de chaque tableau "Arrivée"

C'est relativement simple à réaliser.
Voilà pour l'éclairage ;)

D'habitude, je suis avare en explications, mais là j'ai fait un effort, sans doute le retour du soleil :D

Edit : je n'ai pas le temps de travailler cet exercice.

klin89
 
Dernière édition:

klin89

XLDnaute Accro
Re Guido :)

Voilà ce que représente la 1ère partie de ton code.
VB:
Option Explicit
Sub ventile()
Dim a, i As Long, k As Byte, txt As String, dico As Object
    'creation du dictionnaire parent
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    With Sheets("Data Données  Brute")
        For i = 2 To 801 Step 20
            'plage à traiter
            a = .Range("A" & i & ": L" & i + 19).Value
            'clé = nom de la feuille de destination
            txt = "V 1000 %  " & Left(a(2, 12), 2)
            If Not dico.exists(txt) Then
                'creation du dictionnaire enfant
                Set dico(txt) = CreateObject("Scripting.Dictionary")
                dico(txt).CompareMode = 1
            End If
            'clé = nom de la réunion
            If Not dico(txt).exists(a(2, 12)) Then
                'creation du dictionnaire petit enfant
                Set dico(txt)(a(2, 12)) = CreateObject("Scripting.Dictionary")
                dico(txt)(a(2, 12)).CompareMode = 1
            End If
            For k = 1 To UBound(a, 1)
                If Not IsEmpty(a(k, 6)) Then
                    'clé = n° d'ordre d'arrivée converti pour la circonstance
                    a(k, 6) = a(k, 6) & IIf(a(k, 6) = 1, "er", "è")
                    If Not dico(txt)(a(2, 12)).exists(a(k, 6)) Then
                        'on affecte l'element soit le n° de dossard situé en colonne 11
                        dico(txt)(a(2, 12))(a(k, 6)) = a(k, 11)
                    End If
                End If
            Next
        Next
    End With
    Set dico = Nothing
End Sub
Reste à parcourir tes feuilles et ventiler tes données ;)
As-tu compris le cheminement ?

A+ klin89
 

Guido

XLDnaute Accro
Re

klin89 Merci pour le code VBA.

Jai ajouter la macro et nommé ventile..

Ca ne marche pas ,mais je ne suis parfois pas doué pour certaines macro ??

Au moins ,,j'ai essayé..

A plus

Guido
 

Pièces jointes

  • TRANSFERER LES CHIFFRES DES 3 PLUS PETITS N° de chaques plages... V1.xls
    365.5 KB · Affichages: 31

ChTi160

XLDnaute Barbatruc
Bonjour Guido
Bonjour le Fil ,Le Forum
une première approche du Transfert en feuille "Data Mon Dezire"
j'ai supprimé des espaces dans les noms de feuilles .
j'ai trié les données dans la feuille "Source" "a voir !
j'ai considéré que la feuille "Data Mon Dezire" était en forme , je n'ai fait qu’effacer les Données ,pour y coller les nouvelles .
je n'ai pas compris pourquoi quand il n'y a pas de classement, la liste est transférée entièrement alors que les autres seuls les trois premiers ?
a voir et a améliorer surement
dans l'attente
Bonne Journée
amicalement
Jean marie
 

Pièces jointes

  • TRANSFERER LES CHIFFRES DES 3 PLUS PETITS N° de chaques plages 2.xlsm
    173 KB · Affichages: 31

ChTi160

XLDnaute Barbatruc
Re
une avancée , les données sont collées dans les feuilles "V 1000 % Rx"
je n'ai pas compris comment sont définies les données de la plage "C3:C19" des feuilles "V 1000 % x"
dans l'attente
Bonne journée
Amicalement
Jean marie
 

Pièces jointes

  • TRANSFERER LES CHIFFRES DES 3 PLUS PETITS N° de chaques plages 3.xlsm
    188.4 KB · Affichages: 32

Guido

XLDnaute Accro
Re

ChTi160

Merci pour le fichier.

Les cellules sont remplies manuellement pour le moment

le bouton ,je n'arrive pas a l'utilisé. Une croix s'affiche quand je passe dessus...???Boutons non activé ???

Merci a plus

Guido
 

ChTi160

XLDnaute Barbatruc
ok
je change de genre de lancement.
chez moi pas de problème Lol
As tu pu tester ?
Amicalement
Jean marie
 

Pièces jointes

  • TRANSFERER LES CHIFFRES DES 3 PLUS PETITS N° de chaques plages 4.xlsm
    183.4 KB · Affichages: 31
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
je viens de constater qu'il y a une erreur de report des RxCx dans les feuilles "V 1000% Rx"
la feuille "V 1000 % R1" ne doit je pense contenir que les Courses de la R1 !
je corrige cela ce soir lol
Bonne fin de Journée
Amicalement
Jean Marie
 

Guido

XLDnaute Accro
Re

Oui,c'est bien cela .

sachant que tu aimes bien me faire des surprises.

Serait il possibles de faire afficher une MFC selon que

les chx qui se trouvent en C3 C5 C7 C9 C11 C13 C15 C17 C19 selon le tableau C29:E38

Merci d'avance

Guido
 

ChTi160

XLDnaute Barbatruc
Re
Je crois qu il y a un probleme dans ton exemple !
Les RxCx du haut ne correspondent pas a ceux du bas lol
Mais je pense avoir compris.
J accompagne la classe de ma petite fille a la piscine et ce soir je regarde.
Bonne fin se journee
Amicalement
Jean marie
 

Discussions similaires

Statistiques des forums

Discussions
312 074
Messages
2 085 067
Membres
102 770
dernier inscrit
mathieu.lemaitre