Répétition Commande

Slt à tous,

Trop facile vous allez me dire, et ben ouais mais moi j'en suis encore là,lol.

Ma commande qui me permets de supprimer les lignes 1 à 75 inclus est la suivante et jusque-là tout va bien, lol

Sub

Rows("1:1").Select

Rows("1:75").Select

Selection.Delete Shift:=xlUp

End Sub

Je voudrais appliquer cette commande à tous les onglets existants d'un même classeur ouvert.

Par quel code je dois-je encadrer ma commande pour quelle s'applique à tous les onglets existants d'un classeur ouvert ?

Merci de vos réponses.

'On travaille sur les feuilles 2 et 3
Dim f As Worksheet
For Each f In ThisWorkbook.Sheets
Select Case f.Index
Case 2, 3
f.Activate

En fin de macro un next

Cdlt

Bonjour à vous,

quelquechose comme :

sub del_75lignes()

Dim i As Integer
i = 1

While i <= ActiveWorkbook.Sheets.Count
Sheets(i).Activate
Rows("1:75").Select
Selection.Delete Shift:=xlUp
Cells(1, 1).Select
i = i + 1
Wend

end sub

devrait fonctionner

Merci à vous deux Civo et Guitouille.

Je ne m'en suis pas sorti avec la commande de Civo car en plus du Next de fin de macro, il faut placer un End Select et le Next (contre-partie du For) tout seul n'est pas pris en compte. Et même en essayant Next each ou Next each f, cela ne fonctionne pas.

Moi pas bourrin mais Apprenant autodidact, lol et je ne maîtrise pas encore toutes les finesses.

Celle de Guitouille, c'est du clé en mains avec un copier/coller.

Ceci étant, au-delà du résultat attendu et... obtenu (pour lequel je vous remercie d'ores et déjà) et en tant qu'Apprenant (cours VBA du présent site) si Guitouille pouvait commenter en vert chaque ligne de sa commande et si Civo pouvait me réécrire la sienne "clé en mains" avec les mêmes commentaires de ligne, cela me permettrait d'essayer de comprendre à quoi cela correspond.

Il me restera encore à essayer de comprendre pourquoi l'utilisation de la commande de l'un plutôt que la commande de l'autre.

Un petit commentaire de chacun sur la commande de l'autre, serait du top pour m'aider à évoluer dans un domaine où je m'aperçois que les approches peuvent être différentes pour un même résultat. Il y a forcément un lien, Nan ?

Et pour aller plus avant dans mon projet après le résultat que je viens d'obtenir, il faudrait que pour chaque onglet du classeur ouvert, je puisse supprimer toutes les lignes qui ne m'intéressent pas.

Les lignes à conserver et dont les informations m'intéressent sont celles dont les cellules de la colonne "A" commencent par un horaire au format "hh:mm" quelque soit les caractères qui suivent.

Autrement dit : supprime moi toutes les lignes, de tous les onglets du classeur ouvert, dont les cellules de la colonne "A" ne commence pas par des caractères horaires au format "hh:mm" (où h=heures et m=minutes).

Quelques soient vos réponses à tous les 2 ou... non réponses. Un grand grand merki

'On travaille sur les feuilles 2 et 3 à modifier avec tes feuilles bien sûr (: si c'est 1 et 2 les nombres sont à remplacer, là la macro s'exécute sur les feuilles 2 et 3 .
Dim f As Worksheet 'feuille de travail
For Each f In ThisWorkbook.Sheets 'classeur 
Select Case f.Index 'on créé un index 
Case 2, 3 ' on renseigne l'index avec les feuilles sur lesquelles la macro doit s’exécuter 
f.Activate 'on active l'index donc les feuilles

'Ta macro 
Rows("1:1").Select
Rows("1:75").Select
Selection.Delete Shift:=xlUp

End select
Next

Voilà, alors pourquoi la mienne plus que celle de Guitouille ? Que dire ... Hmm Je pars du principe qu'un classeur peut évoluer et doit rester évolutif, en appliquant une macro sur toutes les feuilles, même si tu en rajoutes une pour X raisons, la macro s'appliquera même si tu ne le veux pas, alors que là tu as la possibilité de choisir les feuilles avec lesquelles ta macro doit "travailler". Voilà j'espère avoir répondu à ta question

Pour l'explication de la macro:

sub del_75lignes()

Dim i As Integer
i = 1 'i sera notre compteur pour balayer les onglets

While i <= ActiveWorkbook.Sheets.Count   'tant que le compteur n'a pas atteint la dernière feuille
Sheets(i).Activate 'on active la feuille i
Rows("1:75").Select 'on selectionne les 75 premières lignes de la feuille i
Selection.Delete Shift:=xlUp  'on les supprime
Cells(1, 1).Select 'selection d'une cellule pour une histoire d'esthétisme (essai sans pour voir la différence)
i = i + 1 'on passe a la feuille suivante
Wend

end sub
 

Pourquoi de cette façon ? Car ça me paraissait la solution la plus simple pour le problème posé :

Je voudrais appliquer cette commande à tous les onglets existants d'un même classeur ouvert.

Pour ce qui est de supprimer toutes les lignes avec une donnée en format de date en colonne A, un petit fichier exemple serais pas de refus ^^

Slt à tous les 2 et merci encore d'avoir bien voulu reprendre vos codes afin d'y apporter des commentaires qui ne tarderont pas de m'être précieux dans ma progression.

Concernant le fichier exemple il ne servira pas à grand chose mais je le joins ka-même, lol.

L'objectif est que pour l'intégralité des onglets d'un classeur ouvert la macro supprime toutes les lignes vides ou non pour ne retenir que les lignes dont la 1re cellule de la colonne "A" a la configuration suivante :

13:45 Blablablablablabla

Encore merki

Bonjour,

Une proposition

Sub Test()
Dim Ws As Worksheet
Dim DerLig As Long, Lig As Long
    'Désactivation de l'actualisation de l'écran
    Application.ScreenUpdating = False
    'Pour chaque feuille de ce classeur
    For Each Ws In ThisWorkbook.Worksheets
        'Détermination du numéro de la dernière ligne renseignée
        DerLig = Ws.Range("A" & Rows.Count).End(xlUp).Row
        'Balayage des lignes de la colonne A, de la dernière ligne renseignée jusqu'à la première ligne
        For Lig = DerLig To 1 Step -1
            'Si les 5 premiers caractères ne correspondent pas à une heure
            If Not IsDate(Left(Ws.Cells(Lig, 1), 5)) Then
                'alors, la ligne est supprimée
                Ws.Rows(Lig).Delete
            End If
        Next Lig
    Next Ws
End Sub

A+

Merci Frangy pour ta réponse rapide et dont le code fonctionne au top.

Pourrais-tu me dire la différence d'utilisation entre For/Next et For Each/Next ?

J'ai par ailleurs une question très nulle mais vu qu'en essayant toutes les options proposées par excel avec "format cellule", je la pose quand-même, lol.

En fait, si j'ai une colonne contenant des cellules dont chacune comporte un nombre comme suit :

10.7

2.0

6.7

24.3

16.4

32.6

204.4

91.0

5.4

159.6

132.4

114.2

Impossible d'obtenir un tri cohérent tel que :

10.7

16.4

114.2

132.4

159.6

2.0

24.3

204.4

32.6

5.4

6.7

91.0

Mais invariablement et quelque soit le choix de format des cellules utilisé (Standard, Nombre, scientifique...),

j'obtiens :

10.7

114.2

132.4

159.6

16.4

2.0

204.4

24.3...etc...

Merci vos réponses et de ne pas faire commentaire sur mon niveau de maîtrise excel, mdrrrrrrrrrrrrrrrrrrrrr

Bonjour,

Pourrais-tu me dire la différence d'utilisation entre For/Next et For Each/Next ?

Il n’y a pas de différence de fond entre les deux formulations.

Dans les deux cas, il s’agit de répéter un groupe d'instructions un nombre de fois défini.

For...Next répète les instructions le nombre de fois indiqué (Worksheets.count).

For Each...Next répète les instructions pour chaque élément de la collection Worksheets.

Pour ta deuxième question, je n’ai pas saisi la cohérence de ton tri.

A+

Rechercher des sujets similaires à "repetition commande"