Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1139 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Transformer ma fonction Recherche en code

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Transformer ma fonction Recherche en code

n°2070181
hoob91
Posté le 15-04-2011 à 09:49:38  profilanswer
 

Bonjour,
je souhaiterai intégrer ma fonction "Recherche " ci-dessous dans une macro :  
 
=RECHERCHEV(C3;Tables!$A$3:$B$26;2;FAUX)
 
Merci de votre aide

mood
Publicité
Posté le 15-04-2011 à 09:49:38  profilanswer
 

n°2070196
kiki29
Posté le 15-04-2011 à 10:10:18  profilanswer
 

Salut,un tuto sur RECHERCHEV http://fauconnier.developpez.com/t [...] rchev/#LVI


Message édité par kiki29 le 15-04-2011 à 10:12:01
n°2070211
hoob91
Posté le 15-04-2011 à 10:41:18  profilanswer
 

Effectivement complet, mais je démarre dans les macros alors entre worksheetFunction et Evaluate, quelqu'un pour m'aider à démarrer cette macro
Merci de votre aide

n°2070240
kiki29
Posté le 15-04-2011 à 11:44:25  profilanswer
 

Re,qqch comme ceci


Option Explicit
 
Sub Tst()
Dim s As String
    s = Application.WorksheetFunction.VLookup(Sheets("Feuil1" ).Range("C3" ), Sheets("Tables" ).Range("A3:B26" ), 2, False)
    MsgBox s
End Sub


ou encore


Function Rch(sRch As Variant) As String
Dim s As String
    s = Application.WorksheetFunction.VLookup(sRch, Sheets("Tables" ).Range("A3:B26" ), 2, False)
    Rch = s
End Function
 


Message édité par kiki29 le 15-04-2011 à 11:58:33
n°2070269
hoob91
Posté le 15-04-2011 à 12:39:41  profilanswer
 

Merci, je regarde cela de près

n°2070271
hoob91
Posté le 15-04-2011 à 13:01:01  profilanswer
 

La macro ci-joint retourne par le msgbox la valeur :
Sub Tst()
Dim s As String
    s = Application.WorksheetFunction.VLookup(Sheets("Importation_Données" ).Range("B3" ), Sheets("Tables" ).Range("A3:B26" ), 2, False)
    MsgBox s
End Sub
 
j'imagine qu'il me faut maintenant une boucle pour passer en revue l'ensemble des données, mais de quelle type ?
Merci

n°2070273
kiki29
Posté le 15-04-2011 à 13:19:04  profilanswer
 

Re,un filtre automatique semble plus approprié si tu veux avoir toutes les valeurs


Message édité par kiki29 le 15-04-2011 à 13:20:51
n°2070279
hoob91
Posté le 15-04-2011 à 13:29:26  profilanswer
 

L'objectif est de récuperer la donnée par la fonction WorksheetFunction.VLookup et de la copier dans la colonne (A:A)
je pense qu'il faut une boucle While, mais je ne maitrise pas encore le VBA

n°2070284
kiki29
Posté le 15-04-2011 à 13:38:56  profilanswer
 

Re,brut de fonderie


Sub Tst2()
Dim LastRow As Long, i As Long, j As Long, sRch As String
    LastRow = Sheets("Tables" ).Range("A" & Rows.Count).End(xlUp).Row
    sRch = Sheets("Feuil1" ).Range("C3" )
    Application.ScreenUpdating = False
    Sheets("Feuil1" ).Columns("A:A" ).ClearContents
    For i = 1 To LastRow
        If Sheets("Tables" ).Range("A" & i) = sRch Then
            j = j + 1
            Sheets("Feuil1" ).Range("A" & j) = Sheets("Tables" ).Range("B" & i)
        End If
    Next i
    Application.ScreenUpdating = True
End Sub


 
ou


Sub Tst3()
Dim LastRow As Long, i As Long, j As Long, sRch As Variant, Ar() As Variant
    LastRow = Sheets("Tables" ).Range("A" & Rows.Count).End(xlUp).Row
    sRch = Sheets("Feuil1" ).Range("C3" )
    Application.ScreenUpdating = False
    Sheets("Feuil1" ).Columns("A:A" ).ClearContents
    For i = 1 To LastRow
        If Sheets("Tables" ).Range("A" & i) = sRch Then
            ReDim Preserve Ar(j)
            Ar(j) = Sheets("Tables" ).Range("B" & i)
            j = j + 1
        End If
    Next i
    On Error Resume Next
    Feuil1.Range("A1" ).Resize(UBound(Ar, 1) + 1) = Application.Transpose(Ar)
    Application.ScreenUpdating = True
