Classement rangs et recuperation de donnees automatiques

  • Initiateur de la discussion Initiateur de la discussion moustic54
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

moustic54

XLDnaute Occasionnel
Bonjour à tous,

Le titre du message n'est pas explicite.
Je voudrais pouvoir à partir d'un onglet base, récupérer automatiquement les données sur un nouvel onglet,
- selon les 9 titres se trouvant dans l'onglet base
- les n° et départements des 13 premiers classés selon leurs rangs (du 1er au 13eme rang inclus)

Je joins un fichier pour être plus clair.

Merci d'avance à toux ceux et celles qui pourront m'aider.
 

Pièces jointes

Re : Classement rangs et recuperation de donnees automatiques

Bonjour.
Essayez de compiler le projet VBA pour vérifier si tout est OK, sinon vérifiez si vous avez suivi toutes mes recommandations.
Ou re joignez le fichier, que je voie ce qui cloche.
À +
 
Re : Classement rangs et recuperation de donnees automatiques

Bonsoir Dranreb,

J'ai des erreurs partout...
J'ai essayé de suivre vos recommandations mais je ne suis pas doué dans l'adaptation de vos macros aux différents tableaux - Bilans qui ne sont pas tous disposés dans le même sens ni dans le même ordre.
 

Pièces jointes

Re : Classement rangs et recuperation de donnees automatiques

Ah si, ça n'a pas été trop mal suivi, à un détail près: vous avez mis la formule seulement sur la dernière colonne de certains tableaux, alors qu'elle est prévue pour produire l'intégralité du tableau dans une plage matricielle de 13 lignes et 3 colonnes, de sorte qu'elle y restitue le n° de département qui devait aller dans la 1ère ! J'avais bien dit : En A7:C19 de "BILAN 1A"
Autre chose que j'avais oublié de vous dire parce que ça me paraissait évident: dans les bilans où vous voulez utiliser la formule matricielle il faut enlever la Worksheet_Activate: elle fait double emploi avec la fonction personnalisée.
Cela dit, la fonction pourrait être utilisée différemment, dans les Worksheet_Activate, qui seraient alors peut être plus facile à écrire pour vous: vous n'auriez au moins plus à calculer les tableaux, mais juste à vider dans les bonne plages le résultat de la fonction convenablement paramétrée.
Là, avec la solution de facilité qu'est la formule utilisant la fonction, j'ai peur que la moindre modif dans les données entraine la réévaluation de toutes ces formules et donc des temps d'attente. Mais ce n'est pas sûr: la fonction est tout de même rapide à évaluer. Alors essayez quand même.
À +
 
Re : Classement rangs et recuperation de donnees automatiques

Bonjour Dranreb

1. La formule matricielle a été utilisée sur l'ensemble du tableau "titre 1" Bilan 1A lié à Base 1 mais j'ai toujours 60 dans l'ensemble des cellules
2. Comment vont se remplir les autres tableaux de ce onglet si nous n'y ajoutons aucune autre formule dans Private Sub Worksheet_Activate() ?
3. Lorsque j'active l'onglet Bilan 1B lié à Base 1, j'ai un message d'erreur " l'indice n'appartient pas à la selection"
Croiss = Split(Plage.Offset(, 1).Formula, ",")(2) = "1)"

Dans la formule ci-dessous
Private Sub Worksheet_Activate()

Dim TDéptmt() As Variant, LMax As Long, M As Long, X As New TableIndex, Croiss As Boolean, _
Plage As Range, TRng() As Variant, L As Long, TRésu() As Variant, N As Long
TDéptmt = FBas1.Range("B5:C" & FBas1.[B65536].End(xlUp).Row).Value
LMax = UBound(TDéptmt)
ReDim TLgn(1 To LMax) As Long
For M = 1 To 13
If M = 13 Then Set Plage = FBas1.[AK5] _
Else Set Plage = FBas1.[K5].Offset(, (M - 1) * 4)
TRng = Plage.Resize(LMax, 2).Value
Croiss = Split(Plage.Offset(, 1).Formula, ",")(2) = "1)"
X.Init 1, LMax
While X.Actif
X.BInfA = Croiss Eqv TRng(X.B, 1) < TRng(X.A, 1)
Wend
ReDim TRésu(1 To 13, 1 To 3)
X.Parcourir
For N = 1 To 13: L = X.Suivant
TRésu(N, 1) = TDéptmt(L, 1)
TRésu(N, 2) = TDéptmt(L, 2)
TRésu(N, 3) = TRng(L, 2): Next N
Me.Cells(((M - 1) \ 2) * 22 + 7, ((M - 1) Mod 3) * 4 + 1).Resize(13, 3).Value = TRésu
Next M
End Sub
 
Re : Classement rangs et recuperation de donnees automatiques

Bonsoir.
1. La formule matricielle a été utilisée sur l'ensemble du tableau "titre 1" Bilan 1A lié à Base 1 mais j'ai toujours 60 dans l'ensemble des cellules
Vous avez probablement validé la formule sur une seule cellule puis l'avez propagée sur les 13 lignes et 3 colonnes, au lieu de la valider une seule fois en matriciel (Ctrl+Maj+Entrée) sur l'ensemble de toute la plage matricielle de 13 lignes et 3 colonnes préalablement sélectionnée.
La validation matricielle n'a pas le même effet que la validation normale par simple Entrée, quand une plage de plusieurs cellules est sélectionnée: en validation normale la formule n'est validée que pour la cellule active, tandis que qu'en validation matricielle elle est validée pour toute la plage sélectionnée.
2. Comment vont se remplir les autres tableaux de ce onglet si nous n'y ajoutons aucune autre formule dans Private Sub Worksheet_Activate() ?
La formule matricielle se charge de tout: vous y spécifiez chaque fois les 3 paramètres spécifiques à prendre en compte pour chaque tableau.
Mais vous pouvez aussi ne pas utiliser la fonction dans une formule matricielle, mais vous en servir dans des Worksheet_Activate commençant comme ça:
VB:
Private Sub Worksheet_Activate()
Me.[A7:C19].Value = Bilan(FBas1.[K5:K73], False, FBas1.[B5:C73])
Me.[E7:G19].Value = Bilan(FBas1.[O5:O73], True, FBas1.[B5:C73])
' etc.
C'est l'un ou l'autre mais pas les deux.
3. Lorsque j'active l'onglet Bilan 1B lié à Base 1, j'ai un message d'erreur " l'indice n'appartient pas à la selection"
La plage ne correspond sans doute pas, dans cette feuille, à une formule =RANG(… d'où je tirais le 3ième paramètre pour décider s'il fallait classer en ordre croissant ou décroissant. Avec la fonction, c'est le 2ième paramètre, Boolean, qui est à spécifier pour cela.
À +
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour