Création formule Rang en macro

Bonjour à tous,

Je vous joint la pièce jointe dans le message ^^

J'ai pour projet de faire dans la colonne A une colonne rang qui me donnerait l'ordre des actions avec le pourcentage le plus élevé,

J'ai créer 3 boutons sur le coté et j'aimerai en faite qu'en cliquant sur l'un des 3 boutons que celà me donne le rang sur la colonne A

Est-ce que c'est réalisable ? Merci d'avance !

Bonjour Clemdu08, le forum,

J'ai pour projet de faire dans la colonne A une colonne rang qui me donnerait l'ordre des actions avec le pourcentage le plus élevé

A tester:

Option Explicit
 Dim i As Integer, dl As Integer
 Dim plage As Range

Sub Tri3jours()
 Application.ScreenUpdating = False '..........................................................désactive le rafraichissement de l'écran

  With Sheets("Feuil1") '......................................................................agit "Feuil1"
   dl = .Range("J" & Rows.Count).End(xlUp).Row  '..............................................dernière ligne de la colonne J (à adapter)
    Set plage = .Range("G2:G" & dl) '..........................................................plage de recherche
     For i = 2 To dl '.........................................................................boucle de la ligne 2 à la dernière
      .Range("A" & i).Value = Application.WorksheetFunction.Rank(.Range("G" & i), plage, 0) '..fonction rang colonne G
     Next i '..................................................................................ligne suivante
  End With
End Sub
Sub Tri15jours()
 Application.ScreenUpdating = False '..........................................................désactive le rafraichissement de l'écran

  With Sheets("Feuil1") '......................................................................agit "Feuil1"
   dl = .Range("J" & Rows.Count).End(xlUp).Row  '..............................................dernière ligne de la colonne J (à adapter)
    Set plage = .Range("H2:H" & dl) '..........................................................plage de recherche
     For i = 2 To dl '.........................................................................boucle de la ligne 2 à la dernière
      .Range("A" & i).Value = Application.WorksheetFunction.Rank(.Range("H" & i), plage, 0) '..fonction rang colonne H
     Next i '..................................................................................ligne suivante
  End With
End Sub
Sub Tri30jours()
 Application.ScreenUpdating = False '..........................................................désactive le rafraichissement de l'écran

  With Sheets("Feuil1") '......................................................................agit "Feuil1"
   dl = .Range("J" & Rows.Count).End(xlUp).Row  '..............................................dernière ligne de la colonne J (à adapter)
    Set plage = .Range("I2:I" & dl) '..........................................................plage de recherche
     For i = 2 To dl '.........................................................................boucle de la ligne 2 à la dernière
      .Range("A" & i).Value = Application.WorksheetFunction.Rank(.Range("I" & i), plage, 0) '..fonction rang colonne I
     Next i '..................................................................................ligne suivante
  End With
End Sub

Cordialement,

Merci beaucoup je vais tester tout ca ^^

Sub Tri3jours()

Application.ScreenUpdating = False '

With Sheets("Feuil1") '

dl = .Range("J16" & Rows.Count).End(xlUp).Row '

Set plage = .Range("G2:G16" & dl) '

For i = 2 To dl '

Range("A" & i).Value = Application.WorksheetFunction.Rank(Range("G" & i), plage, 0) '

Next i '

End With

End Sub

Si j'utilise cette formule comme ca, celà ne fonctionne pas, la colonne A ne se met pas en ordre par rapport "au 3 derniers jours"

Est-ce que c'est possible d'ordonner les actions du plus performant en haut en décroissant ? C'est à dire d'avoir le 1er plus performant ensuite le deuxième et que la page se "range toute seule ?

Re,

As-tu tester le fichier que je t'ai joint ?

Obtiens-tu le résultat souhaité ?


Sub Tri3jours()
 Application.ScreenUpdating = False '..........................................................désactive le rafraichissement de l'écran

  With Sheets("Feuil1") '......................................................................agit "Feuil1"
   dl = .Range("J" & Rows.Count).End(xlUp).Row  '..............................................dernière ligne de la colonne J (à adapter)
    Set plage = .Range("G2:G" & dl) '..........................................................plage de recherche
     For i = 2 To dl '.........................................................................boucle de la ligne 2 à la dernière
      .Range("A" & i).Value = Application.WorksheetFunction.Rank(.Range("G" & i), plage, 0) '..fonction rang colonne G
     Next i '..................................................................................ligne suivante
      .Range("A1").CurrentRegion.Sort key1:=Range("G1"), order1:=xlDescending '................tri colonne G ordre decroissant
  End With
End Sub

Pour inversé l'ordre du rang, remplace 0 par 1.


Cordialement,

image

Quand je l'adapte sur mon document complet je ne sais pas pourquoi il me met une erreur :/

Sinon ca marche vraiment super bien c'est top top top ! :)

Bonjour,

Quand je l'adapte sur mon document complet je ne sais pas pourquoi il me met une erreur :/

capture

Pas de cases vides dans les colonnes "% 3derniers jours", "% 15derniers jours" et" % 30derniers jours" ?

dl est-il bien défini ? Dans le code, dl est défini à partir de la colonne J ("%annuel"), est-ce le cas dans ton fichier ?

dl correspond bien à la dernière ligne remplie de ces 4 colonnes ?

Cordialement,

Re,

Nouvel essai en mettant tes données sous forme de tableau structuré.....nommé Tableau1....

Sub Tri3jours()
 Application.ScreenUpdating = False '......................................................désactive le rafraichissement de l'écran
  With Sheets("Feuil1") '..................................................................agit sur "Feuil1"
      .ListObjects("Tableau1").DataBodyRange(1, 1).FormulaR1C1 = _
                  "=RANK([@[% 3 derniers jours]],[% 3 derniers jours],0)" '................fonction rang dans première cellule/première colonne du tableau
      .ListObjects("Tableau1").DataBodyRange(1, 1).AutoFill _
                  Destination:=Range("Tableau1['#]"), Type:=xlFillDefault '................étire la formule sur toute la colonne
      .ListObjects("Tableau1").Range.Sort key1:=Range("Tableau1[% 3 derniers jours]"), _
                  order1:=xlDescending '...................................................tri ordre decroissant par rapport à la colonne
  End With
End Sub
Sub Tri15jours()
 Application.ScreenUpdating = False
  With Sheets("Feuil1")
      .ListObjects("Tableau1").DataBodyRange(1, 1).FormulaR1C1 = _
                  "=RANK([@[% 15 derniers jours]],[% 15 derniers jours],0)"
      .ListObjects("Tableau1").DataBodyRange(1, 1).AutoFill _
                  Destination:=Range("Tableau1['#]"), Type:=xlFillDefault
      .ListObjects("Tableau1").Range.Sort key1:=Range("Tableau1[% 15 derniers jours]"), _
                  order1:=xlDescending
  End With
End Sub
Sub Tri30jours()
 Application.ScreenUpdating = False
  With Sheets("Feuil1")
      .ListObjects("Tableau1").DataBodyRange(1, 1).FormulaR1C1 = _
                  "=RANK([@[% 30 derniers jours]],[% 30 derniers jours],0)"
      .ListObjects("Tableau1").DataBodyRange(1, 1).AutoFill _
                  Destination:=Range("Tableau1['#]"), Type:=xlFillDefault
      .ListObjects("Tableau1").Range.Sort key1:=Range("Tableau1[% 30 derniers jours]"), _
                  order1:=xlDescending
  End With
End Sub

Cordialement,

Bonjour, celà ne résoud pas le problème malheuresement,

J'ai une autre erreur :

capture

Bonjour Clemdu08,

Ton tableau se nomme bien "Tableau1" ? L'intitulé des colonnes correspond bien à l'intitulé du code (pas d'espace superflu où manquant) ?

Je crains de ne pouvoir t'aider d'avantage,

Ci-joint un fichier test, dis-moi si ça fonctionne chez toi...

Dans mon fichier test, j'ai mis des données bidon, dans ton fichier réel, il s'agit de formules...

Cordialement,

Bonjour à toi,

J'ai trouvé d'où venait l'erreur, il y a en faite certaine case du tableau qui ne possède pas de chiffres précis mais ce genre de message :

#VALEUR!

#N/A

Tout simplement parce que les données ne sont pas toujours à jour sur les petites actions,

Serait-il possible de rajouter une ligne de code pour que ces messages mettent les actions à la fin tout en bas ?

Je rejoins un doc :

Bonjour Clemdu08,

Peut-être qu'en supprimant ces #VALEUR! et #N/A , cela fonctionnera.

Il te faut modifier tes formules...

=SIERREUR(TaFormule;"")

https://www.excel-pratique.com/fr/fonctions/sierreur

Cordialement,

Merci beaucoup ^^

Rechercher des sujets similaires à "creation formule rang macro"