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 :

) dans une condition d'une fonction


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 18
    Points
    18
    Par défaut ) dans une condition d'une fonction
    Bonsoir à tous,

    J'ai écrit dans une fonction le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Mid(v, i, 1) = Chr(41) Then i = i - 2 Else i = i - 1
    mais cela ne fonctionne pas.
    Je cherche à créer une condition si le caractère dans une chaîne est égal à ) soit Chr(41).
    Merci de votre aide

  2. #2
    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
    que contient v ?
    Que contient i ?
    comment v et i ont-elles été déclarées et initialisées ?

    Et si i est variable dans une boucle For ... to ... Next, montre donc également cette boucle.

    (j'ai égaré ma boule de cristal ;

    EDIT : et
    mais cela ne fonctionne pas.
    n'a aucun sens précis ...
    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.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 18
    Points
    18
    Par défaut
    J'utilise while i > 0
    Je cherche à connaitre la position de ) dans une chaine de caractère dans une cellule
    merci d'avance

  4. #4
    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
    1) répétons-nous donc (je ne le ferai plus)
    que contient v ?
    Que contient i ?
    comment v et i ont-elles été déclarées et initialisées ?
    2)
    mais cela ne fonctionne pas.
    n'a aucun sens précis ...
    Et maintenant : une boucle while -->> montre cette boucle
    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.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 18
    Points
    18
    Par défaut
    v est une chaine de caractères, i est le nbre de caractères de la chaine
    pas de declaration
    la fonction ne renvoie pas la position de )

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 18
    Points
    18
    Par défaut
    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
    Public Function posnd2(cellule As Range, N As Long)
    'Position du Niéme caractère numérique
    'd'une chaîne contenue dans une cellule.
    'N: Entier positif (obligatoire)
    v = cellule.Value
    i = Len(v)
    While i > 0
        If IsNumeric(Mid(v, i, 1)) Then
            k = k + 1
            If k = N Then
                posnd = i
                i = 0
            End If
        End If
        If Mid(v, i, 1) = Chr(41) Then i = i - 2 Else i = i - 1
    Wend
    If posnd = 0 Then posnd = "Pas de " & N & " ième chiffre."
    End Function

  7. #7
    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 vois que tu as "répondu" à chacune de mes demandes (réitérées, de surcroît)
    Hé bien bye et bonne chance.
    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.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 18
    Points
    18
    Par défaut
    Une petite question à mon tour "unparia" tu es un expert éminent de quoi ?

  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
    Une petite question à mon tour "unparia" tu es un expert éminent de quoi ?
    de l'analyse des demandes d'aide ...
    Je vois que tu as fini par poster ton code pendant que je te répondais.
    Et comme (voir ma phrase juste au-dessus), j'analyse les demandes, je ne comprends pas cette énorme fossé entre
    1) ta demande originelle :
    Je cherche à créer une condition si le caractère dans une chaine est égal à ) soit Chr(41)
    confortée par le titre que tu as donné :
    ) dans une condition d'une fonction
    et le code que tu montres maintenant, qui me parait être la recherche/exercice du nième caractère numérique présent dans une chaîne de caractères !
    Etrange, n'est-il pas ?

    A moins que tu ne cherches à déterminer la position du premier ")" apparaissant après le dernier caractère numérique ?
    Allez -->> je vais t'aider, mais tu vas faire l'effort (tu as un clavier) d'exposer clairement et précisément les tenants et aboutissants.
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 18
    Points
    18
    Par défaut
    oui je vois tu es quelqu'un qui ne peut pas répondre à une question simple. Tu as besoin d'un marteau pilon pour enfoncer un clou (au cas où...) ou bien de remonter à l'origine du monde

    Ma question est simple :
    Est-ce que la ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Mid(v, i, 1) = Chr(41) Then i = i - 2 Else i = i - 1
    est correcte en terme de syntaxe dans une fonction ou bien y-a-t-il une erreur sur la partie = Chr(41) sensée représenter le caractère ) ?

    Merci d'avance pour ton efficacité

  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
    If Mid(v, i, 1) = Chr(41) Then i = i - 2 Else i = i - 1
    correcte ? Ben oui, elle l'est (dans la mesure ou i ne devient jamais < 0)
    Et ")" a bien 41 pour valeur ascii.
    Ton mécanisme, par contre ... (je préfère me taire)
    Bon -->> débrouille toi avec ce que je vais bâcler là --->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function posnd2(cellule as range, N as long) as string
      dim k as integer, nb as integer
      with cellule
        if not .text like worksheetfunction.rept("*#", N) & "*)*" then
            posnd2 = "pas de " & N & "ième chiffre ou pas de "")"" après le " & N & "ième chiffre": exit function
        else
          for k = 1 To len(.text)
            if isnumeric(mid(.text, k, 1)) then nb = nb + 1
            if nb = N then exit For
          Next
          posnd2 = "position du ) suivant le " & N & "ième caractère : " & cstr(inStr(k, .text, ")"))
        end If
      end with
    end function
    à tester/appeler par exemple ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox posnd2(range("A1"), 2)
    et ne me demande pas d'explications (moi, je ne fais qu'enfoncer des clous et code un peu au hasard,).
    Bonne chance
    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
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Points : 18
    Points
    18
    Par défaut
    Merci je suis vraiment très impressionné

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/03/2016, 18h48
  2. Réponses: 2
    Dernier message: 27/02/2015, 10h13
  3. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. masquer ou afficher une condition liée à une condition?
    Par secondechance dans le forum IHM
    Réponses: 2
    Dernier message: 14/11/2008, 20h36

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