End Sub


 
et en ajoutant ceci dans Feuil1 pour déclencher Tst3 si changement dans C3


Option Explicit
 
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Inter As Range
    Set Inter = Application.Intersect(Target, Feuil1.Range("C3" ))
    If Inter Is Nothing Then Exit Sub
    Tst3
End Sub


Message édité par kiki29 le 15-04-2011 à 14:55:50
n°2070312
hoob91
Posté le 15-04-2011 à 14:56:27  profilanswer
 

Merci

mood
Publicité
Posté le 15-04-2011 à 14:56:27  profilanswer
 

n°2070318
kiki29
Posté le 15-04-2011 à 15:35:47  profilanswer
 

PS : dépend de la casse ( ABc <>ABC <>abc )

n°2071977
hoob91
Posté le 26-04-2011 à 08:47:01  profilanswer
 

Bonjour à tous,
le problème du test de cette macro est que mm si la cellule Bi est vide, j'ai un message d'erreur.
Le test à blanc d'une cellule ne fonctionne pas ?
 
Sub Tst()
Dim s As String
Dim i As Integer
 
i = 3
     
    Range("A3" ).Select
     
        While Not (IsEmpty("B" & i))
        'MsgBox "" + "B" & i
         s = Application.WorksheetFunction.VLookup(Sheets("Importation_Données" ).Range("B" & i), Sheets("Tables" ).Range("A3:B27" ), 2, False)
                 
          Selection.Value = s
          i = i + 1
          Range("A" & i).Select
            Wend
             
    MsgBox ("Traitement terminé" )
      End Sub
 
 
Merci de votre aide

n°2071979
kiki29
Posté le 26-04-2011 à 08:59:08  profilanswer
 

Salut,ceci fonctionne parfaitment,à toi de l'adapter à ton contexte
Balise ton code : Clic icône Editer le message puis sélection du code et clic sur icône Fixe


Sub Tst3()  
Dim LastRow As Long, i As Long, j As Long, sRch As Variant, Ar() As Variant  
    LastRow = Sheets("Tables" ).Range("A" & Rows.Count).End(xlUp).Row  
    sRch = Sheets("Feuil1" ).Range("C3" )  
    Application.ScreenUpdating = False  
    Sheets("Feuil1" ).Columns("A:A" ).ClearContents  
    For i = 1 To LastRow  
        If Sheets("Tables" ).Range("A" & i) = sRch Then  
            ReDim Preserve Ar(j)  
            Ar(j) = Sheets("Tables" ).Range("B" & i)  
            j = j + 1  
        End If  
    Next i  
    On Error Resume Next  
    Feuil1.Range("A1" ).Resize(UBound(Ar, 1) + 1) = Application.Transpose(Ar)  
    Application.ScreenUpdating = True  
End Sub


Message édité par kiki29 le 26-04-2011 à 09:06:17
n°2072038
hoob91
Posté le 26-04-2011 à 14:25:19  profilanswer
 

Merci, cela fonctionne parfaitement: voila ma solution :  
Sub ClassDir()
Dim s As String, i As Integer, p As Integer, LastRow As Long
 
 LastRow = Sheets("Importation_Données" ).Range("B" & Rows.Count).End(xlUp).Row
 
 i = 3
 p = 3
     
    Range("A3" ).Select
     
     For p = 3 To LastRow
       If (("B" & i) <> "" ) Then
          'MsgBox "" + "B" & i
          s = Application.WorksheetFunction.VLookup(Sheets("Importation_Données" ).Range("B" & i), Sheets("Tables" ).Range("A3:B27" ), 2, False)
          Selection.Value = s
          i = i + 1
          Range("A" & i).Select
           
        End If
      Next p
    MsgBox ("Traitement terminé" )
End Sub

n°2072061
kiki29
Posté le 26-04-2011 à 16:55:10  profilanswer
 

Salut,cela m'étonnerait que ton code fonctionne,enfin bref , balise ton code : Clic icône Editer le message puis sélection du code et clic sur icône Fixe


Message édité par kiki29 le 26-04-2011 à 17:00:02

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Transformer ma fonction Recherche en code

 

Sujets relatifs
[Matlab] fonction porte fonction compter mot identique entre deux chaines
[PHP] Recherche script d'enchèresAvoir la fonction "Sum" par défaut dans la table pivot
recherche fichiers xlsx et convertier en format xlsphp recherche multi critère
Recherche d'une valeurDecouper un code recursif
Macro excel en fonction d'un choix dans le classeur[VBS] Recherche dossiers
Plus de sujets relatifs à : Transformer ma fonction Recherche en code


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR