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 :

[VBA] remplir un range de cellule avec les valeurs d'autres ranges [Débutant(e)] [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut [VBA] remplir un range de cellule avec les valeurs d'autres ranges
    Bonjour,

    j'aimerais comprendre pourquoi les très simple code suivant ne fonctionne 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
     
    Sub TEST()
     
    Dim cellA As Range
     
    With ThisWorkbook.Worksheets("Cible")
     
    Set cellA = .Range("A1:A1")
    .Range("B1:C2").Value = ThisWorkbook.Worksheets("Source").Range("B2:C3").Value & ThisWorkbook.Worksheets("Source").Range("B2:C3").Value
     
    cellA = "Test"
     
    End With
     
     
    End Sub
    J'ai un erreur "incompatibilité de type".
    Outre cette erreur, pourriez-vous svp m'aiguiller pour le besoin suivant (dont je suis loin) :

    mon but est d'avoir une feuille A avec des valeurs et de créer une macro qui va remplir les cellules d'une feuille B en utilisant les données contenues dans la feuille A (concénation de la cellule courante + la cellule de la première ligne) après avoir fait un recherchev dans la feuille C.

    Exemple :
    Feuille A :
    Ligne 1 CLEF KEY PASS
    Ligne 2 AA BB CC
    LIgne 3 BB AA CC
    Je fais la concéténation pour chaque cellule de sa valeur avec celle de la cellule qui se trouve sur la première ligne de la même colone, ce qui me permet d'obtenir la clef pour le recherchev.
    Ex pour la collone A : AA & CLEF puis BB & CLEF
    Feuille C :
    Source Cible
    AACLEF XXX
    BBCLEF XYZ
    AAKEY XYY
    BBKEY YAZ
    CCPASS ANE
    Resultat sur feuille B
    Ligne 2 XXX YAZ ANE
    Ligne 3 XYZ XYY ANE
    Bien entendu, je ne vous demande pas de faire le code à ma place mais de m'aider à le construire par étape :
    - comprendre comment remplir un range avec les valeurs concaténées de 2 ranges
    - ensuite je vais essayer en concaténant 2 ranges qui n'ont pas la même taille etc.

    merci de votre aide
    Cladsam

  2. #2
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    Pour la partie sur le plantage du code ça vient de la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("B1:C2").Value = ThisWorkbook.Worksheets("Source").Range("B2:C3").Value & ThisWorkbook.Worksheets("Source").Range("B2:C3").Value
    La concatenation (&) ne fonctionne pas directement sur des variables de type tableau.

  3. #3
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    Citation Envoyé par issoram Voir le message
    ]
    La concatenation (&) ne fonctionne pas directement sur des variables de type tableau.
    En effet je vois avec le debug la ligne concernée mais comment faire correctement la même chose ? L'idée étant.

    Source
    AAA BBB
    EEE CCC
    Cible
    AAAAAA BBBBBB
    EEEEEE CCCCCC

  4. #4
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Tu as 2 choix:

    - Boucler sur les cellules concernées et concaténer les valeurs qui t'intéressent à chaque tour
    - Appliquer directement une formule à l'ensemble de la plage concernée.

    Tu trouveras multitudes d'exemples sur le forum

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Qu'est-ce que tu cherches à faire avec cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("B1:C2").Value = ThisWorkbook.Worksheets("Source").Range("B2:C3").Value & ThisWorkbook.Worksheets("Source").Range("B2:C3").Value
    Tu ne peux pas faire de concaténation de ranges sinon une concaténation de cellules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Value = Range("A2").Value & Range("A3").Value

  6. #6
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    J'ai un peu avancé avec vos indications et j'arrive au code suivant :

    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
    Sub transvalue()
     
    Dim enTete, cellSource, cellCible, searchRange As Range
    Dim LigneHaut, LigneBas, ColHaut, ColBas As Integer
    Dim LHautSearch, LBAsSearch, CHautSearch, CBasSearch As Integer
     
     
    LigneHaut = Selection.Row
    LigneBas = Selection.Rows.Count + Selection.Row - 1
    ColHaut = Selection.Column
    ColBas = Selection.Columns.Count + Selection.Column - 1
     
     
    'SOurce du Recherchev à éditer si ajouter de nouvelles valeurs
    Set searchRange = ThisWorkbook.Worksheets("Key").Range("B2:C3")
     
    For numCol = ColHaut To ColBas
    Set enTete = Cells(1, numCol)
    For numLigne = (LigneHaut + 1) To LigneBas
     
    Set cellSource = Cells(numLigne, numCol)
    searchKey = enTete.Value & cellSource.Value
    With ThisWorkbook.Worksheets("Cible")
    Set cellCible = .Range(.Cells(numLigne, numCol), .Cells(numLigne, numCol))
    End With
     
    cellCible.Value = WorksheetFunction.VLookup(searchKey, searchRange, 3, False)
     
    Next numLigne
    Next numCol
     
    End Sub
    Ca me semble proche de l'idée de départ : selectionner un range, le parcourir à l'exception de la premiere cellule de chaque colonne puis pour chaque cellule parcourue, remplir la cellule de même coordonnées d'une feuille cible avec le résultat d'un recherchev.

    Sauf que ca ne fonctionne pas parce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cellCible.Value = WorksheetFunction.VLookup(searchKey, searchRange, 3, False)
    Me provoque uen erreur
    Erreur d'execution 1004; Impossible de lire la propriété VLookup de la classe WorksheetFunction
    Pourant si je tape WorksheetUNction.V l'autocomplétion me propose bien VLookup ... :'(
    Qu'est-ce qui ne va pas dans cette formule ?
    Est-ce que le reste du code vous parait cohérent ?

  7. #7
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    J'ai compris, cela vient du fait que j'avais mal défini le Range du Recherchev ce qui provoquait une valeur non trouvée et donc cette exception 1004 il ne me reste plus qu'à trouver comment gérer cette exception qui arrivera parfois.

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Parfois, "WorksheetFunction" provoque des erreurs; je ne l'emploie pas (d'ailleurs, c'es long à taper) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cellCible.Value = Application.VLookup(searchKey, searchRange, 3, False)

  9. #9
    Rédacteur
    Avatar de cladsam
    Profil pro
    Inscrit en
    Août 2003
    Messages
    1 787
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2003
    Messages : 1 787
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Parfois, "WorksheetFunction" provoque des erreurs; je ne l'emploie pas (d'ailleurs, c'es long à taper) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cellCible.Value = Application.VLookup(searchKey, searchRange, 3, False)
    Merci !
    Je ne savais pas qu'on pouvait y accéder directement via Application ca marche mieux.
    En corrigeant comme suit c'est parfait (enfin "parfait" ne nous emballons pas, ca fait ce que je veux c'est déjà pas si mal )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     recup = Application.VLookup(searchKey, searchRange, 4, False)
     If Not (IsError(recup)) Then
      cellCible.Value = recup
      Else
      cellCible.Value = cellSource.Value
    End If
    En revanche je confirme que dans le code ci-dessus, remplacer Application. par WorkSheetFunction. ne fonctionne pas et renvoie l'erreur, alors que recup n'a pas de type en particulier ...

    Merci encore, point résolu.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/03/2015, 10h54
  2. Réponses: 4
    Dernier message: 22/07/2014, 16h57
  3. [XL-2010] PB remplir une ComboBox avec les valeurs de plusieurs cellules sur la même lignes
    Par eviuss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/05/2014, 07h01
  4. Réponses: 69
    Dernier message: 15/06/2006, 11h42
  5. Réponses: 3
    Dernier message: 21/06/2005, 11h37

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