IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Supprimer un bloc de texte


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut Supprimer un bloc de texte
    Bonjour,

    Dans un fichier excel, j'ai une colonne "Commentaires" qui contient du texte. Je desire cependant supprimer uniquement dans chacune des cellules de cette colonne tous les bloc de texte commencant par BO* et se terminant par *BO

    exemple : le petit garcon BO* court dans la foret *BO avec son amie.

    Le resultat sera le petit garcon avec son amie.

    Votre aide est apprécie. Merci d'avance.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir,

    ta question se réduirait-elle finalement (commentaires ou non) à ceci :
    Comment, dans une chaîne de caractères, supprimer de cette chaîne tout se qui se trouverait entre les balises "BO*" et "*BO" ?

    Car je suppose que tu maîtrises déjà le reste (parcourir toutes les cellules d'une colonne en vue d'agir sur le contenu (chaîne de caractères) de chacune d'elles ... (si non : commence donc par celà....)

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    oui, voila ce que je fais pour au moins trouver le bloc mais qui ne retrouve pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub supprime_bloc()
    Dim NoCol As Integer, NoLig As Long
        NoCol = 19 ' à adapter
        For NoLig = 2 To 10 
            If InStr(1, Cells(NoLig, NoCol), "**BO") = 1 Then
            MsgBox "Trouve"
            Else
            MsgBox "Non Trouve"
            End If
        Next
    End Sub
    Il me renvoit toujours non trouve alors je suis sur que je pointe sur la bonne colonne. De plus, disons que je reussi a trouver, comment supprimer cette partie. Je sais uniquement commnent supprimer la ligne au complete mais je dois simplement supprimer ce bloc de la cellule et laisser le reste du commentaire.

    Merci de ton aide.

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    On y va pas à pas :

    On commence par instr

    la lecture de ton aide en ligne t'apprendra que cette fonction te renvoit la position du début de la chaîne recherchée ou 0 (en cas d'inexistence de la chaîne recherchée) Cette position n'est 1 que si la chaîne recherchée est en début de la chaine dans laquelle tu recherches...

    Alors : 1 ou > 0 ?

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    ok, c'est bon, je reussi à trouver la chaine de caractère recherchée avec Instr puisqu'elle est effectivement au debut de la chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub supprime_test()
    Dim NoCol As Integer, NoLig As Long
        PremiereLigne = 2
        NoCol = 21
        For NoLig = 2 To 30
            If InStr(1, Sheet2.Cells(NoLig, NoCol), "**BO") = 1 Then
            MsgBox "Trouve a la ligne " & Cells(NoLig, NoCol)
            Else
            MsgBox "Non Trouve "
            End If
        Next
    End Sub
    Je me positionne bien sur **BO mais la comment je dois m'y prendre pour supprimer ce qui se trouve dans **BO et **BO End incluant **BO et BO End

    Par ailleurs, il se pourrait aussi que le bloc **BO ... **BO End ne soit pas tout le temps au debut de la cellule. Y a t-il une autre fonction que Instr qui fais mieux le travail peut importe ou est pacer le bloc **BO ... **BO End ?

    Merci

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Je rêve..... !
    Instr fait parfaitement l'affaire ...

    Mais remplace donc = 1 par > 0 (je croyais avoir été clair... et que l'aide en ligne ne l'était pas moins !!!)....

    Pour la suite : je ne vais pas écrire ton code, mais te demander de réfléchir sur cet exemple fort simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    toto = "abcde BO* fghijkl *BO blabla"
    MsgBox Left(toto, InStr(toto, "BO*") - 1) & Mid(toto, InStr(toto, "*BO") + 3)
    Je te souhaite bonne et simple réflexion...

  7. #7
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    Mon cher ucfoutu, je te remercie enormement pour ton aide et finalement j'y arrive. Ca marches tres bien sauf que il me laisse les deux derniers caractères de ** BO END
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub supprime_test()
    Dim DerLigne As Integer, PremiereLigne As Long, NoCol As Integer, NoLig As Long
        PremiereLigne = 2
        NoCol = 21
        For NoLig = 2 To 30
            If InStr(1, Sheet2.Cells(NoLig, NoCol), "**BO") > 0 Then
            Sheet2.Cells(NoLig, NoCol) = Left(Sheet2.Cells(NoLig, NoCol).Value, InStr(Sheet2.Cells(NoLig, NoCol).Value, "**BO") - 1) & Mid(Sheet2.Cells(NoLig, NoCol).Value, InStr(Sheet2.Cells(NoLig, NoCol).Value, "** BO END") + 3)
            Else
            MsgBox "Non Trouve " & Cells(NoLig, NoCol)
            End If
     
        Next
    End Sub
    Ceci est le commentaire que j'ai :
    Niveau de priorite **BO
    CSRA: S Durand
    IA livraison: 28oct08
    IA Resp BI: Amine
    IA Resp Client: C Gauthier
    IA SignOff: 5dec08
    Dev Resp: Amine
    Dev Statut: En cours
    Test Client:
    Test Statut:
    MEP Signoff:
    MEP Client:
    Note: Chg manuel Struc.
    ** BO END A recommander


    On lancant ma cacro, voici le resultat :
    Niveau de priortite BO END A recommander

    Pourquoi BO END est toujours la. Il devrait disparaitre aussi tel qu'indiqué dans la fonction Mid. Il se pourrait que ce soit a cause des espaces qu'il y a dans le deuxieme tag "** BO END" mais ils sont tous de même dans le fichier et je dois les gérer ainsi.

    J'espere que je t'enerves pas trop ! Que veux-tu, je suis pas très futé niveau VBA

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Pourquoi, hein ... ?

    Tout simplement parce que tu parlais de BO* et de *BO (de longueur 3) et que tu parles maintenant de BO** et de **BO, de longueur 4
    De surcroît : ton exemple n'est plus avec un BO** et un **BO, mais avec un **BO et un **BO .... !!!

    Tu commences à me lasser ....
    Alors :
    reviens avec un exemple précis et correspondant à ce que tu as réellement...car cette discussion sur un sujet élémentaire ne saurait s'éterniser et (surtout) revêtir un intérêt pour d'autres, telle qu'elle est partie (en zig-zags aléatoires, comme au poker javanais...)

  9. #9
    Membre éclairé
    Inscrit en
    Mars 2008
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 257
    Par défaut
    les tags sont bel et bien **BO et ** BO END

    Désolé pour la confusion ! Je pensais le présenter plus simplement pour pas compliquer les choses. J'avoue avoir créer l'effet inverse ! Mes excuses...

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Alors, dans ce cas :
    Utilise tout bêtement la fonction split (pour éclater sur "**BO").
    Mais je ne vais pas te guider ainsi jusqu'au bout sans que, de ton côté, tu fasses le moindre effort pour si peu ...
    Alors :
    1) lis l'utilisation de la fonction Split dans ton aide en ligne
    2) reviens (si tu as une difficulté pour l'appliquer) avec le code d'utilisation que tu auras bien voulu tenter d'écrire !!!
    Une parole pour te donner du courage : c'est élémentaire (si tu ouvres enfin ton aide en ligne ...)

    EDIT :

    Ceci étant dit et bien que je souhaite vraiment que tu t'intéresses à l'utilisation de la fonction Split (bien plus adaptée à ce cas de figure), les solutions sans Split sont nombreuses, y compris avec Instr... à condition toutefois de bien lire ce que dit Instr dans ton aide en ligne (comme toujours) :

    En voilà une (il y en a d'autres, toutes aussi simples) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim erreur As Boolean, toto As String, pos1 As Integer, pos2 As Integer
      toto = "abcde **BO fghijkl **BO blabla"
      pos1 = InStr(toto, "**BO")
      If pos1 = 0 Then erreur = True
      pos2 = InStr(pos1 + 1, toto, "**BO")
      If pos2 = 0 Then erreur = True
      If Not erreur Then
         MsgBox Left(toto, pos1 - 1) & Mid(toto, pos2 + 4)
      Else
         MsgBox "pas de texte encadré par **BO !"
      End If
    J'insiste : on pourrait en inventer ainsi 13 à la douzaine (en fonction de son humeur ou son humour du moment).... parmi lesquelles l'emploi de Instr pour pos1 et de instrrev pour pos2
    Je serais toutefois heureux que tu nous montres ce que tu auras pu écrire en utilisant ce qui convient : la fonction Split que t'offre VB et dont c'est la vocation...

Discussions similaires

  1. [RegEx] Supprimer un bloc d'un fichier texte
    Par adrien334 dans le forum Langage
    Réponses: 7
    Dernier message: 04/03/2009, 15h22
  2. [JTextField] Supprimer une partie du texte
    Par jean_bobi dans le forum Composants
    Réponses: 4
    Dernier message: 26/09/2005, 15h22
  3. [VBA][Excel]Supprimer une partie du texte d'une grosse liste
    Par annedeblois dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/09/2005, 17h15
  4. inclure une image dans un bloc de texte
    Par allowen dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 25/08/2005, 14h11
  5. [langage] Ecrire un bloc de texte dans un fichier
    Par sarahbes dans le forum Langage
    Réponses: 6
    Dernier message: 10/06/2004, 11h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo