VBA - Besoins d'aide pour créé un code

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 !

vbordeleau

XLDnaute Nouveau
Bonjour,

J'ai un problème à écrire ma fonction de tri dans VBA.

Je veux trier la sélection active se trouvant sur une ligne (croissant, de gauche à droite.)

j'ai regarder passablement sur le net et je ne comprend pas pourquoi ça ne marche pas.

Les collones sont toujours les mêmes (C à BT) et la ligne varie d'une fois à l'autre.

Merci
---------------------------------------------------------------------------------------
Private Sub CommandButton4_Click()

Dim rngTrouve As Range
Dim ActifenCause As String
Dim BD As Worksheet
Set BD = Worksheets("BD")


ActifenCause = activecell.Value
Set rngTrouve = Sheets("BD").Columns(2).Cells.Find(what:=ActifenCause)
allo1 = Sheets("BD").Range("C" & rngTrouve.Row).Address
allo2 = Range("BT" & rngTrouve.Row).Address

'code
Sheets("BD").Activate
Sheets("BD").Range(allo1, allo2).Select

Selection.Sort Key1:=Cells(0, 1), Order1:=xlAscending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, DataOption1:=xlSortNormal


Set rngTrouve = Nothing

End Sub
----------------------------------------------------------------------------------------
 
Re : VBA - Besoins d'aide pour créé un code

Bonsoir,

impossible de tester sans extrait de fichier, ceci dit sur cette ligne:

Code:
Selection.Sort Key1:=Cells(0, 1) etc...

le cells(0,1) doit bloquer: la ligne zéro n'existe pas.

@+

mth
 
Re : VBA - Besoins d'aide pour créé un code

Bonjour
allo1 = Sheets("BD").Range("C" & rngTrouve.Row).Address
allo2 = Range("BT" & rngTrouve.Row).Address
Donc allo1 = Sheets("BD").Range("C" &... tandis
que allo2 = ActiveSheet.Range("BT" &...
Cordialement.

P.S. D'ailleurs... pourquoi, après le Set, n'utilisez vous pas partout "BD.Range" à la place de "Sheets("BD").Range" ? Dès lors que c'est une variable Worksheet correctement initialisée, il faut l'employer le plus possible comme expression Worksheet bon sang !

Mais je viens de voir autre chose:
C'est écrit dans une procédure d'évènement Click d'un bouton, donc dans la feuille, donc le classeur actif est celui qui porte la macro. BD est inutile: vous pourriez utiliser le CodeName de la feuille comme expression Worksheet. Mais bon, ne le connaissant pas, essayez:
VB:
Private Sub CommandButton4_Click()
Dim Feuil1 As Worksheet: Set Feuil1 = ThisWorkbook.Worksheets("BD") ' Ligne à supprimer si Feuil1 est déjà le CodeName de feuille "BD"
Dim ActifenCause As String, L As Long
ActifenCause = ActiveCell.Value
On Error Resume Next
L = WorksheetFunction.Match(ActifenCause, Feuil1.Columns(2), 0)
If Err Then L = 0
On Error GoTo 0
If L = 0 Then
   MsgBox """" & ActifenCause & """ introuvable", vbCritical, CommandButton4.Caption
   Exit Sub
Feuil1.[C:BT].Rows(L).Sort Key1:=Feuil1.Rows(L), Order1:=xlAscending, Header:=xlNo, _
   OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, DataOption1:=xlSortNormal
Feuil1.Activate: Feuil1.Rows(L).Select
End Sub

À+
 
Dernière édition:
Re : VBA - Besoins d'aide pour créé un code

Bonjour,

Merci pour le coup de main, mais ça ne marche pas, j'ai esseiller de modifier le code, mais la fonction Sort est toujours en erreure.
En passant, le bouton est dans un formulaire en feuille1(form) et le tri doit ce faire dans la base de donnée en feuille4(BD)

---------------------------------------------------------------------------------------------------------------------------------------
Private Sub CommandButton5_Click()

Dim ActifenCause As String, L As Long
Dim BD As Worksheet
Set BD = Worksheets("BD")


ActifenCause = activecell.Value
L = WorksheetFunction.Match(ActifenCause, BD.Columns(2), 0)

If Err Then L = 0
On Error GoTo 0

If L = 0 Then
MsgBox """" & ActifenCause & """ introuvable", vbCritical, CommandButton4.Caption
Exit Sub

Else

BD.[C:BT].Rows(L).Sort Key1:=Range("C" & L), Order1:=xlAscending, Header:=xlGuess _
, OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, DataOption1:=xlSortNormal


End If


End Sub
 
Re : VBA - Besoins d'aide pour créé un code

re à tous 🙂

vbordeleau, ce serait plus simple pour tester si tu joignais un extrait de ton fichier (sans données confidentielles)
Par ailleurs, quand tu postes du code, pourrais-tu utiliser la balise de code ? (le signe # au dessus de la fenêtre de message), tout devient bien plus lisible 🙂

Bien à toi,

mth
 
Re : VBA - Besoins d'aide pour créé un code

Bonjour,

Merci je ne connaissait pas le truc.
Puisque la base de donnée est confidentiel, j'ai créé une copie bidon. l'originale détien près de 2000 lignes.

Vous remarquerez que j'ai 2 boutons de test de fonction de recherche, ils sont voué à disparaitre quand ce seras débogué. Mon but étant d'insérer la fonction recherche dans le Userform1.

L'idée est d'utiliser le bouton "ajouter un Symptôme" pour afficher le "UserForm1" par lequel j'ajoute un symptôme dans ma base de donnée. Tout ce qui manque c'est le tri croissant.

Merci à l'avance.
 

Pièces jointes

Dernière édition:
Re : VBA - Besoins d'aide pour créé un code

Bonsoir
comme ça, ça marche s'il trouve la sélection dans la feuille BD
VB:
Private Sub CommandButton5_Click()
Dim ActifEnCause As String, L As Long
ActifEnCause = ActiveCell.Value
On Error Resume Next
L = WorksheetFunction.Match(ActifEnCause, BD.Columns(2), 0)
If Err Then L = 0
On Error GoTo 0
If L = 0 Then
   MsgBox """" & ActifEnCause & """ introuvable", vbCritical, CommandButton5.Caption
Else
   BD.[C:BT].Rows(L).Sort Key1:=BD.Rows(L), Order1:=xlAscending, Header:=xlNo, _
      OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, DataOption1:=xlSortNormal
   BD.Activate: BD.Rows(L).Select
   End If
End Sub
À+

Remarque: très bien d'avoir mis les CodeName en conformité avec les noms Excel de feuille.
depuis quelque temps je rajoutais un "F" comme "Feuille" devant, mais je me demande si je ne vais pas y renoncer. Surtout que j'ai un petit dialogue pour le faire...
 
Dernière édition:
Re : VBA - Besoins d'aide pour créé un code

Salut,
Je ne sais pas si c'est moi, mais quand j'essais le code, ça ne marche pas. si tu la esseillé dans mon fichier, peux tu le mettre sur le forum svp.
Est-ce que ça peux avoir affaire avec ma version d'Excell??

Merci
 
Dernière édition:
Re : VBA - Besoins d'aide pour créé un code

Ah, mais... Ça se pourrait bien.
Les tris s'écrivent différemments dans ces f... xlsm. Ils ont crus judicieux de ne plus supporter la méthode Sort limitée à 3 arguments de tris. Limite qui se contournait facilement dailleurs.
Enregistrez une macro qui fait le tri et montrez le code engendré.

Je le joins quand même, sauvegardé après exécution du bouton 5
À+
 

Pièces jointes

- 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

Réponses
4
Affichages
1 K
Réponses
1
Affichages
687
Réponses
1
Affichages
1 K
Retour