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 :

Chercher et supprimer du texte dans cellule [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Par défaut Chercher et supprimer du texte dans cellule
    Bonjour à tous,

    petit problème tout bête sans solution pour moi, dans une colonne j'ai des chiffres ainsi que des lettres qui sont variables, j'aimerai effacer tout le texte de cette colonne pour ne garder que les chiffres est ce possible?

    Merci pour vos futures réponses

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,
    Attention, ce code risque d'être long si tu as beaucoup de données, si c'est le cas il faudra passer par une variable tableau
    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
    Public Sub MACRO3()
     
    Dim LastLig As Long, i As Long
    'exemple en colonne D
    LastLig = Range("D" & Rows.Count).End(xlUp).Row
    For i = 2 To LastLig 'les données commencent en D2
     If IsNumeric(Range("D" & i)) = False Then
      Range("D" & i).ClearContents 'pour effacer la valeur
      'ou
      Range("D" & i).Clear 'pour effacer tout (y compris les formats)
      'ou
      Range("D" & i).Delete Shift:=xlUp 'pour supprimer la cellule et decaler les cellules vers le haut
     End If
    Next i
     
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Par défaut
    Merci pour cette réponse rapide. La macro proposée efface tout la cellule je pense qu'il doit prendre mes chiffres pour du texte alors? Dans la cellule c'est sous cette forme : 00701186 NOM

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Donc je n'ai pas compris ou tu t'es mal expliqué, tu as du texte et des chiffres au sein d'une même cellule, le code est donc à revoir mais ce soir, je fatigue, d'ici demain tu auras certainement la solution proposée par moi-même ou un autre membre.

    Bonne nuit et bon courage
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une petite fonction utilisant les expressions régulières
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function EffaceLettres(ByVal Str As String) As String
    Dim Rg As Object
     
    If Len(Str) > 0 Then
        Set Rg = CreateObject("VBScript.RegExp")
        With Rg
            .Pattern = "\D"
            .Global = True
            Str = .Replace(Str, "")
        End With
        Set Rg = Nothing
        EffaceLettres = Str
    End If
    End Function
    Qu'on peut utiliser sur la plage E1:E100 de Feuil1 comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
    Dim Plage As Range, c As Range
     
    Application.ScreenUpdating = False
    Set Plage = Worksheets("Feuil1").Range("E1:E100")    'à adapter
    Plage.NumberFormat = "@"
    For Each c In Plage
        c.Value = EffaceLettres(c.Value)
    Next c
    Set Plage = Nothing
    End Sub
    Ci-après lien pour un précieux tutoriel de Caféine http://cafeine.developpez.com/access/tutoriel/regexp/

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir mercatog,

    comme je ne suis toujours pas couché, je pensais proposer un code dans ce style à louqui, à condition que ses cellules se présentent comme il le montre, soit : une suite de chiffres, un espace et du texte
    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
     
    Public Sub MACRO3()
     
    Dim LastLig As Long, i As Long, plage As Range, tablo()
    Dim x() As String
    'exemple en colonne D
    LastLig = Range("D" & Rows.Count).End(xlUp).Row
    ReDim tablo(1 To LastLig - 1)
    Set plage = Range("D2:D" & LastLig)
    For i = 2 To LastLig 'les données commencent en D2
      x = Split(Range("D" & i), " ")
      tablo(i - 1) = x(0)
    Next i
    plage = WorksheetFunction.Transpose(tablo)
    End Sub
    mais à savoir si ses cellules sont comme indiqué ci-dessus

    bonne nuit
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 51
    Par défaut
    Toujours aussi efficace le forum! N'était pas encore couché moi non plus j'ai essayé la seconde proposition et ça a parfaitement fonctionné un grand merci à tous les deux!

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir casefayere
    Si les données sont comme tu dis
    à condition que ses cellules se présentent comme il le montre, soit : une suite de chiffres, un espace et du texte
    En une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("D:D").Replace " *", "", xlPart

  9. #9
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir mercatog,
    sans être publivore, j'ai envie de dire : << Je l'aurai un jour, je l'aurai >>
    Encore chapeau ! pour ton esprit pratique, mais après test sur 15000 lignes, ma méthode est plus rapide (à l'exécution) apparemment, encore faut-il manipuler autant de lignes, 0,5 secondes contre 4,4 secondes.

    Bonne soirée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut heu...
    bonjour

    bien que les codes de mercatog et case casefayere soient parfaits

    si les valeurs dans les cellules sont bien une série de chiffre suivis d'un espace
    et de lettre
    il y avait une solution encore plus simple

    avec le "split"

    exemple pour supprimer toute les lettre dans les cellule a1 a a200

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub supprime_toute_lettre()
    For Each cel In Range("a1:a200").Cells
    If cel <> "" Then cel.Value = Split(cel.Value, " ")(0)
    Next
    End Sub
    au plaisir
    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

  11. #11
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonsoir
    Une remarque, quand le séparateur est un espace, le 2ème paramètre se Split peut être omis

    (Déclares tes variables et indente tes codes Patrick, il est temps)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub supprime_toute_lettre()
    Dim Cel As Range
     
    For Each Cel In Range("A1:A200").Cells
        If Cel <> "" Then Cel.Value = Split(Cel.Value)(0)
    Next
    End Sub

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour mercatog
    quand tu recopie mon code pour me faire des remarques essaie au moins de le copier en entier
    Split(Cel.Value)(0)
    ????????

    si il y a un separateur de plus pour les milliers dans ce cas la
    une simple condition sur le tableau fera l'affaire

    exemple

    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_toute_lettre()
    Dim Cel As Range
    dim tableau as variant
      For Each Cel In Range("A1:A200").Cells
       if Cel <> "" Then 
        tableau= Split(Cel.Value," ")
         if tableau=2 then Cel.Value = Split(Cel.Value," ")(1)
         if tableau=1 then Cel.Value = Split(Cel.Value," ")(0)
     
      end if 
     Next
    End Sub
    et indenté en plus

    au plaisir
    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

  13. #13
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Split(Cel.Value," ")(0)
    Ce sont 2 écritures identiques. C'était ma remarque qui t'as irrité. Relis là doucement.

    Fais un F1 sur split, tu comprendras sans mes remarques.

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour mercatog

    je viens de faire l'essai sans la presision et ca ne fonctionne pas chez moi

    ca me dis qu'il manque des arguments

    mais de toute facon a fin d'eviter toute ambiguité je prefaire mettre les arguments on sait jamais
    je vais regarder ca de plus pret ainsi que le "remp"dont tu a parlé dans mon dernier post

    mais pour aujourdhui je ne suis pas chez moi et je n'est pas office sur cette becane
    je regarderais ca se soir

    merci

    au plaisir
    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

  15. #15
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    F1 sur Split
    Syntaxe
    Split(expression[, delimiter[, limit[, compare]]])
    delimiter Facultatif. Caractère de chaîne utilisé pour identifier les limites de sous-chaîne. S'il est omis, le caractère espace (" ") est utilisé comme séparateur par défaut. Si l'argument delimiter est une chaîne de longueur nulle, un tableau à un élément contenant toute la chaîne expression est renvoyé.

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

Discussions similaires

  1. [XL-2010] Supprimer du texte dans une cellule
    Par drn_008 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/04/2014, 16h01
  2. Réponses: 1
    Dernier message: 02/01/2014, 19h10
  3. ajout texte dans cellule
    Par david06600 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/02/2007, 17h35
  4. [XSL~FO] PB affichage texte dans cellule fusionnee
    Par audreyc dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 23/08/2006, 00h07
  5. [D7][DBGrid] Texte dans cellule particulière
    Par moulette85 dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/04/2005, 18h49

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