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 :

manipulation et modification de texte [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut manipulation et modification de texte
    Bonjour à tou(te)s,

    J'essaye de me lancer dans les macros VBA pour excel, mais c'est pas gagné.

    j'ai un fichier excel composé d'une colonne qui correspond à différentes lignes d'un texte.

    Ex :
    Ce matin (1)
    un lapin a été (2)
    tué par un écolo (3)

    Comme vous pouvez le voir, le numéro de la ligne est écrit entre parenthèses à la fin à chaque fois.
    Ce que j'aimerai faire, c'est créer une macro qui va supprimer ce numéro de ligne. (j'ai 10 feuilles de 7000 lignes chacune comme ça).

    Sur le principe de l'algorithme, je crois avoir une solution satisfaisante.

    Je vais :
    1) copier la colonne 1 dans la colonne 2 et faire les modifications sur la colonne 2 (par sécurité)

    Pour chaque cellule de la colonne 2:

    2) je vais utiliser StrReverse pour inverser le texte
    ex: "Ce matin (1)" -> ")1( nitam eC"

    3) je vais rechercher la première occurence de "(" avec Instr

    4) extraire de cette cellule la sous-chaine qui commence 2 caractères plus loin avec la fonction Left, remplacer le contenu de la cellule par cette sous-chaine.
    ex : ")1( nitam eC" -> "nitam eC"

    5) inverser le résultat
    ex : "nitam eC" -> "Ce matin"

    Fin pour chaque cellule
    Alors j'arrive à faire le point 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveSheet.Columns(1).Copy ActiveSheet.Columns(2)
    mais pour le point 2 j'ai tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For Each cell In ActiveSheet.Columns(2)
       cell.Value = StrReverse(cell.Value)
    Next
    mais VBA ne veut pas (Erreur 13, incompatibilité de type).

    A noter que les cellules sont au format Texte (je ne sais pas si ça a une importance).

    Auriez-vous un peu d'aide à m'apporter svp ? Ou une autre solution plus simple (même si je ne trouve pas ça très compliqué apparemment).

    Je suis assez perdu en VBA, je n'ai pas de vue d'ensemble du fonctionnement de la bête, mais j'ai de bonnes bases de programmation.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    Pour le point 1 je te conseillerais même de faire une sauvegarde du classeur original et de travailler sur une copie.

    pour les points suivants il existe la fonction Instrrev qui recherche une occurrence dans une autre à partir de la fin (F1 pour plus de renseignements).

    en utilisant cette ligne tu peux avoir directement le résultat.

    si cell.value = "Ce matin un lapin (1) ça te donnera "Ce matin un lapin "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cell.Value = Left(cell.Value, InStrRev(cell.Value, "(") - 1)
    bon courage

  3. #3
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    merci zyhack pour ta précieuse aide!

    pour la copie de classeur : effectivement, je n'ai pas manqué de le faire.
    pour l'instruction instrrev : parfait, c'est exactement ce qu'il faut en effet.

    ma macro est donc ceci pour l'instant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro1()
        Dim cell As Variant
     
        ActiveSheet.Columns(1).Copy ActiveSheet.Columns(2)
     
        For Each cell In ActiveSheet.Columns(2)
            cell.Value = Left(cell.Value, InStrRev(cell.Value, "(") - 1)
        Next
    End Sub
    mais j'ai toujours l'erreur incompatibilité de type sur la ligne dans la boucle

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim c As Range, pos As Integer
      For Each c In ActiveSheet.Range("B:B")
         pos = InStrRev(c.Value, "(")
         If pos Then
           c.Value = Left(c.Value, pos - 1)
         End If
       Next

  5. #5
    Membre expérimenté
    Profil pro
    Dev
    Inscrit en
    Décembre 2007
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Décembre 2007
    Messages : 191
    Par défaut
    super babaothe, ça marche nickel maintenant.

    Si tu peux m'expliquer rapidement pourquoi à l'occasion, je suis curieux

    encore merci

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    Citation Envoyé par Pacorabanix Voir le message

    Si tu peux m'expliquer rapidement pourquoi à l'occasion, je suis curieux
    salut

    un petit essai vaut mieux que mille explications :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Dim plage As Range, c As Range
    Set plage = Columns(2)
    a = 0
    For Each c In plage
      MsgBox c.Address
      a = a + 1
      If a = 4 Then Exit For
    Next
     
    MsgBox "et voyons mùaintenant"
    a = 0
    For Each c In Range(plage.Address)
      MsgBox c.Address
      a = a + 1
      If a = 4 Then Exit For
    Next
     
    Set plage = Nothing
     
    MsgBox "et voyons mùaintenant"
    a = 0
    For Each c In Range(Columns(2).Address)
      MsgBox c.Address
      a = a + 1
      If a = 4 Then Exit For
    Next

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/12/2006, 19h29
  2. [BATCH] Manipulation dans un fichier texte
    Par Bloodscalp dans le forum Windows
    Réponses: 2
    Dernier message: 13/09/2006, 15h49
  3. modification du texte dans un menu
    Par firejocker dans le forum MFC
    Réponses: 9
    Dernier message: 20/12/2005, 12h56

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