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 :

Utiliser Vlookup pour rechercher une valeur dans 2 classeurs


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut Utiliser Vlookup pour rechercher une valeur dans 2 classeurs
    Bonjour à tous
    Nouvel arrivant sur le forum et novice en VBA, je m’excuse par avance si je commets des erreurs ou si je ne suis pas assez explicite.
    Voici donc mon problème :
    J’ai deux classeurs excel chacun avec une feuille.
    1er classeur : « travail » - onglet nommé « Feuil1 » avec 42 colonnes
    2ème classeur : « source » - onglet nommé « BCS » avec 10 colonnes (les mêmes que les 10 premières de « Feuil1 »
    A partir d’un CommandButton sur le Userform de « travail » je voudrais :
    1) Ouvrir le classeur source (je sais faire)
    2) Sélectionner toute la plage et trier la colonne « A » dans l’ordre croissant (je sais faire)
    A partir d’ici je bloque
    3) Rechercher la valeur de la cellule « A2 » du fichier « BSC » dans la colonne « A » du fichier travail
    Si TROUVÉ on passe à la cellule « A3 » du fichier « BSC » et on recommence la recherche
    SI PAS TROUVÉ on copie la ligne du fichier « BCS » on pointe sur la première ligne vide de « Feuil1 » et on la copie.

    Ci dessous ma Sub :
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Private Sub CommandButton10_Click()
     'Déclaration des variables
    Dim Feuille As Worksheet
    Dim Dossier As String
    Dim MonGraphique As Object
    'On Error GoTo 1 'Affectation des variables
    Set Feuille = Sheets("Feuil2") 'On sélectionne le nom de la feuille ou se trouve le graphe
     Set MonGraphique = Feuille.ChartObjects(1).Chart 'On affecte le nom du graphique
    'On choisit le chemin ou sauvegarder le graphique en tant qu'image
    Dossier = "D:\Projet POIC\ImageGraph.jpg"
    MonGraphique.Export Dossier 'Exporte le graphique dans le dossier
     Me.Image1.Picture = LoadPicture(Dossier) 'On charge l'image du graphique dans le controle Image 1
    End Sub
     
     
    Private Sub CommandButton11_Click()
     Dim wb As Workbook
     Dim ws As Worksheet
     Dim i As Integer
     Dim j As Integer
     Dim x As Integer
     Dim LigneD As Long
     Dim ligneA As Long
     
     Set wb = Workbooks.Open("D:\Fichier BCS.xlsm")
     Set ws = ActiveWorkbook.Worksheets("BCS")
     Range("A1:K65536").Select
        ActiveWorkbook.Worksheets("BCS").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("BCS").Sort.SortFields.Add Key:=Range("A2:K65536"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            With ActiveWorkbook.Worksheets("BCS").Sort
            .SetRange Range("A1:K65536")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Appli
        End With
      MsgBox "le fichier est ouvert"
     
    ligneA = ActiveWorkbook.Worksheets("Feuil1").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
    MsgBox "la dernière ligne du fichier est :" & ligneA
    LigneD = ActiveWorkbook.Worksheets("ws").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    MsgBox "la dernière ligne de BCS est :" & LigneD
     
    For n = 2 To LigneD
    temp = "=VLookup(IF(IFERROR(VLOOKUP(Worksheets("BCS").Range("A"& i),Worksheet("Feuil1").Range($A:$A),1,FAUX)),1,0)"
    If temp = 0 Then
     Sheets("BCS").Select
     ActiveSheet.Range("A" & n & ":K" & n).Select
     Selection.Copy
     Sheets("Feuil1").Select
     ligneA = Sheets("Feuil1").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
     Sheets("Feuil1").Range("A" & ligneA).Select
     ActiveSheet.Paste
     x = x + 1
    End If
    Next i


    MsgBox x & " Personnel ont été ajoutés"

    End Sub

    Je vous remercie par avance de votre aide car cela fait 4 jours que je cherche sur le net et que je ne trouve pas.

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à toi, Bonjour au Forum,
    Bienvenu.

    2 conseils
    - utilise le sigle # en début et fin du code reporté. Le post sera plus lisible.
    - ne reporte que le code qui pose problème

    Pour ma part, il te suffit d'adapter l'aide en ligne de la méthode d'Excel.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut
    Bonjour
    Merci, MarcelG pour ta réponse. mais comme je l'ai précisé dans ma question je suis un novice en VB.
    La ligne de commande ci-dessous ne fonctionne pas et je ne sais pas pourquoi.
    Message : Erreur de compilation : erreur de syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp = "=VLookup(If(IfError(VLookup(Sheets("BCS").Range("A"& i),Worksheet("Feuil1").Range($A:$A),1,FAUX)),1,0)"
    Quelqu'un pourrait-il me dire où est l'erreur.
    Merci, Bon dimanche.

  4. #4
    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
    Quelqu'un pourrait-il me dire où est l'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    temp = "=VLookup(If(IfError(VLookup(Sheets("BCS").Range("A"& i),Worksheet("Feuil1").Range($A:$A),1,FAUX)),1,0)"
    Telle que définie (encadrée de guillemets) :
    - ta variable temp (au demeurant déclarée nulle part) ne saurait qu'être une variable de type string (chaîne de caractères) et non le résultat d'une formule Vlookup ! (qui, lui, n'est pas une chaîne de caractères) !!!
    - contenant de surcroît elle-même des sous-chaînes entre guillemets non doublés, elle est elle-même en erreur et justifie forcément l'apparition du message de dénonciation reçu ! -->> et tu n'as même plus une chaîne de caractères -->> juste un message d'erreur *****

    - tu sembles tout confondre ! A commencer par ce qu'est l'affectation d'une formule à une cellule

    je suis un novice en VB
    chacun l'a forcément été. Je n'ai toutefois aucun souvenir d'avoir, y compris dès le tout début, conduit à une telle incompréhension des choses essentielles. Le développement passe par la connaissance et la prise de conscience indispensables de ce que sont au moins ces "petites choses-là".
    Tu devrais vraiment commencer à t'intéresser aux rudiments. Ils sont indispensables et non instinctifs et utilisés au hasard.

    MarcelG, que je salue, a évoqué une méthode. Ton tout premier réflexe devrait être d'en rechercher ce qu'elle est dans ton aide interne VBA. Encore plus si tu es un "novice en VBA"

    Bonne chance.

    EDIT : ***** Par ANALOGIE : ce que tu fais là est analogue à ce que ferait une infirmière qui, pour prendre la TENSION d'un patient, lui mettrait dans la bouche un thermomètre de surcroît défectueux.
    Avec pour résultat premier ( ne parlons même pas de la non prise de tension, qui ne risque pas d'être faite), celui de la dénonciation de l'incapacité de fonctionnement du thermomètre lui-même !!!

    Il est alors à parier (à 10000 contre 1) quelle sera invitée à revenir lorsqu'elle aura au moins appris ce à quoi sert un thermomètre (et comment on l'utilise) et quel appareil est à utiliser pour mesurer la tension.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut
    Bonjour unparia
    Merci de tous ces conseils.

Discussions similaires

  1. Réponses: 13
    Dernier message: 29/03/2016, 21h39
  2. [XL-2013] Rechercher une valeur dans un classeur fermé
    Par steveludo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/12/2015, 04h37
  3. Réponses: 22
    Dernier message: 13/09/2013, 14h20
  4. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49

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