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 le 8eme et 17eme caractère d'un string


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 39
    Points : 34
    Points
    34
    Par défaut Supprimer le 8eme et 17eme caractère d'un string
    Bonjour le Forum,

    Tout d'abord merci pour l'aide que vous m'avez apporté à chaque fois que je vous ai sollicités !
    Etant débutant en VBA, je fais un peu de bricolage en adaptant des bouts de codes.
    Voici ma requête :

    J'ai une colonne contenant plusieurs chaines de caractères. Je voudrais parcourir cette colonne et retirer systématiquement le 8eme et 17eme caractère.
    Une idée ?

    J'ai essayé de bidouiller ce bout de code trouvé sur le forum mais sans succès..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub test()
     
    ncar = Len(Range("A4"))
    vcel = Range("A4").Value
     
    vcel1 = Left(vcel, 7)
    vcel2 = Mid(vcel, 9, ncar)
    vcel3 = Left(vcel, 17)
    vcel2 = Mid(vcel, 19, ncar)
     
    Range("A4").Value = vcel1 & vcel2 & vcel3 & vcel4
     
    End Sub

  2. #2
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    moi je le ferai dans l'autre sens

    c-a-d que je commence par supprimer le 17 ème puis le 8 ème

    de plus Mid ecrit comme cela : Mid(MyString, 6) sans longueur de spécifié te ramène tout le restant de la chaine après 6 (cf touche [F1] de l'aide en ligne )

    je verai qu'une serie de Mid

    1) mid de 1 à 16 & mid de 18 au reste
    2) je reprends cette chaine optenue et je fais pareil pour le 8 à supprimer

    tu essayes

    et tu reviens nous montrer ce que tu as fais

    A bientôt
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  3. #3
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum

    Comme le dit Igloobel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Macro1()
    Dim O As Worksheet
    Dim TV As Variant
    Dim I As Integer
     
    Set O = Worksheets("Feuil1")
    TV = O.Range("A1").CurrentRegion
    TV(1, 1) = TV(1, 1)
    For I = 2 To UBound(TV, 1)
        TV(I, 1) = Left(TV(I, 1), 16) & Mid(TV(I, 1), 18)
        TV(I, 1) = Left(TV(I, 1), 6) & Mid(TV(I, 1), 8)
    Next I
    O.Range("D1").Resize(UBound(TV, 1), 1).Value = TV
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour le fil,

    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
    Sub test()
    Dim str As String
      str = ActiveSheet.Range("A1").Text
      Mid(str, 17, 1) = Chr(1)
      Mid(str, 9, 1) = Chr(1)
      ActiveSheet.Range("A1").Formula = Replace(str, Chr(1), "")
    End Sub
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Merci Igloobel, Patrice et Thautheme,

    J'ai opté pour la solution de Thautheme et c'est exactement ce que je voulais

    Par ailleurs, je viens de me rendre compte d'une subtilité : est il possible d'ajouter une condition pour éviter d'agir sur les string qui commencent par un point . ?

    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
     
    Sub Macro1()
    Dim O As Worksheet
    Dim TV As Variant
    Dim I As Integer
     
    Set O = Worksheets("Feuil1")
    TV = O.Range("A1").CurrentRegion
    TV(1, 1) = TV(1, 1)
    For I = 2 To UBound(TV, 1)
        TV(I, 1) = Left(TV(I, 1), 16) & Mid(TV(I, 1), 18)
        TV(I, 1) = Left(TV(I, 1), 6) & Mid(TV(I, 1), 8)
    Next I
    O.Range("D1").Resize(UBound(TV, 1), 1).Value = TV
    End Sub

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    'remplacons  le 7 et 9
    mystring = "toto titi riri fifi"
    Mid$(mystring, 7, 1) = "o"
    Mid$(mystring, 9, 1) = "o"
    MsgBox mystring
    '
    'suppression du 7 et du 9
    mystring = "toto titi riri fifi"
    mystring = Mid$(mystring, 1, 6) & Mid$(mystring, 8, 1) & Mid$(mystring, 10)
    MsgBox mystring
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Patricktoulon,

    Merci pour ta réponse. Sais tu comment mettre une condition pour eviter d'agir sur les string qui commencent par un point . ?
    Merci

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Sais tu comment mettre une condition pour eviter d'agir sur les string qui commencent par un point .
    Oui : utiliser la fonction Left et une expression conditionnelle plus que basique.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Je te "vois" chercher partout (dans des discussions) alors que la fonction Left est parfaitement exposée (et assortie d'exemples clairs) dans ton aide interne VBA, à la rubrique Left, fonction.
    Bon ...
    Je vais te montrer comment, mais avec un autre code que ceux qui t'ont été montrés.
    A toi d'y prendre ce qu'il faut y prendre. Soit tout, soit l'utilisation de l'expression conditionnelle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    toto = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      If Left(toto, 1) = "." Then
        tata = toto
      Else
        titi = Split(StrConv(toto, vbUnicode), Chr(0))
        titi(8) = "": titi(17) = ""
        tata = Join(titi, "")
      End If
      MsgBox tata
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Pour ne rien te cacher, je suis à moitié sur le forum et à moitié en train d’écouter de la musique. Pas très efficace me diras tu
    Je teste ça demain matin, une fois au bureau !
    Bonne soirée et merci pour ta "bienveillance"

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    je suis à moitié sur le forum et à moitié en train d’écouter de la musique
    Je suis très différent. Lorsque je m'intéresse à une chose, je m'y consacre sans compter.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #12
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mid(txt,8,1)="£"
    Mid(txt,17,1)="£"
    Txt=replace(txt,"£","")

  13. #13
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Robert
    N'as-tu pas comme un peu l'impression de ce que ta solution (au demeurant la plus aisée) est celle déjà donnée par Patrice740 ?
    Amitiés
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  14. #14
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    le code adapté :

    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
    Sub Macro1()
    Dim O As Worksheet
    Dim TV As Variant
    Dim I As Integer
     
    Set O = Worksheets("Feuil1")
    TV = O.Range("A1").CurrentRegion
    TV(1, 1) = TV(1, 1)
    For I = 2 To UBound(TV, 1)
        If Not Left(TV(I, 1), 1) = "." Then
            TV(I, 1) = Left(TV(I, 1), 16) & Mid(TV(I, 1), 18)
            TV(I, 1) = Left(TV(I, 1), 6) & Mid(TV(I, 1), 8)
        End If
    Next I
    O.Range("D1").Resize(UBound(TV, 1), 1).Value = TV
    End Sub


    Le VBA sans musique c'est comme la Saint Valentin sans câlin - Thautheme
    À plus,

    Thauthème

    Je suis Charlie

  15. #15
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Thautheme
    Le VBA sans musique c'est comme la Saint Valentin sans câlin - Thautheme
    Mais les deux vont encore mieux sans la dualité "casseuse d'harmonie" d'un variant
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour Robert
    N'as-tu pas comme un peu l'impression de ce que ta solution (au demeurant la plus aisée) est celle déjà donnée par Patrice740 ?
    Amitiés
    bonjour Jaques,
    tu as raison

    @Patrice740
    Dernière modification par Invité ; 14/02/2019 à 11h14.

  17. #17
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum,

    Citation Envoyé par unparia Voir le message
    Mais les deux vont encore mieux sans la dualité "casseuse d'harmonie" d'un variant
    C'est une contrepèterie non : Mais les vieux vont encore me… dans la (sex)sualité "crasseuse d'harmonie" d'un vaillant...

    À plus,

    Thauthème

    Je suis Charlie

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 39
    Points : 34
    Points
    34
    Par défaut
    Merci tout le monde !

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

Discussions similaires

  1. [RegEx] Supprimer les ^ et les 6 caractère qui suivent
    Par mimagyc dans le forum Langage
    Réponses: 6
    Dernier message: 12/09/2007, 01h36
  2. Supprimer le dernier caractère d'une string
    Par calagan99 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 10/07/2007, 10h31
  3. Réponses: 2
    Dernier message: 26/06/2007, 16h04
  4. Supprimer l'accent d'un caractère
    Par odsen.s dans le forum C
    Réponses: 14
    Dernier message: 08/03/2007, 14h36
  5. supprimer 2 les 2 premiers caractères d'un fichier.
    Par menuge dans le forum Langage
    Réponses: 8
    Dernier message: 02/08/2006, 09h00

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