Novice en programmation VBA
Bonjour à tous,
J'ai réusi à créer ma 1ére macro en enregistrant une macro en manuelle
un petit extrait de la macro qui compte plus de 80 lignes
'Sub Macro1()
' Macro1 Macro
'
'DEPLACE Intitulé
Range("A1").Select
Selection.Cut Destination:=Range("C1")
Range("A6").Select
Selection.Cut Destination:=Range("C6")
Range("A11").Select
Selection.Cut Destination:=Range("C11")
Range("A16").Select
Selection.Cut Destination:=Range("C16")
Range("A21").Select
Selection.Cut Destination:=Range("C21")
Range("A26").Select
Selection.Cut Destination:=Range("C26")
Range("A31").Select
Selection.Cut Destination:=Range("C31")
Range("A36").Select
Selection.Cut Destination:=Range("C36")
Range("A41").Select
Selection.Cut Destination:=Range("C41")
Range("A46").Select
Selection.Cut Destination:=Range("C46")
Range("A51").Select
Selection.Cut Destination:=Range("C51")
Range("A56").Select
Selection.Cut Destination:=Range("C56")
Range("A61").Select
Selection.Cut Destination:=Range("C61")
Range("A66").Select
Selection.Cut Destination:=Range("C66")
Range("A71").Select
Selection.Cut Destination:=Range("C71")
Range("A76").Select
Selection.Cut Destination:=Range("C76")
Range("A81").Select
Selection.Cut Destination:=Range("C81")
Range("A86").Select
Selection.Cut Destination:=Range("C86")
Range("A91").Select
Selection.Cut Destination:=Range("C91")
Range("A96").Select
Selection.Cut Destination:=Range("C96")
Range("A101").Select
Selection.Cut Destination:=Range("C101")
Range("A106").Select
Selection.Cut Destination:=Range("C106")
Range("A111").Select
Selection.Cut Destination:=Range("C111")
Range("A116").Select
Selection.Cut Destination:=Range("C116")
Range("A121").Select
Selection.Cut Destination:=Range("C121")
Range("A126").Select
Selection.Cut Destination:=Range("C126")
Range("A131").Select
Selection.Cut Destination:=Range("C131")
Range("A136").Select
Selection.Cut Destination:=Range("C136")
Range("A141").Select
Selection.Cut Destination:=Range("C141")
Range("A146").Select
Selection.Cut Destination:=Range("C146")
Range("A151").Select
Selection.Cut Destination:=Range("C151")
Range("A156").Select
Selection.Cut Destination:=Range("C156")
Range("A161").Select
Selection.Cut Destination:=Range("C161")
Range("A166").Select
Selection.Cut Destination:=Range("C166")
Range("A171").Select
Selection.Cut Destination:=Range("C171")
Range("A176").Select
Selection.Cut Destination:=Range("C176")
Range("A181").Select
Selection.Cut Destination:=Range("C181")
Range("A186").Select
Selection.Cut Destination:=Range("C186")
Range("A191").Select
Selection.Cut Destination:=Range("C191")
Range("A196").Select
Selection.Cut Destination:=Range("C196")
Range("A201").Select
Selection.Cut Destination:=Range("C201")
Range("A206").Select
Selection.Cut Destination:=Range("C206")
'DEPLACE JOUR
Range("A3").Select
Selection.Cut Destination:=Range("E1")
Range("A8").Select
Selection.Cut Destination:=Range("E6")
Range("A13").Select
Selection.Cut Destination:=Range("E11")
Range("A18").Select
Selection.Cut Destination:=Range("E16")
Range("A23").Select
Selection.Cut Destination:=Range("E21")
Range("A28").Select
Selection.Cut Destination:=Range("E26")
Range("A33").Select
Selection.Cut Destination:=Range("E31")
Range("A38").Select
Selection.Cut Destination:=Range("E36")
Range("A43").Select
Selection.Cut Destination:=Range("E41")
Range("A48").Select
Selection.Cut Destination:=Range("E46")
Range("A53").Select
Selection.Cut Destination:=Range("E51")
Range("A58").Select
Selection.Cut Destination:=Range("E56")
Range("A63").Select
Selection.Cut Destination:=Range("E61")
Range("A68").Select
Selection.Cut Destination:=Range("E66")
Range("A73").Select
Selection.Cut Destination:=Range("E71")
Range("A78").Select
Selection.Cut Destination:=Range("E76")
Range("A83").Select
Selection.Cut Destination:=Range("E81")
Range("A88").Select
Selection.Cut Destination:=Range("E86")
Range("A93").Select
Selection.Cut Destination:=Range("E91")
Range("A98").Select
Selection.Cut Destination:=Range("E96")
Range("A103").Select
Selection.Cut Destination:=Range("E101")
Range("A108").Select
Selection.Cut Destination:=Range("E106")
Range("A113").Select
Selection.Cut Destination:=Range("E111")
Range("A118").Select
Selection.Cut Destination:=Range("E116")
Range("A123").Select
Selection.Cut Destination:=Range("E121")
Range("A128").Select
Selection.Cut Destination:=Range("E126")
Range("A133").Select
Selection.Cut Destination:=Range("E131")
Range("A138").Select
Selection.Cut Destination:=Range("E136")
Range("A143").Select
Selection.Cut Destination:=Range("E141")
Range("A148").Select
Selection.Cut Destination:=Range("E146")
Range("A153").Select
Selection.Cut Destination:=Range("E151")
Range("A158").Select
Selection.Cut Destination:=Range("E156")
Range("A163").Select
Selection.Cut Destination:=Range("E161")
Range("A168").Select
Selection.Cut Destination:=Range("E166")
Range("A173").Select
Selection.Cut Destination:=Range("E171")
Range("A178").Select
Selection.Cut Destination:=Range("E176")
Range("A183").Select
Selection.Cut Destination:=Range("E181")
Range("A188").Select
Selection.Cut Destination:=Range("E186")
Range("A193").Select
Selection.Cut Destination:=Range("E191")
Range("A198").Select
Selection.Cut Destination:=Range("E196")
Range("A203").Select
Selection.Cut Destination:=Range("E201")
Range("A208").Select
Selection.Cut Destination:=Range("E206")
'DEPLACE PRIX
Range("A4").Select
Selection.Cut Destination:=Range("F1")
Range("A9").Select
Selection.Cut Destination:=Range("F6")
Range("A14").Select
Selection.Cut Destination:=Range("F11")
Range("A19").Select
Selection.Cut Destination:=Range("F16")
Range("A24").Select
Selection.Cut Destination:=Range("F21")
Range("A29").Select
Selection.Cut Destination:=Range("F26")
Range("A34").Select
Selection.Cut Destination:=Range("F31")
Range("A39").Select
Selection.Cut Destination:=Range("F36")
Range("A44").Select
Selection.Cut Destination:=Range("F41")
Range("A49").Select
Selection.Cut Destination:=Range("F46")
Range("A54").Select
Selection.Cut Destination:=Range("F51")
Range("A59").Select
Selection.Cut Destination:=Range("F56")
Range("A64").Select
Selection.Cut Destination:=Range("F61")
Range("A69").Select
Selection.Cut Destination:=Range("F66")
Range("A74").Select
Selection.Cut Destination:=Range("F71")
Range("A79").Select
Selection.Cut Destination:=Range("F76")
Range("A84").Select
Selection.Cut Destination:=Range("F81")
Range("A89").Select
Selection.Cut Destination:=Range("F86")
Range("A94").Select
Selection.Cut Destination:=Range("F91")
Range("A99").Select
Selection.Cut Destination:=Range("F96")
Range("A104").Select
Selection.Cut Destination:=Range("F101")
Range("A109").Select
Selection.Cut Destination:=Range("F106")
Range("A114").Select
Selection.Cut Destination:=Range("F111")
Range("A119").Select
Selection.Cut Destination:=Range("F116")
Range("A124").Select
Selection.Cut Destination:=Range("F121")
Range("A129").Select
Selection.Cut Destination:=Range("F126")
Range("A134").Select
Selection.Cut Destination:=Range("F131")
Range("A139").Select
Selection.Cut Destination:=Range("F136")
Range("A144").Select
Selection.Cut Destination:=Range("F141")
Range("A149").Select
Selection.Cut Destination:=Range("F146")
Range("A154").Select
Selection.Cut Destination:=Range("F151")
Range("A159").Select
Selection.Cut Destination:=Range("F156")
Range("A164").Select
Selection.Cut Destination:=Range("F161")
Range("A169").Select
Selection.Cut Destination:=Range("F166")
Range("A174").Select
Selection.Cut Destination:=Range("F171")
Range("A179").Select
Selection.Cut Destination:=Range("F176")
Range("A184").Select
Selection.Cut Destination:=Range("F181")
Range("A189").Select
Selection.Cut Destination:=Range("F186")
Range("A204").Select
Selection.Cut Destination:=Range("F191")
Range("A209").Select
Selection.Cut Destination:=Range("F196")
Range("A214").Select
Selection.Cut Destination:=Range("F201")
Range("A219").Select
Selection.Cut Destination:=Range("F206")
'Efface et décale ligne
Rows("2:5").Select
Selection.ClearContents
Selection.Delete Shift:=xlUp
Rows("3:6").Select
Selection.Delete Shift:=xlUp
Rows("4:7").Select
Selection.Delete Shift:=xlUp
Rows("5:8").Select
Selection.Delete Shift:=xlUp
Rows("6:9").Select
Selection.Delete Shift:=xlUp
Rows("7:10").Select
Selection.Delete Shift:=xlUp
Rows("8:11").Select
Selection.Delete Shift:=xlUp
Rows("9:12").Select
Selection.Delete Shift:=xlUp
Rows("10:13").Select
Selection.Delete Shift:=xlUp
Rows("11:14").Select
Selection.Delete Shift:=xlUp
Rows("12:15").Select
Selection.Delete Shift:=xlUp
Rows("13:16").Select
Selection.Delete Shift:=xlUp
Rows("14:17").Select
Selection.Delete Shift:=xlUp
Rows("15:18").Select
Selection.Delete Shift:=xlUp
Rows("16:19").Select
Selection.Delete Shift:=xlUp
Rows("17:20").Select
Selection.Delete Shift:=xlUp
Rows("18:21").Select
Selection.Delete Shift:=xlUp
Rows("19:22").Select
Selection.Delete Shift:=xlUp
Rows("20:23").Select
Selection.Delete Shift:=xlUp
Rows("21:24").Select
Selection.Delete Shift:=xlUp
Rows("22:25").Select
Selection.Delete Shift:=xlUp
Rows("23:26").Select
Selection.Delete Shift:=xlUp
Rows("24:27").Select
Selection.Delete Shift:=xlUp
Rows("25:28").Select
Selection.Delete Shift:=xlUp
Rows("26:29").Select
Selection.Delete Shift:=xlUp
Rows("27:30").Select
Selection.Delete Shift:=xlUp
Rows("28:31").Select
Selection.Delete Shift:=xlUp
Rows("29:32").Select
Selection.Delete Shift:=xlUp
Rows("30:33").Select
Selection.Delete Shift:=xlUp
Rows("31:34").Select
Selection.Delete Shift:=xlUp
Rows("32:35").Select
Selection.Delete Shift:=xlUp
Rows("33:36").Select
Selection.Delete Shift:=xlUp
Rows("34:37").Select
Selection.Delete Shift:=xlUp
Rows("35:38").Select
Selection.Delete Shift:=xlUp
Rows("36:39").Select
Selection.Delete Shift:=xlUp
Rows("37:40").Select
Selection.Delete Shift:=xlUp
Rows("38:41").Select
Selection.Delete Shift:=xlUp
Rows("39:42").Select
Selection.Delete Shift:=xlUp
Rows("40:43").Select
Selection.Delete Shift:=xlUp
End SubJ'ai donc essayer avec une boucle sans résultat, en essayant de comprendre les cours
Sub Macro5()
' Macro1 Macro
'
'DEPLACE Intitulé
départ = A1 'Numéro de départ
destination = C1 ' cellule destinée
Do While
Range("départ").Select
Selection.Cut Destination:=Range("destination")
Do while départ <= 200
départ = depart+5
destination = destination + 5
Loop
Loop
End SubSI réponse, merci de mettre des commentaires
Salutations
[s=co-c0504d][/s]
Edit Modo : merci d'utiliser les balises de code disponible dans la barre de menu en cliquant sur l'icone </>
Re Bonjour,
J'aurai dû vous copier cette réflexion
cellule de départ A1
coupe son contenu et le déplace en C1
on pointe sur A3, et Déplace son contenu en D1
on pointe sur A4 , et déplace son contenu en E1
on ajoute 5 à A1 donc on pointe sur A6
coupe contenu A6 et le déplace en C2
on pointe sur A8, Déplace son contenu en D2
on pointe sur A9, Déplace son contenu en en E2
faire ceci tant que cellule A est <= 300
Merci de votre compréhension
Salutations
Bonjour,
Option Explicit
Sub MiseEnFormeDesDonnees()
Dim I As Long, DerniereLigne As Long
DerniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
For I = 1 To DerniereLigne Step 5
Cells(I, 3) = Cells(I, 1)
Cells(I, 5) = Cells(I + 2, 1)
Cells(I, 6) = Cells(I + 3, 1)
Range(Rows(I + 1), Rows(I + 4)).ClearContents
Next I
Trier Range("A1:F" & DerniereLigne)
End Sub
Sub Trier(ByVal AireATrier As Range)
With AireATrier.Parent
.Sort.SortFields.Clear
.Sort.SortFields.Add2 Key:=AireATrier.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange AireATrier
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End SubBonjour,
Votre programme fonctionne parfaitement sauf que les données doivent être restituées dans le même ordre qu'à l'origine
On obtient ceci avec votre prgm,
exemple
CB PHARMACIE DES G FACT 121225 13 déc. 2025
CB PHARMACIE MAUPA FACT 061125 07 nov. 2025
CB PHARMACIE MAUPA FACT 281025 29 oct. 2025
CB PHARMACIE MAUPA FACT 291125 01 déc. 2025
CB PHARMACIE MAUPA FACT 301025 31 oct. 2025
les données sont regroupées par intitulé ,elles doivent restées dans le même ordre que l'original et ce, par date
Vous devinez qu'il s'agit en effet de données bancaires
Merci de votre aide
Salutation
Il suffit de trier selon la colonne 6, dans le sens "ascending" ou "descending", si la colonne 6 est un format date.
En indexant la colonne 7 avec le numéro de ligne et en triant la colonne 7 :
Option Explicit
Sub MiseEnFormeDesDonnees()
Dim I As Long, DerniereLigne As Long
DerniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
For I = 1 To DerniereLigne Step 5
Cells(I, 3) = Cells(I, 1)
Cells(I, 5) = Cells(I + 2, 1)
Cells(I, 6) = Cells(I + 3, 1)
Cells(I, 7) = I
Range(Rows(I + 1), Rows(I + 4)).ClearContents
Next I
Trier Range("A1:G" & DerniereLigne), 7
End Sub
Sub Trier(ByVal AireATrier As Range, ByVal ColonneDuTri As Integer)
With AireATrier.Parent
.Sort.SortFields.Clear
.Sort.SortFields.Add2 Key:=AireATrier.Columns(ColonneDuTri), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange AireATrier
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End SubBonjour,
Votre prgm fonctionne à 100%
Je l'ai suivi en mode debug pas à pas pour comprendre
J'ai examiné le rôle des instructions , mais je galère à partir de
Sub Trier(ByVal AireATrier As Range, ByVal ColonneDuTri As Integer) ' on defini le type de variable
With AireATrier.Parent
.Sort.SortFields.Clear 'Cette méthode efface tous les objets SortFields.
.Sort.SortFields.Add2 Key:=AireATrier.Columns(ColonneDuTri), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
' Crée un champ de tri et retourne un objet SortFields qui peut éventuellement trier des types de données avec le sous-champ
' défini.expression. Add2 (Key, SortOn, Order, CustomOrder,'DataOption, SubField)
j'en suis là , et encore pas sûr........
Dans tous les cas je vous remercie grandement et vous souhaite une bonne journée
Bonjour à tous,
Je me permets de vous joindre la macro en question avec quelques commentaires pour faciliter votre lecture. En essence cette partie du code, comme son nom l'indique, ne sert qu'à trier la plage A1:GX sur sa colonne 7.
' cette méthode sert simplement à trier la plage "AireATrier" sur sa colonne numero "ColonneDuTri" (tri croissant)
Sub Trier(ByVal AireATrier As Range, ByVal ColonneDuTri As Integer)
With AireATrier.Parent ' recuperation de la feuille contenant la plage AireATrier (car .Sort s'applique sur la feuille pas la plage)
.Sort.SortFields.Clear ' nettoyage du potentiel filtre precedent (sinon erreur VBA quand double filtrage)
' définition de la colonne "clé" du tri, et de son type (ascendant, descendant...)
' voir https://learn.microsoft.com/fr-fr/office/vba/api/excel.sortfields.add2
.Sort.SortFields.Add2 Key:=AireATrier.Columns(ColonneDuTri), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
' NB: arrivé ici le tri n'est pas encore appliqué sur la feuille, il est juste en partie "paramétré"
' autres parametres puis application
With .Sort ' With permet d'éviter d'écrire "AireATrier.Parent.Sort.XXX" a chaque ligne
.SetRange AireATrier ' definition de la plage à trier
.Header = xlNo ' la plage n'a pas de ligne d'en-tete
.MatchCase = False ' tri sans casse ("a"="A")
.Orientation = xlTopToBottom ' du haut vers le bas
.SortMethod = xlPinYin ' valeur par defaut
.Apply ' application du tri
End With
End With
End SubBonjour à tous,
Merci de vos commentaires, cela m'a bien aidé.
Suite à cela j'ai même modifier légèrement le sous-prgm "Trier", modif du sens de trie ,et mise en commentaire de certain paramètre
juste avant l'application du tri ce qui donne. Faut bien dire que j'ai pas mal galéré pour comprendre l'idée
Dans cette commande pourquoi ya pas de valeur à G ===> Trier Range("A1:G" & DerniereLigne), 7
--------------------------------------------------------------------------------------------
Option Explicit
--------------------------------------------------------------------------------------------
Sub Efface_Ligne()
Dim I As Long, DerniereLigne As Long
DerniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
Trier Range("A1:G" & DerniereLigne), 7
End Sub
--------------------------------------------------------------------------------------------------------------------------------------------------------
Sub Trier(ByVal AireATrier As Range, ByVal ColonneDuTri As Integer)
With AireATrier.Parent ' recuperation de la feuille contenant la plage AireATrier (car .Sort s'applique sur la feuille pas la plage)
.Sort.SortFields.Clear ' nettoyage du potentiel filtre precedent (sinon erreur VBA quand double filtrage)
' définition de la colonne "clé" du tri, et de son type (ascendant, descendant...)
' Spécifie l'ordre de tri avec paramétrage de order soit Order:=xlAscending ou Order:=xlDescending
' *************************************************************************************************
.Sort.SortFields.Add2 Key:=AireATrier.Columns(ColonneDuTri), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
' NB: arrivé ici le tri n'est pas encore appliqué sur la feuille, il est juste en partie "paramétré"
' autres parametres puis application
'************************************
With .Sort ' With permet d'éviter d'écrire "AireATrier.Parent.Sort.XXX" a chaque ligne
.SetRange AireATrier ' definition de la plage à trier
' .Header = xlNo ' la plage n'a pas de ligne d'en-tete
.MatchCase = False ' tri sans casse ("a"="A")
' .Orientation = xlTopToBottom ' du haut vers le bas
' .SortMethod = xlPinYin ' valeur par defaut
.Apply ' application du tri
End With
End With
End Sub
Quel est votre avis ou avertissement sur ces modifs, sans doute pour les cas ou?
Grand Merci à vous , ça donne envie de continuer
Bonne soirée
Bonsoir,
Dans cette commande pourquoi ya pas de valeur à G ===> Trier Range("A1:G" & DerniereLigne), 7
Si, c'est DerniereLigne.
OK , l'écriture m'a induit en erreur, j'attendais plutôt ceci Trier Range("A1:G & DerniereLigne"), 7
Suite à votre remarque : ===> Comme on ne connait pas à l'avance la valeur de la dernière ligne sur la sélection A et G, c'est l'argument DerniereLigne qui donne la valeur à G
Si DerniereLigne=21 alors G=21 sachant que DerniereLigne" peut prendre des valeurs quasi infini
Ai- je bien comprends
Désolé de cette question sans doute idiote, j'aurais dû réfléchir un peu plus
Bonjour,
Vous avez bien compris.
Quant à la syntaxe, celle de Eric est correcte, en écrivant Range("A1:G & DerniereLigne")
On obtiendra l'adresse "A1:G & DerniereLigne" ce qui va lever une erreur.
A l'inverse, Range("A1:G" & DerniereLigne), va d'abord effectuer la concaténation de la string "A1:G" et de la valeur contenue dans la variable DerniereLigne, par exemple "21". Donc on obtient "A1:G21". Cela donne une adresse valide pour la fonction Range.
Je vous invite à lire :