copie de valeurs et classement par valeur croissante - tableau de variables?

knaekes

XLDnaute Occasionnel
bonjour,
Je souhaite récupérer des données présentes dans plusieurs onglets, les trier selon l'ordre croissant, puis les recopier dans un autre onglet.

Comment faire? faut-il passer par un tableau de variable?

cordialement
 

Pièces jointes

  • classementa .xlsm
    18.5 KB · Affichages: 97
  • classementa .xlsm
    18.5 KB · Affichages: 100
  • classementa .xlsm
    18.5 KB · Affichages: 99

pierrejean

XLDnaute Barbatruc
Re : copie de valeurs et classement par valeur croissante - tableau de variables?

Bonjour knaekes

Vois si cela te convient
 

Pièces jointes

  • classementa .xlsm
    27.7 KB · Affichages: 76
  • classementa .xlsm
    27.7 KB · Affichages: 78
  • classementa .xlsm
    27.7 KB · Affichages: 77

ROGER2327

XLDnaute Barbatruc
Re : copie de valeurs et classement par valeur croissante - tableau de variables?

Bonjour knaekes, pierrejean (heureux de vous retrouvez (poil au nez))


Une proposition paramétrée :​
VB:
Sub classer() 'À placer dans un module standard.

Dim iFl&, jFl&
Dim oFl(), cFl&, lFl&, nCl&, dFl$

    With Application: .ScreenUpdating = 0: .Calculation = -4135: .EnableEvents = 0: End With
    
'Paramètres :
    oFl = Array("1", "2", "3") 'feuilles d'origine.
    dFl = "classement" 'feuille de destination.
    cFl = 4 'colonnes à traiter dans chaqu feuille.
    lFl = 16 'lignes à copier dans chaque feuille.
    nCl = 8 'colonnes à conserver.

    Worksheets.Add
    On Error GoTo E
    For iFl = 0 To UBound(oFl)
        With Sheets(oFl(iFl))
            For jFl = 1 To cFl
                .Cells(1, 2 * jFl).Resize(lFl, 1).Copy Destination:=Cells(1, cFl * iFl + jFl)
            Next
        End With
    Next
    With ActiveSheet.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A1").Resize(1, cFl * (UBound(oFl) + 1)), SortOn:=xlSortOnValues, _
            Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("A1").Resize(lFl, cFl * (UBound(oFl) + 1))
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlLeftToRight
        .Apply
    End With

'======   Sortie (valeurs seules) :   ======

ReDim oVal(1 To lFl, 1 To nCl)
    oVal = Range("A1").Resize(lFl, nCl).Value
    Worksheets(dFl).Cells(2, 2).Resize(lFl, nCl).Value = oVal
    
'======   ou (formules, formats) :   =======

'    Range("A1").Resize(lFl, nCl).Copy Destination:=Worksheets(dFl).Cells(2, 2)

'===========================================

R:  Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
    On Error Resume Next
    Sheets(dFl).Activate
    With Application: .EnableEvents = 1: .Calculation = -4105: .ScreenUpdating = 1: End With
Exit Sub

E:
    MsgBox "Une erreur est survenue." & vbLf & vbLf & _
        "Vérifiez qu 'il existe des données à traiter" & vbLf & _
        "et que toutes les feuilles requises existent.", vbOKOnly
    Resume R

End Sub



ROGER2327
#6301


Mardi 17 Sable 140 (Saint Moyen, français - fête Suprême Quarte)
27 Frimaire An CCXXI, 7,5826h - liége
2012-W51-1T18:11:54Z
 

knaekes

XLDnaute Occasionnel
Re : copie de valeurs et classement par valeur croissante - tableau de variables?

Bonjour pierrejean, bonjour ROGER2327

merci pour vos réponses, les deux fonctionnent dans mon exemple
Pour l'adapter à mon cas réel je me suis orienté vers la solution de pierrejean avec un tableau de variables.

Est-il envisageable de compléter le tableau de variables avec les valeurs réelles (et non les références des cellules)? Ceci afin de recopier les données dans la zone d'origine tout en modifiant le classement. Par ailleurs dans mon cas réel la valeur référence pour le classement se trouve dans une autre colonne.

tout cela est plus clairement expliqué dans le fichier joint ...

