Trier les tableaux par le code Visual Basic

Поділитися
Вставка
  • Опубліковано 3 гру 2024

КОМЕНТАРІ • 23

  • @abdelazizchelbi7531
    @abdelazizchelbi7531 7 років тому +2

    Merci pour ce magnifique tuto, c'est fortement utile pour traiter en VBA les différentes manières de tri d'un tableau

    •  7 років тому

      Merci à vous mon Cher Abdelaziz

  • @GeorgeBander
    @GeorgeBander 7 років тому +2

    C'est super ça aussi !!! Trier avec le système macro, est très original !! Merci une fois de plus pour cet excellent tuto !!! Bonne soirée cher professeur !!! Repos pour moi, pendant quelques jours, je vais en profiter pour regarder plein de petites choses !! A bientôt !!!

    •  7 років тому +1

      Vous avez déjà eu le temps de faire les deux ? Vous êtes impressionnant ! Profitez bien de votre repos mon cher Gérard.

    • @GeorgeBander
      @GeorgeBander 7 років тому +1

      Bien évidemment cher professeur, il est arrivé juste après mon premier commentaire, et j'ai "sauté" dessus immédiatement ! Merci !!

    • @yayaouattara7673
      @yayaouattara7673 7 років тому +1

      Merci professeur moi j ai enregistrer une macro qui me permet de importer des données de classeur excel contenant des données provenant des mes bureaux annexes dans une base excel ou chaque colonne représente un bureau
      ce qui marche bien
      SAUF que je suis obliger de revenir saisir la colonnes "A" ou "B" ou "C" dans le macro a chaque fois que je veux importer
      je voudrais un macro ou je pourrai passer directement a la colonne suivante ou la colonne ou j aurai sélectionné manuellement avec le curseur

    •  7 років тому

      Bonjour difficile de vous répondre comme ça et d'imaginer le processus, je pense que le code VBA est sans doute les plus approprié pour pointer sur les bureaux annexes et remplir les colonnes suivantes en mémorisant les dernières qui ont été renseignées afin d'en incrémenter l'indice.

    • @yayaouattara7673
      @yayaouattara7673 7 років тому

      EFFECIVEMNT XA POURRAI M AIDER

  • @romlef526
    @romlef526 7 років тому +2

    Bonjour, j'ai une petite question, dans le tri A-Z ou Z-A dans vba qui sont xlAscendig ou Xldescendig, est il possible de remplacer ces termes dans le code par une case à cocher !!! admettons que je mette dans une page excel 2 cases à cocher AZ et l'autre ZA ! est il possible de remplacer les xlascendig dans vba par la case adéquat ??? dommage que le code généré par excel pour l'enregistrement des macros soit mal optimisé car sinon le code en lui même est pas fait !!! excellente vidéo une fois de plus !!!! bonne soirée à vous

    •  7 років тому +1

      Oui tout à fait Rom Lef mais cela implique à mon sens un code VBA associé qui reprend l'ensemble des instructions et qui définit xlAscending lorsqu'une case est cochée et xlDescending lorsque c'est l'autre, si possible avec une procédure externe à laquelle on passe en paramètre, celui de la case cochée, qui par une instruction If ne change que le tri et garde le reste du code, en peu comme les select case de ce tuto pour faire varier les tris du tableau. Très bonne soirée à vous aussi

    • @romlef526
      @romlef526 7 років тому +1

      oui ça reste assez complexe à mettre en oeuvre !!!! merci de votre réponse, @bientôt :)

  • @jpm31200
    @jpm31200 7 років тому

    Bonjour Stéphane,
    J'ai une question, est-il possible de faire un tri sur une variable tableau ???
    Jean-Pierre MENDEZ lol

    •  7 років тому

      Tout à fait avec la méthode Sort de la classe Array : Array.Sort(nom_de_votre_tableau)
      Bonne soirée Jean Pierre Mendez ;)

    • @jpm31200
      @jpm31200 7 років тому +1

      Super je vais tester !!!!

    • @jpm31200
      @jpm31200 7 років тому +1

      Au secours Stéphane !!!
      J’ai essayé comme vous me l’avez indiqué la méthode Array.sort(MonTableau), et le Grand Mendez est dans les choux.
      J’ai repris l’exemple du tuto, j’ai donc défini "MonTableau" et charger les données de l'exemple avec l'entête.
      Option Explicit
      Option Base 1
      Sub Tri_Variable_Tableau()
      Dim MonTableau As Variant
      MonTableau = ActiveWorkbook.Worksheets("Mots").[B2].CurrentRegion.Value
      Array.Sort(MonTableau).SortFields.Clear

      Array.Sort(MonTableau).SortFields.Add Key:=1, _
      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      With Array.Sort(MonTableau)
      .SetRange 1
      .Header = xlYes
      .MatchCase = False
      .Orientation = xlTopToBottom
      .Apply
      End With
      ActiveWorkbook.Worksheets("Mots").Range("B2:D" & UBound(MonTableau)).Value = MonTableau
      End Sub
      J'ai remplacer Key:=Range("B3:B42") par Key:=1 rien ne fonctionne déjà dès qu'il arrive sur "Array.Sort(MonTableau)" il me met un message d'erreur,
      J'en déduit que je n'ai pas bien compris la méthode !!!
      Au cas ou mon mail : jpm31200@gmail.com
      Encore merci pour votre aide
      Jean-Pierre

    •  7 років тому +1

      Il y a un souci avec la méthode Sort pour l'objet Array en VBA quand il s'agit de trier des tableaux de valeurs, mais on peut écrire le code avec une double boucle pour le tri. Dans l'exemple que je vous propose, sont écrits de B2 à B6 respectivement les valeurs suivantes : 18,25,12,15,6.
      Nous chargeons ces valeurs dans un tableau de variables avec la procédure tableau qui appelle une procédure de tri:
      Sub tableau()
      Dim mon_tableau(0 To 4) As Integer
      Dim ligne As Byte
      For ligne = 2 To 6
      mon_tableau(ligne - 2) = Cells(ligne, 2).Value
      Next ligne
      trier (mon_tableau)
      End Sub
      Sub trier(mon_tableau)
      Dim tampon As String
      Dim i As Byte: Dim j As Byte
      Dim val_min As Byte: Dim val_max As Byte
      val_min = LBound(mon_tableau)
      val_max = UBound(mon_tableau)
      For i = val_min To val_max - 1
      For j = i + 1 To val_max
      If mon_tableau(i) > mon_tableau(j) Then
      tampon = mon_tableau(i)
      mon_tableau(i) = mon_tableau(j)
      mon_tableau(j) = tampon
      End If
      Next j
      Next i
      For i = 0 To 4
      MsgBox mon_tableau(i)
      Next i
      End Sub
      Et au dernier msgbox, toutes les valeurs sont dans l'ordre croissant

    • @jpm31200
      @jpm31200 7 років тому

      Bonsoir Stéphane ☺
      Merci pour votre réactivité 👍👍👍, Génial, par contre c'est plus compliqué que avec la fonction sort
      En tout cas merci de m'avoir répondu aussi vite 👍👍👍 et je vous souhaite une très bonne soirée ☺☺☺
      Jean-pierre

  • @blabla199498
    @blabla199498 4 роки тому

    Bonjour comme je ne connais pas le nombre de ligne je fais SortFields.Add2 Key:=Range("C:C" _
    ) et With ActiveWorkbook.Worksheets("Feuil2").Sort
    .SetRange Range("A:C")
    Ma question est comment faire pour laisser vide la première ligne pour que je puisse mettre par la suite les noms de mes colonnes?

    • @blabla199498
      @blabla199498 4 роки тому +1

      C'est bon j'ai trouvé une solution.

    •  4 роки тому +1

      Pardonnez moi pour le retard de réponse. Oui vous avez replacé Add2 par Add ?

    • @blabla199498
      @blabla199498 4 роки тому

      @ J'ai fais ceci : ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Add2 Key:=Range("E:E" _
      ...
      .SetRange Range(Cells(2, 1), Cells(ThisWorkbook.x, 5))

    •  4 роки тому

      @@blabla199498 Très bien, bravo pour avoir trouvé le correctif adapté à votre cas