Microsoft 365 Comment supprimer différentes lignes sur mes feuilles Excel ?

liod21

XLDnaute Nouveau
Bonjour à tous,

Je vous explique ma requête : J'ai plus de 1000 feuilles sur un fichier excel. Ces feuilles sont composés du même titre de colonne allant de la colonne A à R. Pour certaines colonnes j'ai utilisé des formules que j'ai copié dans toutes mes feuilles. Et à la fin, j'ai une ligne total qui calcul la somme des colonnes J à R. En ayant copier cette formule à toutes mes feuilles, je me retrouve avec cette ligne total à la ligne 1592. En soi, ce n'est pas un problème pour moi.

Cependant, mes données ne se terminent pas à la même ligne dans chaque feuille. Par exemple :

- la feuille 1 a des données jusque la ligne 46

- la feuille 2 à des données jusque la ligne 542

- la feuille 3 à des données jusque la ligne 1200

ainsi de suite ...

Je voudrais savoir si il est possible de faire une macro qui dit ' Supprime moi toutes les lignes qui vont de la dernière donnée jusque la ligne 1591. Par exemple pour la feuille 1, je voudrais supprimer toutes les lignes allant de 47(inclus) jusque 1591(inclus). Ma première colonne s'appelle 'produit' donc par exemple dire ' Dès que tu n'as plus de donnée à produit, alors tu supprimes toutes les lignes jusque 1591(inclus).

Voilà ma requête, je n'ai jamais fais de VBA donc je m'exerce actuellement mais je n'arrive pas à faire ce code là.

Dans le fichier que j'envoie :
j'ai pris 2 feuilles de mon fichier. Donc par exemple dans celui-là, je voudrais :

- pour la première feuille --> supprimer les lignes allant de 479 à 1591 inclus

- Pour la deuxième feuille --> supprimer les lignes allant de 97 à 1591 inclus.

Bien à vous,
 

Pièces jointes

  • EXEMPLE.xlsx
    237.8 KB · Affichages: 6

Lolote83

XLDnaute Barbatruc
Bonjour,
Essaye cette petite macro. Si j'ai bien compris
VB:
Sub Test()
    For Each xOng In ThisWorkbook.Sheets
        With Sheets(xOng.Name)
            xPremLig = Application.CountA(.Range("A:A")) + 1
            .Rows(xPremLig & ":1591").Delete Shift:=xlUp
        End With
    Next xOng
End Sub
@+ Lolote83
 

job75

XLDnaute Barbatruc
Bonjour liod21, Lolote83,

Voyez le fichier joint et cette macro dans Module1 (Alt+F11) :
VB:
Sub Supprimer_lignes()
Dim w As Worksheet, total As Range, lig1&, lig2&
For Each w In Worksheets
    Set total = w.Columns("I").Find("Total", , xlValues, xlWhole)
    If Not total Is Nothing Then
        lig1 = w.Cells(w.Rows.Count, 1).End(xlUp).Row + 1
        lig2 = total.Row - 1
        If lig2 >= lig1 Then w.Rows(lig1 & ":" & lig2).Delete
        With w.UsedRange: End With 'actualise la barre de défilement verticale
    End If
Next
End Sub
A+
 

Pièces jointes

  • EXEMPLE(1).xlsm
    244.7 KB · Affichages: 1

liod21

XLDnaute Nouveau
Merci Lolote83 et Job75, cela fonctionne dans les 2 cas. j'aurais une autre requête qui m'aiderait énormément. Je voudrais que la ligne résultat de chaque feuille aille dans une feuille summary. Il faut que me ma ligne résultat allant de J (RealGain) à la colonne R (DE) aille dans ma feuille summary. Voici l'exemple et ce que je souhaite (exemple-corrige).

Merci à vous deux,
 

Pièces jointes

  • Classeur-EXEMPLE.xlsx
    201.8 KB · Affichages: 3
  • Classeur-EXEMPLE-CORRIGE.xlsx
    202 KB · Affichages: 5

job75

XLDnaute Barbatruc
Exécutez cette macro :
VB:
Sub Summary()
Dim F As Worksheet, lig&, w As Worksheet, total As Range
Set F = Sheets("Summary") 'feuille de destination, à adapter
lig = 1
Application.ScreenUpdating = False
F.Cells(lig + 1, 2).Resize(F.Rows.Count - lig, 9).ClearContents 'RAZ
For Each w In Worksheets
    Set total = w.Columns("I").Find("Total", , xlValues, xlWhole)
    If Not total Is Nothing Then
        lig = lig + 1
        F.Cells(lig, 2).Resize(, 9) = total(1, 2).Resize(, 9).Value
    End If
Next
With F.UsedRange: End With 'actualise la barre de défilement verticale
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 113
Messages
2 085 426
Membres
102 888
dernier inscrit
medoit