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 :

vlookup avec problème sur la méthode range


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut vlookup avec problème sur la méthode range
    Bonjour a tous,

    Comme le titre l'indique j'essaye de manipuler la fonction vlookup d'Excel;
    au début je voulais récupérer le code via une macro auto d'excel, mais n'ayant aucune cohérence dans le code générée j'ai voulu la re-créé avec la fonction application.WorksheetFunction.vlookup or celle ci ne fonctionne pas.

    mon environnement de travail: juste deux feuilles dans un meme classeur, je complete des infos de la feuil1 avec ce que je cherche dans la feuille 2, je reproduit la formule sur toute la colonne et je copie-colle spéciale les valeur dans cette meme colonne.

    Je vous met mon code, peut etre ai-je oublié quelque chose:

    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
     
    'les deux premiere fonctionne retourne simplement l'index de la derniere ligne utilisé de la feuille.
    Public Function derniereLigneFeuil1() As Integer
        derniereLigneFeuil1 = Sheets("Feuil1").Range("A1").End(xlDown).Row
    End Function
     
    Public Function derniereLigneArbreService() As Integer
        derniereLigneArbreService = Sheets("Arbre_services").Range("A1").End(xlDown).Row
    End Function
     
    Public Sub azerty()
        With Application.WorksheetFunction
            'pour completer les Entité vides
            .VLookup Feuil1.Range("C2"), Sheets("Arbre_services").Range("D2:E" & derniereLigneArbreService), 2, False        
    'Feuil1.Range("C2").FormulaR1C1 = "=VLOOKUP(RC[6],Service_hyper_libellserv_niv2!C[1]:C[2],2,FALSE)"
    Feuil1.Range("C2").Select
            Selection.AutoFill Destination:=Feuil1.Range("C2:C" & derniereLigneFeuil1)
            Feuil1.Range("C2:C" & derniereLigneFeuil1).Copy
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            Feuil1.Range("A1").Select
        End With
    End Sub
    La seconde methode qui est en commentaire est la methode générée automatiquement par Excel. Comment détermine t'ilRC[6] & C[1]:C[2] ?

    Par avance merci

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Pas sur de comprendre
    tu as dans feuille1 des données manquants dans colonne C
    dans cette même colonne tu fais ceci?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.WorksheetFunction.VLookup Feuil1.Range("C2"), Sheets("Arbre_services").Range("D2:E" & derniereLigneArbreService), 2, False
    !!!!????? Tu cherches quoi et où tu le mets???
    derniereLigneArbreService vaut quoi dans ta sub azerty????

    Je propose que tu ré explique ton problème; Ta sub n'est ni correcte ni cohérente!

  3. #3
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub azerty()
            With Application.WorksheetFunction
            'pour completer les Entité vides
            Set maRange = Sheets("Service_hyper_libellserv_niv2").Range("D2:E" & derniereLigneServiceHyperLibelleServ)
             Feuil1.Range("C2") = .VLookup(Feuil1.Range("J2"), maRange, 2, False)
    End With
    End Sub
    on va prendre que cette partie du code.
    Je veux mettre dans la Cellule C2 de ma feuil1 le résultat de la rechercheV
    ma rechercheV va comparer la cellule J2 de ma feuil1 avec le contenu de ma feuille "Service_hyper_libellserv_niv2".

  4. #4
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Citation Envoyé par Nako_lito Voir le message
    ...
    La seconde methode qui est en commentaire est la methode générée automatiquement par Excel. Comment détermine t'ilRC[6] & C[1]:C[2] ?
    ...
    Pour cette question, le principe R1C1 fonctionne sur base d'une référence, c'est à dire la cellule de base. les nombres indiques les "déplacements" R pour les Lignes et C pour les colonnes. Donc si en A1, R[2]C[3] vaut D3

    Dans ton cas, la cellule C2 de la Feuil1 est la "référence" donc
    RC[6] renvoi à I1; les [] indique que la formule n'est pas figée (pas de $ dans Excel)
    C[1]:C[2]; étant donné qu'il n'y a pas de R, on parle de colonne entière, toujours basé sur C2 on décalle de 1 et 2 par rapport à C => on recherche sur les colonnes D:E

    J'espère avoir été clair et pour le reste je laisse faire les autres, ils ont bien commencé.

    A+

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une proposition avec le Find
    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
    Dim shtF As Worksheet, shtS As Worksheet
    Dim c As Range
    Dim LastLigF As Long, LastLigS As Long
    Dim i As Integer
     
    Set shtF = Sheets("Feuil1")
    Set shtS = Sheets("Service_hyper_libellserv_niv2")
    LastLigF = shtF.Range("J65336").End(xlUp).Row
    LastLigS = shtS.Range("D65336").End(xlUp).Row
     
    For i = 2 To LastLigF
        Set c = shtS.Range("D2:D" & LastLigS).Find(shtF.Range("J" & i), LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then shtF.Range("C" & i) = c.Offset(0, 1)
    Next i
     
    Set shtF = Nothing
    Set shtS = Nothing

  6. #6
    Membre éclairé Avatar de Nako_lito
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2008
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 793
    Points : 827
    Points
    827
    Par défaut
    merci pour vos réponse, j'ai trouvé mon bonheur en cherchant et je pense que ma méthode est pas trop mal:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub azerty()
        Dim Cel As Range, rangeEntite As Range
        Set rangeTravail = Feuil1.Range("C2:C" & derniereLigneFeuil1)
        Set maRange = Sheets("Service_hyper_libellserv_niv2").Range("D2:E" & derniereLigneServiceHyperLibelleServ)
                'complete les champs vide dans les entité par rapport au code service niveau 2
            For Each Cel In rangeTravail
                Cel.FormulaR1C1 = Application.WorksheetFunction.VLookup(Feuil1.Range("I" & Cel.Row), maRange, 2, False)
            Next Cel
    End sub

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

Discussions similaires

  1. Problème sur la méthode InvalidateRect
    Par PocoYote dans le forum Composants FMX
    Réponses: 13
    Dernier message: 27/06/2012, 18h24
  2. Aide sur la Méthode Range
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/10/2010, 13h19
  3. problème sur parcours de range
    Par boss_gama dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/06/2008, 16h18
  4. Réponses: 2
    Dernier message: 30/05/2007, 23h35
  5. histoire de fonction avec problème sur arguments
    Par bébé dans le forum Langage
    Réponses: 5
    Dernier message: 07/01/2006, 11h29

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