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 :

Condition si chaîne de caractère


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Architecte technique
    Inscrit en
    Janvier 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 27
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 3
    Par défaut Condition si chaîne de caractère
    Bonjour,

    Je cherche à identifier si dans les formules d'une plage de cellule il existe un caractère spécifique.
    Si vrai, il doit ensuite vérifier dans les cellules qu'il vient d’identifier comme vrai qu'il n'existe pas d'autres caractères spécifiques.

    C'est un if imbriqué avec la formule ET je crois.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        For I = 1 To PlageDeCellule.Cells.Count
                If InStr(1, PlageDeCellule(I).FormulaR1C1, "=", vbTextCompare) > 0 Then
    Traduction la phrase :
    'si dans cette cellule vrai il n'y a pas la liste de caractère suivant : de "+" et "-" et ";" Then


    Un grand merci pour votre aide car je crois que ce n'est pas simple.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Fait 3 recherches :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (InStr(1, PlageDeCellule(I).FormulaR1C1, "+", vbTextCompare) + InStr(1, PlageDeCellule(I).FormulaR1C1, "-", vbTextCompare) +  InStr(1, PlageDeCellule(I).FormulaR1C1, ";", vbTextCompare)) = 0 then
    eric

  3. #3
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut
    Bonjour,

    à voir à quoi cela sert ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub VerifFormule()
    Dim oCell As Range
    Dim PlageSource As Range
    Set PlageSource = Range("I2:I8")
    For Each oCell In PlageSource
      If VBA.InStr(1, oCell.Formula, "=") > 0 And VBA.InStr(1, oCell.Formula, "+") = 0 And _
        VBA.InStr(1, oCell.Formula, "-") = 0 And VBA.InStr(1, oCell.Formula, ";") = 0 Then
     
        MsgBox "la cellule " & oCell.Address & " repond aux critères"
      End If
    Next
    End Sub

  4. #4
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut
    Bonjour Kikoox !

    Remplacer, dans le code FormulaR1C1 par Formula… cela devrait aller mieux !

    FormulaR1C1 présente les formules sous la forme =R[C-2] par exemple, pour aller chercher une cellule située à gauche, et présente donc un signe "-" dans la chaîne de caractères de la formule et est donc exclue par le test effectué !

  5. #5
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour,

    J'utiliserais plutôt une fonction qui compte les caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function CompterCaracteres(ByVal c As String, chaine As String) As Long
        CompterCaracteres = Len(chaine) - Len(Replace(chaine, c, ""))
    End Function
     
    Sub test()
        MsgBox CompterCaracteres("+", "1+2+3+4+5")
    End Sub
    Cette fonction peut être améliorer pour compter plusieurs caractères différents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function CompterCaracteres(ByVal chaine As String, ParamArray Caracteres()) As Long
        Dim i&, temp$: temp = chaine
        For i = 0 To UBound(Caracteres)
            temp = Replace(temp, Caracteres(i), "")
        Next i
        CompterCaracteres = Len(chaine) - Len(temp)
    End Function
     
    Sub test()
        MsgBox CompterCaracteres("1+2+3+4-5", "+", "-")
    End Sub

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour

    Je ne suis pas certain d'avoir tout bien compris.
    Il me semble pourtant que l'utilisation toute bête de l'opérateur Like est ce qui convient.
    En rappelant qu'une formule n'est qu'une chaîne de caractères.

  7. #7
    Membre expérimenté Avatar de EBRAG
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Avril 2013
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2013
    Messages : 125
    Par défaut
    Bonjour Antony !

    Pourquoi perdre du temps à compter les caractères "x" quand la présence d'un seul "x" suffit à réagir !

    Ce que j'en dis n'est là que pour le débat !

  8. #8
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Car le message initial n'est pas clair.

    Je cherche un caractère et si il y en je cherche a nouveau un caractère (il peut s'agir du même).

    Ma proposition est donc plus global et plus facile à mettre en œuvre dans le code.
    Enfin à mon gout.

Discussions similaires

  1. [Batch] Condition sur un caractère dans une chaîne de caractère
    Par frutix dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 10/03/2014, 17h33
  2. Réponses: 36
    Dernier message: 13/11/2013, 16h46
  3. Réponses: 11
    Dernier message: 13/12/2011, 17h41
  4. chaîne de caractère en condition d'un IF
    Par yann_m dans le forum Débuter
    Réponses: 6
    Dernier message: 22/11/2007, 08h43
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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