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 :

concaténer deux références de cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 61
    Par défaut concaténer deux références de cellule
    Bonjour,

    J'ai une Feuil1 contenant les références de cellule à récupérer dans la Feuil2.

    Exemple, en Feuil1, j'ai la cellule B20 qui contient la valeur "A". Cette valeur A signifie qu'il faut récupérer la valeur contenu dans la colonne A de la Feuil2

    Dans le but d'effectuer une comparaison sur plusieurs cellules, je souhaite récupérer les valeurs de deux cellules en Feuil2 en faisant appel à leur référence en Feuil1.

    Aussi, voici mon code vba :

    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
     
     
    Dim reference1, reference2 as String
     
     
                'La récupération de mes références cellule
                reference1 = Worksheets("Feuil1").Range("B20").Value & NoLig2
                reference2 = Worksheets("Feuil1").Range("C20").Value & NoLig2
     
     
                'Et ma comparaison
                If Worksheets("Feuil2").Range("D" & NoLig & "").Value = Worksheets("Feuil2").Range( _
                reference1 & reference2).Value Then  
     
                   'Si condition est vraie, etc.....
    J'ai une erreur 1004 sur ma ligne de comparaison. Si je ne compare que la valeur contenu dans une seule des références, cela fonctionne. J'ai l'impression que c'est la concaténation qui pose problème. Auriez-vous une idée ?

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    Bonjour,

    En supposant que les variables NoLig et NoLig2 sont initialisées, reste,a priori, deux erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Worksheets("Feuil2").Range("D" & NoLig & "").Value
    & "" est en trop

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    = Worksheets("Feuil2").Range( _
                reference1 & reference2).Value Then
    si NoLig2=5 partexemple
    reference1 sera de la forme A5
    reference2 sera de la forme B5

    Range(reference1 & reference2) deviendrait Range("A5B5"). A5B5 n'est pas une plage de cellules correctement spécifiée.

    De plus on ne peut pas obtenir la "Value" d'une plage., mais d'une cellule.

    Et, même si la plage est correctement spécifiée, on ne peut pas comparer la valeur d'une cellule avec une plage (qui comporte les "value" des cellules qui la composent)

    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 61
    Par défaut
    Effectivement, je n'ai pas bien recopié mon code et oublié l'espace entre chaque référence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    = Worksheets("Feuil2").Range( _
                reference1 & " " & reference2).Value Then
    Quand je fais le même appel directement sur les cellules concernées, sans faire appel au référence, ça fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'Fonctionne parfaitement
    f Worksheets("Feuil2").Range("D" & NoLig & "").Value = Worksheets("Feuil2").Range("A" & NoLig2 & " " & "B" & NoLig2 & "").Value Then
    J'ai besoin ici de vérifier que la valeur qui est contenue dans ma cellule D1 soit la même que la concaténation de la cellule A1 et B1.

    Il semble que la concaténation ne soit plus possible lorsque je passe par les références des cellules et non par les cellules directement... quelque chose m'échappe ?

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    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
     
        Dim Celref1 As Range, Celref2 As Range, Celref3 As Range, reference$, NoLig&, NoLig2&
        'NoLig = X
        'NoLig2 = Y
        '
        'La récupération de mes références cellule
        With Sheets("Feuil2")
            Set Celref1 = .Range(Sheets("Feuil1").Range("B20").Value & NoLig2)    'ref1 en tant que range et non string (peut être réutilisé plus tard dans la macro lecture/écriture)
            Set Celref2 = .Range(Sheets("Feuil1").Range("C20").Value & NoLig2)    'ref2 en tant que range et non string (peut être réutilisé plus tard dans la macro lecture/écriture)
            Set Celref3 = Sheets("Feuil2").Range("D" & NoLig)    'la D+NoLig          'ref3 en tant que range et non string (peut être réutilisé plus tard dans la macro lecture/écriture)
        End With
        '
        'Et ma comparaison
        reference = Replace(Join(Array(Celref1.Value, Celref2.Value, Celref3.Value)), Celref1.Value, "")
        'Si condition est vraie, etc.....
        If reference = "" Then    'si les 3 cellules ont la meme valeur
            '...........faire ceci ou cela
        Else    'sinon
            ' alors faire ceci
        End If
        '
        'exemple de réutilisation
        '
        'MsgBox Celref1.Value
        'MsgBox Celref1.Value
        'MsgBox Celref1.Value
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    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,

    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil2").Range("A" & NoLig2 & " " & "B" & NoLig2 & "").Value
    tu concatènes 2 références pour en faire une référence erronée. "A2 B2" ne correspond à rien, tout autant que "A2B2" auparavant.
    Si tu veux concaténer les 2 cellules c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil2").Range("A" & NoLig2).value & Worksheets("Feuil2").Range("B" & NoLig2).value
    A toi de remplacer A et B par ce qu'ils doivent être.
    eric

  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

    Plusieurs mots du message de ifiii et de son titre font qu'il m'est quelque peu malaisé de déterminer avec précision ce qu'il entend par "concaténation de références"

    Je préfère dans ces conditions répondre de la manière suivante qui traite trois hypothèses distinctes d'interprétation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ligne1 = 2
    ligne2 = 4
    lettre1 = "A" '(ou le contenu d'une cellule; exemple Range("Y" & ligne1.value))
    lettre2 = "B"  '(ou le contenu d'une cellule; exemple Range("Z" & ligne2.value))
    MsgBox Range(lettre1 & ligne1 & ":" & lettre2 & ligne2).Address '---->> concaténation aboutissant à une plage continue
     
    MsgBox Union(Range(lettre1 & ligne1), Range(lettre2 & ligne2)).Address ' ---->>  concaténation aboutissant à une nouvelle plage constituée des deux plages
     
    MsgBox Range(lettre1 & ligne1).Value & Range(lettre2 & ligne2).Value ' ----->> concaténation des valeurs contenues dans deux cellules

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    J'ai besoin ici de vérifier que la valeur qui est contenue dans ma cellule D1 soit la même que la concaténation de la cellule A1 et B1.
    Alors se serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    NoLig=1
    ...
    reference1 = Worksheets("Feuil1").Range("A" & NoLig").Value 
    reference2 = Worksheets("Feuil1").Range("B" & NoLig").Value 
     
    'Et ma comparaison
    If Worksheets("Feuil2").Range("D" & NoLig ).Value = reference1 & reference2 Then
    ...
    à la feuille près ....

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    J 'ai besoin ici de vérifier que la valeur qui est contenue dans ma cellule D1 soit la même que la concaténation de la cellule A1 et B1.
    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
     
    Dim Celref1 As Range, Celref2 As Range, Celref3 As Range, OK As Boolean, NoLig&, NoLig2&
        'NoLig = X
        'NoLig2 = Y
        '
        'La récupération de mes références cellule
        With Sheets("Feuil2")
            Set Celref1 = .Range(Sheets("Feuil1").Range("B20").Value & NoLig2)    'ref1 en tant que range et non string (peut être réutilisé plus tard dans la macro lecture/écriture)
            Set Celref2 = .Range(Sheets("Feuil1").Range("C20").Value & NoLig2)    'ref2 en tant que range et non string (peut être réutilisé plus tard dans la macro lecture/écriture)
            Set Celref3 = .Range("D" & NoLig)    'la D+NoLig          'ref3 en tant que range et non string (peut être réutilisé plus tard dans la macro lecture/écriture)
        End With
        '
        'Et ma comparaison
        OK = Join(Array(Celref1.Value, Celref2.Value)) = Celref3.Value
     
        'Si condition est vraie, etc.....
        If reference Then     'si la valeur de ref1 et ref2 est = a ref3
            '...........faire ceci ou cela
        Else    'sinon
            ' alors faire ceci
        End If
        '
        'exemple de réutilisation
        '
        'MsgBox Celref1.Value
        'MsgBox Celref2.Value
        'MsgBox Celref3.Value
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Concaténation références de cellules et point virgule
    Par michaeljeru dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 21/10/2010, 11h45
  2. Concaténer deux tableaux de cellules
    Par wawrint dans le forum MATLAB
    Réponses: 2
    Dernier message: 22/05/2008, 11h53
  3. LISTBOX rowsource : référence à des cellules fusionées
    Par alexxx69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/10/2005, 15h42
  4. Réponses: 6
    Dernier message: 27/05/2004, 10h41
  5. Concaténer deux variables ?
    Par glsn dans le forum ASP
    Réponses: 2
    Dernier message: 19/12/2003, 13h53

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