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 :

paramètre string fonction -> fonctionne pas toujours?!


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Par défaut paramètre string fonction -> fonctionne pas toujours?!
    Bonjour à tous,

    Sans transition, voici ma question!

    -> J'ai un fichier avec un seul onglet ("feuil1").
    -> Dans cet onglet, les cellules F1 à F9 sont (ou non) une à une remplies et c'est tout "l'enjeu" de ma discussion.
    -> Je veux concaténer le contenu de ces mêmes cellules dans une autre cellule (A3) uniquement lorsqu'elles sont non vides (de F1 à F9).
    Ex : F1 est vide, F3 est vide ainsi que F9 --> je concatène F2, F4, F5, F6, F7, F8 uniquement

    Le code que j'ai fait marche SAUF lorsque F1 est vide. Je ne comprends pas la raison. Le voici : (sorti de son contexte et donc simplifié afin d'avoir vos lumières plus rapidement!) :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    Function ConcatenationLR(ligne As Integer, counter As Integer) As String
     
    Dim lignef As Integer
    Dim expression As String
    Dim counterf As Integer
     
    lignef = ligne
    counterf = counter
    expression = Range("F" & lignef).Value
     
    'Test si champs vide
    If expression <> "" Then
        ' concaténer valeurs des cellules si non vides
        For m = lignef + 1 To lignef + counterf
            If Range("F" & m) <> "" Then
            expression = expression & ", " & Range("F" & m)
            End If
        Next
    Else: Call ConcatenationLR(lignef + 1, counterf - 1)
    End If
    'test de la valeur d'expression -> prend bien la bonne valeur même quand F1 est vide!
    A = MsgBox(expression, vbDefaultButton2)
    ConcatenationLR = expression
     
    -------------------------------------------------------------------------
    End Function
    Sub ok()
     
    Sheets("Feuil1").Select
    'Range("A3").Value ne prend pas la bonne valeur quand F1 est vide.....!
    Range("A3").Value = ConcatenationLR(1, 8)
     
    End Sub
    Voilà, je suis nouveau sur le forum mais crois pourtant beaucoup en lui!

    Merci à tous et n'hésitez pas à donner votre avis!

    Ciao!

  2. #2
    Membre averti
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Décembre 2008
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 18
    Par défaut
    Sans transition, j'apporte une réponse qui me semble correcte :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    expression = Range("F" & lignef).Value
    'Test si champs vide
    If expression <> "" Then....
    
    Ce premier test signifie que tu ne fais pas le calcul si Expression est vide.
    Or tu as mis dans expression le contenu de F1...

    Donc si F1 est vide, pas de calcul. Je pense que retirer ce premier test t'apportera ta réponse.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Par défaut
    Bonjour

    A votre idée :

    Ce premier test signifie que tu ne fais pas le calcul si Expression est vide.
    Or tu as mis dans expression le contenu de F1...

    Donc si F1 est vide, pas de calcul. Je pense que retirer ce premier test t'apportera ta réponse.
    Je réponds que non puisque si F1 est vide, alors on rentre dans le :
    Else: Call ConcatenationLR(lignef + 1, counterf - 1)

    En fait, le problème c'est que ça marche si je demande d'afficher expression via une boîte de dialogue. Mais quand je demande d'écrire expression dans une cellule (c.f. A3 dans notre cas) ça ne marche pas!

    Merci de m'aider!!!

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Je pense que c'est la structure de ta fonction récursive qui ne va pas. 'Expresion' est une variable locale de la fonction. DOnc à chaque appel, une nouvelle variable est crée. Quand tu reviens dans la fonction appelante expression est la variable initiale (vide) et non pas la variable que tu a renseignée dans la fonction appelée.

    Si c'est un exercice sur les fonctions récursives, ça peut s'arranger : passer Expression dans les arguments ByRef de la fonction.

    Sinon une méthode itérative pose moins de problème...

    PGZ

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 14
    Par défaut
    Mais comment expliquez-vous que lorsque je lance ma procédure "ok" cela marche dans le cas où F1 n'est pas vide ?

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Citation Envoyé par francoisvba Voir le message
    Mais comment expliquez-vous que lorsque je lance ma procédure "ok" cela marche dans le cas où F1 n'est pas vide ?
    Parce que dans ce cas là il n'y a aucun appel récursif! Et seulement un traitement itératif.

    Tu veux une solution récursive ou itérative?

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

Discussions similaires

  1. [XL-2007] Fonction somme.si ne fonctionne pas toujours
    Par tofies33 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/02/2015, 12h38
  2. fonction intval ne fonctionne pas toujours ?
    Par ninikkhuet dans le forum Langage
    Réponses: 2
    Dernier message: 24/12/2009, 10h23
  3. Réponses: 2
    Dernier message: 12/05/2006, 23h01
  4. [CSS] a:active ne fonctionne pas toujours ?
    Par KpTn dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/05/2006, 17h25
  5. Open et opener => Ma fonction ne... fonctionne pas...
    Par romulus dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 17/03/2006, 11h40

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