j'arrive à remplir un tableau de variable avec les données "orange", mais cela coince pour la valeur de référence, pour le classement, et pour le recopiage ...

merci d'avance pour votre contribution

très bonne journée à vous
 

Pièces jointes

  • classement2 - Copie.xlsm
    71.8 KB · Affichages: 63

pierrejean

XLDnaute Barbatruc
Re : copie de valeurs et classement par valeur croissante - tableau de variables?

Re

Et salut ami ROGER

De retour d'une petite excursion de 2 jours je trouve ta reponse
Avant d'aller plus loin j'aimerai avoir des certitudes concernant le probleme:
Les cellules en bleu foncé sont elles toujours en ligne 22 et toujours a la même place par rapport au module (3eme colonne par rapport au debut du module
 

knaekes

XLDnaute Occasionnel
Re : copie de valeurs et classement par valeur croissante - tableau de variables?

Bonjour pierrejean

Les cellules bleu foncé sont toutes sur la même ligne, mais pas forcément sur la ligne 22.
Les nombres dans les cellules bleu foncé sont en fait les totaux des lignes bleus du dessus.
Le nombre de ligne dessus est variable (on peut en ajouter ou en supprimer au fur et à mesure).
pour trouver la ligne correspondante, je fais préalablement une recherche sur la première colonne du mot "total"

par contre, oui, sa place est toujours dans la troisième colonne par rapport au début du module.
 

knaekes

XLDnaute Occasionnel
Re : copie de valeurs et classement par valeur croissante - tableau de variables?

si cela peut simplifier la chose, au lieu de partir sur un nombre évolutif de module. on peut limiter ce nombre à 15.

par contre il se pourrait que tous ne soit pas remplie. ou sinon on peut aussi y faire figurer une valeur excessive de tel manière à ce qu'elles soient classées dans les dernières positions
 

pierrejean

XLDnaute Barbatruc
Re : copie de valeurs et classement par valeur croissante - tableau de variables?

Re

La mention Total est-elle toujours dans la même colonne du Module ? Si oui laquelle ?
la cellule bleu foncé est-elle toujours au même endroit par rapport a ce mot Total ? Si oui ou ?
Le nbre de de modules peut etre aussi important qu'on le veut
Pour peu que les cellules bleu foncé des modules non remplis soit vide ,il n'y a pas de probleme
 

knaekes

XLDnaute Occasionnel
Re : copie de valeurs et classement par valeur croissante - tableau de variables?

La mention total n'apparait qu'une seule fois et se trouve dans la premiere colonne (la colonne A) et sur la même ligne que les montants totaux.

ci-joint le fichier
 

Pièces jointes

  • classement22.xlsm
    71.6 KB · Affichages: 60
  • classement22.xlsm
    71.6 KB · Affichages: 64
  • classement22.xlsm
    71.6 KB · Affichages: 56

pierrejean

XLDnaute Barbatruc
Re : copie de valeurs et classement par valeur croissante - tableau de variables?

Re

Teste ceci
En hommage au camarade ROGER , j'ai paramétré la macro
Elle devrait accepter quelques modifications sous reserve de servir les premiers parametres
Toutefois je suis un grand faineant et je n'ai pas tout testé (je n'aime pas ça !!!)
PS: La feuil1 m'a servi de memoire pour la feuille d'origine : elle peut etre effacée
 

Pièces jointes

  • classement22.xlsm
    94.1 KB · Affichages: 62
  • classement22.xlsm
    94.1 KB · Affichages: 50
  • classement22.xlsm
    94.1 KB · Affichages: 59

knaekes

XLDnaute Occasionnel
Re : copie de valeurs et classement par valeur croissante - tableau de variables?

Bonjour pierrejean

Est-il possible d'adapter le code afin de ne pas tenir compte des modules "vide" et de les décaler à la fin de la série de modules?
Pour l'instant j'arrive à les ignorer, mais il restent à leur place (au lieu d'être décalé à la fin).

Si il n'est pas possible de les décaler j'imposerai le remplissage des modules de manière à ce que les modules vides se trouve initialement à la fin et ne bouge plus lors du classemenent

Merci
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 307
Messages
2 087 101
Membres
103 468
dernier inscrit
TRINITY