VBA: Fonction de ...à

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

  1. Contributeur
    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
    1. 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
      1. Contributeur
        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
        1.  
          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
        2. Contributeur
          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
        3. Contributeur
          @eriiicSalut 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
        4. Contributeur
          @michel_mBonjour 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
        5. 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
      2. 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
        1. Contributeur
          bin, c'est ce que fait la fonction proposée....

          comprends pas ta question :-/
          0