VBA: Fonction de ...à

Fermé
miriade97 Messages postés 5 Date d'inscription mercredi 23 août 2017 Statut Membre Dernière intervention 6 septembre 2017 - 23 août 2017 à 15:46
 miriade97 - 31 août 2017 à 13:48
Bonjour,

Voilà je souhaite faire une macro qui me permettrait de supprimer toutes les lignes excel qui sont compris entre deux lignes intitulées : "Avant la journée" jusqu'à "Après la journée". (Il faudrait aussi supprimer "Avant la journée" et "Après la journée")

Ces lignes ne sont pas vides. Je ne peux pas supprimer juste avec des numéros (ex de la ligne 8 à 16) car celles-ci varient toutefois les intitulés ne changent pas.

Je ne sais pas si je me fais vraiment comprendre donc je vais laisser un exemple:
10 Avant la journée
11 J'ai entendu un bruit
12 Puis je me suis levée
13 ...
14 Après la journée
15. Tout est en ordre

Je vous remercie d'avance de votre précieuse aide

4 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 259
Modifié le 23 août 2017 à 16:21
Bonjour,

en colonne A uniquement ?
Texte seul dans la cellule ou pouvant seulement en faire partie ?
Si un seul des textes détecté, ne rien faire ou supprimer depuis début ou jusqu'à la fin ?
eric

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
0
miriade97 Messages postés 5 Date d'inscription mercredi 23 août 2017 Statut Membre Dernière intervention 6 septembre 2017
Modifié le 23 août 2017 à 16:37
Bonjour,

Non, il y a du texte dans les colonnes A,B,C,D,E,F,G,H.
Pour illustrer mes propos j'ai pris un exemple simple.

Il y a que du texte dans les cellules et des nombres
J'ai pas compris la dernière question, toutefois le texte peut varier (ainsi que le nombre de ligne entre "Avant la journée" et"Après la journée". )
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
Modifié le 23 août 2017 à 16:47
Bonjour, Eric
ca faisait longtemps que nous nous étions croisés, Eric :)

essaies cette fonction personnalisée
Function supprime_entre(Debut As String, Fin As String, Colonne As String)
Dim Depart As Integer, Arret As Integer
On Error GoTo vide
Depart = Columns(Colonne).Find(what:=Debut, after:=Cells(1, Colonne), lookat:=xlWhole).Row
Arret = Columns(Colonne).Find(what:=Fin, after:=Cells(1, Colonne), lookat:=xlWhole).Row
Range(Cells(Depart, "A"), Cells(Arret, "H")).Delete
vide:
End Function


dans ton cas si recherche dans colonneA
supprime_entre"avant la journée", "après la journée", "A")
 Michel
0
 
Bonjour michel_m,

L'appel de la fonction se ferait ainsi :

=supprime_entre("avant la journée", "après la journée", "A")

mais une fonction ne peut pas supprimer des lignes !
=> il faut convertir la Function en Sub.

Puis il faudra l'appeler ainsi :

supprime_entre "avant la journée", "après la journée", "A"

Je te laisse le soin de faire la conversion.

Cordialement
 
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 259
23 août 2017 à 18:33
Salut michel,

C'est justement ce que je me disais il y a qq jours.
Je me demandais si c'était des vacances ou des ennuis de santé.
J'espère que tout va bien :-)
eric
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313 > eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024
24 août 2017 à 09:57
Salut Eric

pour VBA: OK tu as raison ( j'avais fait une Sub "test" qui appelait la fonction et ca marchait) d'où mon incompréhension à la réaction de Miriade;

pour l'absence: j'étais comme tous les ans en cure de vieillerie thérapie ;o)

amicalement
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313 > michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
24 août 2017 à 10:16
Bonjour Miriade

excuses mon erreur!

le code
Option Explicit
'----------------------------------------------
Function supprime_entre(Debut As String, Fin As String, Colonne As String)
'supprime les lignes définies à partir d'une valeur d'entrée et une valeur de sortie _
(incluses dans la suppression)
Dim Depart As Integer, Arret As Integer

Depart = Columns(Colonne).Find(what:=Debut, after:=Cells(1, Colonne), lookat:=xlWhole).Row
Arret = Columns(Colonne).Find(what:=Fin, after:=Cells(1, Colonne), lookat:=xlWhole).Row
Range(Cells(Depart, 1), Cells(Arret, 16384)).Delete

End Function

Sub test()
Sheets(1).Activate
On Error GoTo vide:
Call supprime_entre("papa", "maman", "A")
vide:
MsgBox " problème de définition d'une (des) limite(s) d'action", vbCritical
End Sub


et la maquette de travail
https://mon-partage.fr/f/OALImicg/

en espèrant que...
0
miriade97 Messages postés 5 Date d'inscription mercredi 23 août 2017 Statut Membre Dernière intervention 6 septembre 2017
Modifié le 24 août 2017 à 13:17
Bonjour à tous,

Je vous remercie.

Je vais regarder le fichier que tu m'as mis et je reviendrais vers vous.
Merci beaucoup pour votre aide
0
miriade97 Messages postés 5 Date d'inscription mercredi 23 août 2017 Statut Membre Dernière intervention 6 septembre 2017
Modifié le 23 août 2017 à 17:25
Bonjour,

Je te remercie pour ton temps Michel, mais comment la fonction peut effacer les lignes entre Avant la journée et après la journée?
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
23 août 2017 à 17:35
bin, c'est ce que fait la fonction proposée....

comprends pas ta question :-/
0