Microsoft 365 Macro VBA - mise en forme export excel

gpera

XLDnaute Nouveau
Bonjour,
J'ai besoin d'une macro qui réalise les tâches suivantes:
A l'ouverture du fichier:
- Insérer une colonne vide en A
- Nommer la cellule A2 : clinique
- Supprimer la 1ère ligne
- Appliquer un filtre sur la nouvelle 1ère ligne
- En colonne B : supprimer les lignes "Total classe x" (x étant allant de 1 à 7)
- En colonne B toujours : supprimer les lignes vides
- Renommer la cellule F1 : Solde N
- Calculer en colonne en F à partir de la ligne 2: colonne D (débit) - colonne E (crédit)
- Vérifier que le total de la colonne F = 0, sinon erreur
- Pour chaque ligne qui a un solde en F=0, alors supprimer la ligne
- De nouveau Vérifier que le total de la colonne F = 0, sinon erreur

Chaque mois, je dois répéter cette opération sur plus de 40 extractions...
Votre aide sera un gain précieux de temps!
D'avance merci,
 

Pièces jointes

  • BG TEST.xlsx
    17.1 KB · Affichages: 4

laurent950

XLDnaute Barbatruc
Bonsoir,

c'est un code que j'ai pas rendu compliqué pour vous aider a comprendre le principe.
A Tester

VB:
Sub AutomatiserTache()

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim Res As Variant

    ' Définir la feuille de travail active
    Set ws = ThisWorkbook.Sheets(1)

    ' Insérer une colonne vide en A
    ws.Columns("A").Insert Shift:=xlToRight

    ' Nommer la cellule A2 : clinique
    ws.Range("A2").Value = "Clinique"

    ' Supprimer la 1ère ligne
    ws.Rows(1).Delete

    ' Appliquer un filtre sur la nouvelle 1ère ligne
    ws.Rows(1).AutoFilter

    ' Supprimer les lignes "Total classe x" en colonne B
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    For i = lastRow To 2 Step -1
        If InStr(1, ws.Cells(i, "B").Value, "Total classe", vbTextCompare) > 0 Then
            ws.Rows(i).Delete
        End If
    Next i

    ' Supprimer les lignes vides en colonne B
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
    For i = lastRow To 2 Step -1
        If ws.Cells(i, "B").Value = "" Then
            ws.Rows(i).Delete
        End If
    Next i

    ' Renommer la cellule F1 : Solde N
    ws.Range("F1").Value = "Solde N"

    ' Calculer en colonne F à partir de la ligne 2: colonne D (débit) - colonne E (crédit)
    lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
    For i = 2 To lastRow
        Res = ws.Cells(i, "D").Value - ws.Cells(i, "E").Value
        ws.Cells(i, "F").Value = IIf(Res <> 0, "Erreur", Res): Res = Empty
    Next i

    ' Pour chaque ligne qui a un solde en F=0, alors supprimer la ligne
    For i = lastRow To 2 Step -1
        If ws.Cells(i, "F").Value = 0 Then
            ws.Rows(i).Delete
        End If
    Next i

End Sub
 

gpera

XLDnaute Nouveau
Merci Laurent, c'est parfait à 90%, il n'y a qu'une étape qui ne se fait pas, mais je me suis mal exprimé. En colonne F, à partir de la cellule F2, je souhaite que la formule D-E se fasse puis s'assurer que le total de la colonne F soit égal à 0. Par exemple faire un contrôle en G1 ou G2 qui affiche vrai si la somme de la colonne F est égal à 0.
Là j'ai des erreurs partout en F
 

gpera

XLDnaute Nouveau
1716913912526.png
 

gpera

XLDnaute Nouveau
Bonjour,

J'ai modifié la partie:

' Calculer en colonne F à partir de la ligne 2: colonne D (débit) - colonne E (crédit)
lastRow = ws.Cells(ws.Rows.Count, "D").End(xlUp).Row
For i = 2 To lastRow
Res = ws.Cells(i, "D").Value - ws.Cells(i, "E").Value
ws.Cells(i, "F").Value = IIf(Res <> 0, "Erreur", Res): Res = Empty
Next i

par:

' Calculer en colonne F à partir de la ligne 2: colonne D (débit) - colonne E (crédit)
lastRow = ws.Cells(ws.Rows.Count, "F").End(xlUp).Row
For i = 2 To lastRow
ws.Cells(i, "F").Value = ws.Cells(i, "D").Value - ws.Cells(i, "E").Value

Next i

Cela semble fonctionner.
Si quelqu'un peut me confirmer qu'il n'y a pas d'erreur.

Merci!
 

laurent950

XLDnaute Barbatruc
Bonjour @gpera
c'était en trop dans votre poste #1
- Vérifier que le total de la colonne F = 0, sinon erreur
- Pour chaque ligne qui a un solde en F=0, alors supprimer la ligne
- De nouveau Vérifier que le total de la colonne F = 0, sinon erreur

Si quelqu'un peut me confirmer qu'il n'y a pas d'erreur. = Oui il n'y a pas d'erreur.
' Calculer en colonne F à partir de la ligne 2: colonne D (débit) - colonne E (crédit)
lastRow = ws.Cells(ws.Rows.Count, "F").End(xlUp).Row
For i = 2 To lastRow
ws.Cells(i, "F").Value = ws.Cells(i, "D").Value - ws.Cells(i, "E").Value
Next i
 

gpera

XLDnaute Nouveau
Bonjour @laurent950 ,
Désolé, effectivement c'est ce que je dis par la suite, que je me suis mal exprimé. L'idée est plutôt de faire un contrôle en G1 ou G2 qui affiche vrai si la somme de la colonne F est égal à 0. Sinon c'est qu'il y a une erreur.
Merci pour la confirmation!
 

Discussions similaires

Réponses
22
Affichages
1 K
Réponses
8
Affichages
286

Membres actuellement en ligne

Statistiques des forums

Discussions
313 322
Messages
2 097 141
Membres
106 850
dernier inscrit
benbeckman