Traduction d'une macro VBA pour m'initier et comprendre cette pratique

Bonjour à tous,

j'espère que vs allez tous bien!

j'aimerais obtenir la traduction de la macro suivante pour developper mes connaissances ds ce domaine

merci par avance de l'aide que vs m'apporteriez, cordialement

Paul

Sub defusion()

Application.ScreenUpdating = False

Set plage = Range("A2:H" & Range("H" & Rows.Count).End(xlUp).Row)

For Each c In plage

If c.MergeCells Then c.UnMerge

Next c

For i = 2 To Range("H" & Rows.Count).End(xlUp).Row

For j = 1 To 7

If Cells(i, j) = "" Then Cells(i, j) = Cells(i - 1, j)

Next j

Next i

Range("B:B").Delete

Range("A:A").NumberFormat = "m/d/yyyy h:mm"

End Sub

bonjour,

je me suis plié à l'exercice: (les commentaires se rapportent à la ligne qui suit le commentaire

Sub defusion()
    ' ne pas faire de mise à jour de l'écran durant l'exécution de la macro (performance)
    Application.ScreenUpdating = False
    ' on définit une plage de cellules de A2 à Hx, x étant la dernière ligne utilisée en colonne H
    Set plage = Range("A2:H" & Range("H" & Rows.Count).End(xlUp).Row)
    ' pour chaque cellule de la plage
    For Each c In plage
      ' si cellule fusionnée on défusionne
        If c.MergeCells Then c.UnMerge
        'cellule suivante
    Next c

    'pour chaque ligne dans l'intervalle 2 à x (x étant la dernière ligne utilisée en colonne H
    For i = 2 To Range("H" & Rows.Count).End(xlUp).Row
        ' pour chaque colonne de l'intervalle A à G (1 à 7)
        For j = 1 To 7
            ' si la cellule en ligne i, colonne j est vide on copie le contenu de la cellule du dessus
            If Cells(i, j) = "" Then Cells(i, j) = Cells(i - 1, j)
            'colonne suivante
        Next j
        'ligne suivante
    Next i
    'suppression de la colonne B
    Range("B:B").Delete
    'format de la colonne A date (mois/jour/année) et  heure (heures:minutes)
    Range("A:A").NumberFormat = "m/d/yyyy h:mm"

End Sub

Bonjour ! Idem.

Deux remarques, l'auteur de cette macro a commis le tort (à mon avis) de ne pas déclarer ses variables et de ne pas indenter son code. Je le reformule donc avec ces 2 points corrigés :

Option Explicit

Sub defusion()
1    Dim c As Range, plage As Range
2    Dim i As Long, j As Long

3    Application.ScreenUpdating = False
4    Set plage = Range("A2:H" & Range("H" & Rows.Count).End(xlUp).Row)

5    For Each c In plage
6        If c.MergeCells Then c.UnMerge
7    Next c

8    For i = 2 To Range("H" & Rows.Count).End(xlUp).Row
9        For j = 1 To 7
10            If Cells(i, j) = "" Then Cells(i, j) = Cells(i - 1, j)
11        Next j
12    Next i

13    Range("B:B").Delete
14    Range("A:A").NumberFormat = "m/d/yyyy h:mm"
End Sub

Option Explicit en tête de code impose de devoir déclarer ses variables pour pouvoir les utiliser. C'est une sécurité indispensable. On la paramètre dans les options de l'éditeur VBE.

L'identation d'un programme et les sauts de ligne entre les blocs d'instructions en facilite la lecture, donc la maintenance.

Lignes 1 et 2 : déclaration des variables avec leurs types
Ligne 3 : cette instruction demande au système de ne pas rafraîchir l'écran avant la fin du traitement, ce qui l'accélère. Ici l'auteur a oublié de le remettre à True en fin d'exécution.
Ligne 4 : Range("H" & Rows.Count).End(xlUp).Row) correspond au n° de la dernière cellule occupée de la colonne "H". On appellera cette valeur n. Donc on boucle de la ligne 2 à n.
Ligne 5 à 7 : si certaine cellules sont fusionnées , on supprime la fusion de la plage H2:Hn
Ligne 8 à 12 : Dans la plage A2:Gn (2 à n et 1 à 7) si une cellule est vide, on lui affecte le contenu de la cellule juste au-dessus. La colonne "H" n'est pas concernée puisqu'elle est la 8e. Si l'auteur avait voulu remplir les espaces vides laissés par la suppression des fusions, c'est For j = 1 to 8 (et non pas 7) qu'il aurait dû mettre.
Ligne 13 : On supprime la colonne B
Ligne 14 : on met les valeurs de la colonne A dans un format date court.

merci à vs deux pour votre réponse ! :)

je vais potasser ça,

bon WE

Rechercher des sujets similaires à "traduction macro vba initier comprendre cette pratique"