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 :

Recherche et concaténation des résultats


Sujet :

Macros et VBA Excel

Vue hybride

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

    Informations forums :
    Inscription : Décembre 2008
    Messages : 27
    Par défaut Recherche et concaténation des résultats
    Bonjour,

    Je suis un peu novice en VBA et j'ai donc essayé un petit programme simple mais cela ne marche pas...
    Je veux créer une fonction qui prend 2 valeurs en entrée. Ces 2 valeurs sont recherchés dans un tableau (la valeur 1 doit être contenue dans la colonne A et la valeur 2 doit être contenue dans la colonne B). Si ces 2 conditions sont remplies, je souhaite récupérer la valeur de la colonne 3. Je parcours ainsi tout mon tableau et je concaténe les résultats avant de les retourner.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function maConcatenation(valeur1 as String, valeur2 as String) as String
    Worksheet("Calcul").Select
    For length =1 to 100 then
    if Cells(length,1)=valeur1 Then
     if Cells(length,2)= valeur2 Then
     maConcatenation=maConcatenation&" "&Cells(length,3)
    End If
    End If
    Next length
    End Function
    J'ai essayé de mettre un .Value à la fin de Cells mais rien n'y change sauf le message d'erreur...

    Lorsque j'aurai compris cela je m'attaquerai à ne parcourir que mon tableau et non pas les 100 premières lignes de la feuille...

    En tt cas, si vous avez des idées ce serait super !
    Merci à vous et bonne soirée,

    Nico

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    un message d'erreur ?

    c'est jamais une bonne idée d'utiliser Select ... il faut préciser la feuille concernées devant Cells, range....

    Utilise une variable string intermédiaire pour calculer ta concaténation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim st As stiring 
     
    (...)
    st = st & " " & (....)
     
    (...)
     
    MaConcatenation = st
    End function

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Par défaut
    bonjour,

    je ne suis pas sur de tout avoir compris et c'est ma première réponse sur ce forum mais essaye

    1. d'ajouter en première ligne de ta fonction
    (pour initialiser ton résultat)

    2. de changer

    C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ells(length,1)=valeur1  en    Cells(length,1).text=valeur1 
    Cells(length,2)=valeur2  en    Cells(length,2).text=valeur2 
    maConcatenation=maConcatenation&" "&Cells(length,3)
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maConcatenation=maConcatenation&" "&Cells(length,3).text
    (si tu as bien des valeurs textes dans tes cellcules)

    Dis moi si ça aide

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 27
    Par défaut
    Alors tout d'abord merci à vous 2.

    La solution donnée, d'écrire ".text" ne fonctionne pas. Je n'ai aucune erreur à l'execution mais le résultat obtenu est #VALEUR....

    Nico

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Par défaut
    as-tu essayé d'ajouter

    maConcatenation = ""

    en 1ère ligne de ta fonction ?

  6. #6
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu as dû faire l’impasse sur le conseil de bbil
    Utilise une variable string intermédiaire pour calculer ta concaténation
    Essaie avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function maConcatenation(valeur1 As String, valeur2 As String) As String
    Dim st As String
    Dim Length As Long
        With Worksheets("Calcul")
            For Length = 1 To 100
                If .Cells(Length, 1) = valeur1 Then
                    If .Cells(Length, 2) = valeur2 Then
                         st = st & " " & .Cells(Length, 3)
                    End If
                End If
            Next Length
        End With
        maConcatenation = st
    End Function
    Cordialement.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 27
    Par défaut
    Oui j'ai essayé et cela ne change rien. Par contre, j'appelle ma fonction sur toute une colonne.
    Le premier résultat est 0 au lieu de test1.
    Le deuxième résultat est 0 0#VALEUR!0 au lieu de test3 test2
    Le troisième résultat est 0 0#VALEUR!0 0 au lieu de test3 test2.

    J'ai donc l'impression que la concaténation est mauvaise et qu'il ne réinitialise pas la valeur malgré le maConcatenation="" et st=""

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par nicotimo Voir le message
    ...
    J'ai donc l'impression que la concaténation est mauvaise et qu'il ne réinitialise pas la valeur malgré le maConcatenation="" et st=""
    on as toujours pas vu le code que tu utilise ... le code que tu nous montre ne peu s'exécuter en l'état ... ! la "ré-initialisation" ne sert à rien ... en VB les variables string sont automatiquement initialisé en "" lors de leur déclaration.. il n'y as rien à écrire.

    de plus dis nous comment tu appelle ta fonction quels sont les paramètres utilisés ? que contiennent tes colonnes A et B ?

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 27
    Par défaut
    Pardon, j'ai tenu compte des différentes remarques.
    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
     
    Function maConcatenation(valeur1 As String, valeur2 As String) As String
    Dim st As String
    Dim length as Long
     
    st=""
    maConcatenation=""
     
    With Worksheets("Calcul").Select
     
    For length = 1 To 100
    <div style="margin-left:40px">If Cells(length,1) = valeur1 Then
    <div style="margin-left:40px">if Cells(length,2) = valeur2 Then
    st = st &" "& Cells(length,3)
    End if</div>End if</div>Next length
    End With
    maConcatenation = st
    End Function
    Ceci me retourne toujours 0.

    Si je remplace Cells(X,Y) par Cells(X,Y).text, j'obtiens le résultat évoqué tt à l'heure:
    Le premier résultat est 0 au lieu de test1.
    Le deuxième résultat est 0 0#VALEUR!0 au lieu de test3 test2
    Le troisième résultat est 0 0#VALEUR!0 0 au lieu de test3 test2.

    Pour ce qui est de la mise en place de mon test, j'ai la Feuil1 avec:
    A6 qui contient DM01
    B6 qui contient 3.0
    C6=maConcatenation(A6;B6)

    A7 qui contient DM02
    B7 qui contient 3.1
    C7=maConcatenation(A7;B7)

    A8 qui contient DM03
    B8 qui contient 3.1
    C8=maConcatenation(A8;B8)

    et sur la feuille nommée "Calcul":
    A6 qui contient DM01
    B6 qui contient 3.0
    C6 qui contient test1

    A7 qui contient DM02
    B7 qui contient 3.1
    C7 qui contient test3

    A8 qui contient DM02
    B8 qui contient 3.1
    C8 qui contient test2

    A9 qui contient DM03
    B9 qui contient 3.2
    C9 qui contient test

    Merci en tt cas !

  10. #10
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par nicotimo Voir le message
    Alors tout d'abord merci à vous 2.

    La solution donnée, d'écrire ".text" ne fonctionne pas. Je n'ai aucune erreur à l'execution mais le résultat obtenu est #VALEUR....

    Nico
    Ou en est tu de ton code ? as tu appliqué les correction préconisé (suppression de Select ?)
    as tu corrigé tes fautes de syntaxes ? (il manque un s à Worksheeets)

    as tu enlevé ce "Then" perdu en plein milieu de ton code ?

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

Discussions similaires

  1. [XPATH 1.0] Concaténer des résultats en requête
    Par chris_wafer dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 20/04/2015, 07h29
  2. Concaténation des résultats de 2 requêtes
    Par corro dans le forum SQL
    Réponses: 3
    Dernier message: 31/10/2011, 17h32
  3. procédure stockée, concaténation des résultats
    Par doudoustephane dans le forum Développement
    Réponses: 8
    Dernier message: 13/10/2008, 16h52
  4. [Requête]Concaténation des résultats d'une requête SQL
    Par teks9 dans le forum Développement
    Réponses: 2
    Dernier message: 01/09/2008, 15h34
  5. Affichage des résultats d'un moteur de recherche
    Par poah dans le forum Langage
    Réponses: 1
    Dernier message: 24/11/2005, 14h31

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