XL 2010 Trier de A a Z deux colonnes et représenter graphiquement

anthony.unac

XLDnaute Occasionnel
Bonjour,
Soit une colonne B (allant de B6:B55) chargée d'au plus 50 valeurs.
Soit une colonne D (allant de D6:D55) chargée d'au plus 50 valeurs.
Quelle macro (type "worksheet change") puis je écrire pour :
1/ Exécuter un tri de A a Z des valeurs comprises entre B6 et C55 (oui il s'agit bien des deux colonnes juxtaposées B et C mais comprises entres les lignes 6 et 55 incluses)
2/ Représenter graphiquement un histogramme 2D (bon en fait c'est un diagramme en barres) avec pour abscisse les valeurs de la colonne B et pour ordonnée les valeurs de la colonne D.

Je parviens à réaliser tout ceci à la main facilement mais un peu d'automatisation me serait d'un grand intérêt ;)
 

job75

XLDnaute Barbatruc
Bonjour anthony.unac, Bernard, le forum,

Pas compris ce que vient faire la colonne C dans le tri du tableau.

Et trier dans une Worksheet_Change n'est pas fameux car une donnée entrée en bas peut se retrouver d'un coup en haut.

Bonne journée.
 

anthony.unac

XLDnaute Occasionnel
Bonjour,
L'idée de l'enregistrement est excellente mais j'ai beau fouiller, je ne parviens plus à trouver le bouton qui lance l'enregistrement ?!
Pouvez vous me dire ou il est et comment il s'appelle (je vais fouiller sur google en //)
La colonne C est totalement liée à la colonne B de sorte que si on trie B les valeurs de C doivent suivre.
Concernant le tri dans une worksheetchange j'assume pleinement les conséquences que cela peut engendrer et qui sont souhaitables à vrai dire ici ;)
Cordialement
 

anthony.unac

XLDnaute Occasionnel
Re,
Après recherche, j'ai trouvé la manière d'enregistrer mes actions dans une macro et voici ce que ça donne pour le tri uniquement de B6 à C55 :

Code:
Sub Macro1()
'
' Macro1 Macro
'

'
    Range("B6:C55").Select
    ActiveWorkbook.Worksheets("S-Wilk Test").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("S-Wilk Test").Sort.SortFields.Add Key:=Range("B6") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("S-Wilk Test").Sort
        .SetRange Range("B6:C55")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Est ce normal que ce soit aussi détaillé ?
 

job75

XLDnaute Barbatruc
Re,
La colonne C est totalement liée à la colonne B de sorte que si on trie B les valeurs de C doivent suivre.
Bah toutes les colonnes du tableau doivent suivre bien sûr !
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Rows("6:55").Sort [B6], xlAscending, Header:=xlNo
End Sub
Normalement le graphique défini sur B6:B55 et D6: D55 s'ajuste automatiquement.

A+
 

anthony.unac

XLDnaute Occasionnel
Ah oui votre code est plus compact !
Concernant la représentation graphique j'obtiens un code de ce genre :

Code:
Range("D6:D55").Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlColumnClustered
    ActiveChart.SetSourceData Source:=Range("'S-Wilk Test'!$D$6:$D$55")
    ActiveChart.SeriesCollection(1).Select
    ActiveChart.SeriesCollection(1).XValues = "='S-Wilk Test'!$B$6:$B$55"

Mais il manque une condition très importante, le fait qu'il ne sélectionne pas les valeurs vides "". Par exemple, si la colonne D contient 12 valeurs, il doit prendre les valeurs de D6 à D_[6+NBVAL(D6:D55)-1] = D_[6+12-1] = D17
Comment coder ça simplement ?
 
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Pas compris ce que vous voulez faire avec les cellules vides.

Normalement elles donnent des "trous" dans le graphique.

Pour les éviter il faut y mettre la valeur #N/A.

Vous pouvez aussi trier le tableau sur la colonne D et définir le tableau dynamiquement.

Si vous ne savez pas faire joignez votre fichier (anonymisé et sans données confidentielles).

A+
 

job75

XLDnaute Barbatruc
Re,

Ci-joint le fichier complété avec ce code dans la Worksheet_Change de la feuille "S-Wilk Test" :
Code:
'TRIER LES ESTIMATIONS DE LA PLUS PETITE A LA PLUS GRANDE
[B6:K55].Sort [B6], xlAscending, Header:=xlNo

'REPRESENTER GRAPHIQUEMENT LES ESTIMATIONS SOUS FORME DE DIAGRAMME EN BARRES AVEC LES ESTIMATIONS EN ABSCISSE ET LA CREDIBILITE EN ORDONNEE
n = Application.CountA([B6:B55])
If n = 0 Then n = 1
With ChartObjects("Graphique 1").Chart.SeriesCollection(1) 'adapter le nom du graphique
    .XValues = [B6].Resize(n)
    .Values = [D6].Resize(n)
End With
A+
 

Pièces jointes

  • Estimateur de Grandeurs - Copie.xlsm
    150.3 KB · Affichages: 10

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa