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.
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.
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
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
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
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?
Merci pour ce magnifique tuto, c'est fortement utile pour traiter en VBA les différentes manières de tri d'un tableau
Merci à vous mon Cher Abdelaziz
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 !!!
Vous avez déjà eu le temps de faire les deux ? Vous êtes impressionnant ! Profitez bien de votre repos mon cher Gérard.
Bien évidemment cher professeur, il est arrivé juste après mon premier commentaire, et j'ai "sauté" dessus immédiatement ! Merci !!
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
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.
EFFECIVEMNT XA POURRAI M AIDER
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
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
oui ça reste assez complexe à mettre en oeuvre !!!! merci de votre réponse, @bientôt :)
Bonjour Stéphane,
J'ai une question, est-il possible de faire un tri sur une variable tableau ???
Jean-Pierre MENDEZ lol
Tout à fait avec la méthode Sort de la classe Array : Array.Sort(nom_de_votre_tableau)
Bonne soirée Jean Pierre Mendez ;)
Super je vais tester !!!!
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
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
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
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?
C'est bon j'ai trouvé une solution.
Pardonnez moi pour le retard de réponse. Oui vous avez replacé Add2 par Add ?
@ J'ai fais ceci : ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Add2 Key:=Range("E:E" _
...
.SetRange Range(Cells(2, 1), Cells(ThisWorkbook.x, 5))
@@blabla199498 Très bien, bravo pour avoir trouvé le correctif adapté à votre cas