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

  1. #21
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par pgz Voir le message
    Je crois que tout a été expliqué.
    D'ailleurs tu te trompes parce que si tu fais dans ton code initial le changement que je t'ai indiqué cela marche très bien.

    EN quelque sorte je te défie à mon tour de prouver que le code suivant ne marche pas
    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
    34
    Dim m As Integer
     
    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: expression = ConcatenationLR(lignef + 1, counterf - 1)
    End If
    'test de la valeur d'expression -> prend bien la bonne valeur même quand F1 est vide!
    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
    La raison du dysfonctionnement est trouvée. Tous les symptômes sont expliqués. On fait marcher le code en changeant 1 ligne : celle qui pose problème. Je ne vois pas ce que l'on peut faire de plus clair.

    PGZ
    Exact tu as raison (encore une fois) pgz! Mais je ne comprends vraiment pas parce que mettre expression = .... dans l'appel récursif je l'avais fait et ça ne marchait pas......

    Reste un problème majeur : si les cellules de F1 à F9 sont vides alors cela me fait un espace pile insuffisant.... en fait il faudrait que je puisse arrêter le traitement dès que les 9 cellules ont été parcourues.... ce n'est pas le cas jusqu'à présent..... une idée??

  2. #22
    pgz
    pgz est déconnecté
    Expert éminent 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 : 70
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Citation Envoyé par francoisvba Voir le message
    Reste un problème majeur : si les cellules de F1 à F9 sont vides alors cela me fait un espace pile insuffisant.... en fait il faudrait que je puisse arrêter le traitement dès que les 9 cellules ont été parcourues.... ce n'est pas le cas jusqu'à présent..... une idée??
    Il n'y a qu'à demander :
    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
    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
     
    If counter < 0 Then Exit Function
     
    '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: expression = ConcatenationLR(lignef + 1, counterf - 1)
    End If
    'test de la valeur d'expression -> prend bien la bonne valeur même quand F1 est vide!
    MsgBox expression, vbDefaultButton2
    ConcatenationLR = expression
     
    End Function
    @Wilfried
    m'enfin je raconte peut être une bêtise !
    Tu sais très bien que tu as raison...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = ligne + 1 To i + nb
    engage une boucle jusqu'au dépassement de capacité de i.

  3. #23
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    re:

    la gestion des piles, voici un problème du à la recurcivité
    empilage des functions , mais 9 cela me parait peu pour arriver au bout de la pile

    voici une autre fonction de concaténation qui concatene à peu pret tout et est utilisable aussi en Formule pour concatener des matrices

    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
    Function Matrice_Concatener(valeur As Variant, Optional separator As String = "", Optional vide As Boolean = False) As String
        Dim c As Variant
        Application.Volatile
        For Each c In valeur
            If vide = False Then
                If c > "" Then
                    Matrice_Concatener = Matrice_Concatener & c
                    If separator > "" Then Matrice_Concatener = Matrice_Concatener & separator
                End If
            Else
                Matrice_Concatener = Matrice_Concatener & c
                If separator > "" Then Matrice_Concatener = Matrice_Concatener & separator
            End If
        Next
        If separator > "" And Matrice_Concatener > "" Then Matrice_Concatener = Left(Matrice_Concatener, Len(Matrice_Concatener) - Len(separator))
    End Function
    utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    expression = Matrice_Concatener(Range("F1:F9"),",")
    aucun problème de récurcivité

  4. #24
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par pgz Voir le message
    Il n'y a qu'à demander :
    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
    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
     
    If counter < 0 Then Exit Function
     
    '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: expression = ConcatenationLR(lignef + 1, counterf - 1)
    End If
    'test de la valeur d'expression -> prend bien la bonne valeur même quand F1 est vide!
    MsgBox expression, vbDefaultButton2
    ConcatenationLR = expression
     
    End Function
    @Wilfried
    Tu sais très bien que tu as raison...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = ligne + 1 To i + nb
    engage une boucle jusqu'au dépassement de capacité de i.
    Bon.... Merci pgz j'étais en train de poster la même chose haha! Par contre j'ai mis counterf < 0 et non counter (je ne sais pas si ça change grand chose.... En tout cas un grand merci à toi pgz car ce petit programme vient s'inscrire dans un truc bien plus long et lourd....

  5. #25
    Candidat au Club
    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
    Points : 2
    Points
    2
    Par défaut
    Ca faisait un bout de temps que je n'avais pas codé. Je n'ai codé qu'en C de toute ma vie (aussi html, sql mais bon ce n'est pas la même chose....).

    Donc là je me suis mis au vba par nécessité pour le boulot...

    UN GRAND MERCI pgz! Vraiment merci tu m'as ouvert les yeux alors que la solution était devant mon nez.....
    Merci à tous les autres bien sûr également!

    Très bon week-end à vous tous et peut-être à bientôt!
    Françoisvba

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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