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 Sub

J'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 Sub

SI 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 Sub

Bonjour,

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 Sub

Bonjour,

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 Sub

Bonjour à 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 :

&Opérateur - Visual Basic | Microsoft Learn

Cours VBA : les variables

Rechercher des sujets similaires à "novice programmation vba"