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 :

Tester les caractères barrés dans une cellule [XL-97]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 127
    Points : 179
    Points
    179
    Par défaut Tester les caractères barrés dans une cellule
    Bonjour,

    J'ai un fichier excel contenant des cellules dans lesquelles ont trouve des mots en caractères barrés.
    Je dois mettre le mot sauf devant les parties barrées. Le code ci dessous fonctionne pour certaines cellules, mais si la cellule contient des termes non barrés cela ne fonctionne pas. Il faut donc que je teste la présence du striketrough sur chaque caractères de chaque cellule.

    Merci pour vos réponses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim i As Integer
    Dim sContenu As String
    For i = 1 To 5000
            Range("A" + CStr(i)).Select
            sContenu = ActiveCell.FormulaR1C1
            If ActiveCell.Font.Strikethrough = True Then
                ActiveCell.FormulaR1C1 = "sauf " + sContenu
                ActiveCell.Font.Strikethrough = False
                ActiveCell.Font.Color = vbRed
            End If

  2. #2
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 155
    Points : 178
    Points
    178
    Par défaut
    Je ne comprend pas trop où est le problème. J'ai testé ton code (j'ai ajouté next i pour finir la boucle) et cela fonctionne: les cellules barrées ont été remplacées par "sauf " + la valeur précédente de la cellule.
    Reformule ta question, STP

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 127
    Points : 179
    Points
    179
    Par défaut
    Oui pour le next il est passé à la trappe lors du copier coller

    Dans le cas d'une cellule contenant par exemple :
    Peugeot 206 -ABS-

    Seul ABS est en style barré et là cela ne fonctionne pas, il faut que le résultat devienne :
    Peugeot 206 sauf ABS

    Merci pour ton commentaire

    En fait la question qui résumerait le mieux mon problème serait par exemple:

    Comment puis savoir si le dixième caractère d'une cellule est en strikethrough (barré)?

    Merci pour votre aide

  4. #4
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    il faut tester chaque caractère, si un seul est barré, on applique la modif
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim i As Integer
    For i = 1 To 5000 
      With Range("A" + CStr(i))
        For k = 1 To Len(Range("A" + CStr(i)))
         If .Characters(k, 1).Font.Strikethrough Then
                .FormulaR1C1 = "sauf " + Range("A" + CStr(i))
                .Font.Strikethrough = False
                .Font.Color = vbRed
          End If
        Next k
       End With
    Next i

  5. #5
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Une proposition
    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
    Dim i As Integer, k As Integer
     
    For i = 1 To Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
        k = 1
        With Range("A" & i)
            If Len(.Value) >0 Then
                Do
                    If Not .Characters(k, 1).Font.Strikethrough Then
                        k = k + 1
                    Else
                        Exit Do
                    End If
                Loop Until k = Len(.Value)
                If k < Len(.Value) Then
                    .Value = Left(.Value, k - 1) & "sauf " & Mid(.Value, k)
                    .Font.Strikethrough = False
                End If
            End If
        End With
    Next i

  6. #6
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut Une méthode plus rapide...
    vaut :

    "True" si toute la cellule est barrée
    "False" si toute la cellule n'est pas barrée
    "Null" si une partie de la cellule est barrée


    Donc un simple test "IF ISNULL() Then" suffit.

    ESVBA

  7. #7
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Oui mais il faut récupérer la position du premier caractère barré!!

  8. #8
    Membre éclairé
    Inscrit en
    Décembre 2006
    Messages
    893
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 893
    Points : 833
    Points
    833
    Par défaut Comme on dit "oups"
    A force de survoler et de croire que l'on sait...

    Merci de m'avoir rectifier.

    ESVBA

  9. #9
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 127
    Points : 179
    Points
    179
    Par défaut Merci
    Merci,
    Ca va beaucoup m'aider pour mes 5200 lignes. Plus les 50'000 lignes à venir.
    Je teste et je confirmerai la résolution.

  10. #10
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    déclare Edit: une proposition complète
    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
    Dim i As Long, k As Integer
     
    For i = 1 To Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
        k = 1
        With Range("A" & i)
            If Trim(.Value) <> "" Then
                If .Font.Strikethrough Then
                    .Value = "Sauf " & .Value
                ElseIf IsNull(.Font.Strikethrough) Then
                    Do
                        If Not .Characters(k, 1).Font.Strikethrough Then
                            k = k + 1
                        Else
                            Exit Do
                        End If
                    Loop Until k = Len(.Value) + 1
     
                    If k <= Len(.Value) Then
                        .Value = Left(.Value, k - 1) & "Sauf " & Mid(.Value, k)
                    End If
                End If
                .Font.Strikethrough = False
            End If
        End With
    Next i

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 127
    Points : 179
    Points
    179
    Par défaut Cool
    Ca marche très bien, merci ça va me faciliter la vie et me permettre d'importer correctement les données (catalogues automobiles).


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

Discussions similaires

  1. texte barré dans une cellule
    Par nawake dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/03/2008, 17h11
  2. Réponses: 2
    Dernier message: 24/01/2008, 13h32
  3. Connaitre le nbre de caractère contenu dans une cellule Excel
    Par darkspoilt dans le forum VBA Access
    Réponses: 1
    Dernier message: 04/09/2007, 10h19
  4. Réponses: 2
    Dernier message: 07/06/2007, 17h44
  5. [JTABLE] afficher les retours chariots dans une cellule
    Par d_token dans le forum Composants
    Réponses: 3
    Dernier message: 11/09/2006, 13h03

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