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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Fonction Recherche sur une plage de données

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction Recherche sur une plage de données

n°2072047
hoob91
Posté le 26-04-2011 à 15:41:39  profilanswer
 

Bonjour,
mon objectif est de réaliser une macro (Excel) qui en fonction de l'intitulé du "Libellé Projet" indique dans la colonne "Activité-1" sa nature avec  
1/ Une table de référence
Congés cadre Congés
Congés payés Congés
Maladie      Maladie
JRTT              Congés
 
2/et si le libellé projet n'existe pas dans la table, il faut reprendre le nom du champ comme dans l'exemple ci-dessous (voir la colonne Activité-1)
 
Libellé Projet              Activité                      Activité-1
 
Congés cadre                                                 Congés
Gestion des risques    Missions                     Gestion des risques    
Autres travaux d'audit Autres travaux        Autres travaux d'audit
Congés cadre                                                       Congés
JRTT                                                                   Congés
Maladie                                                 Maladie  
Autres travaux                Autres travaux             Autres travaux  
 
Voila pour le moment ce que j'ai réalisé mais cela plante
 
Sub ClassActiv1()
Dim s As String, t As Variant, i As Integer, p As Integer, LastRow As Long
 
 LastRow = Sheets("Importation_Données" ).Range("B" & Rows.Count).End(xlUp).Row
 t = Sheets("Projet" ).Range("A3:A12" )
 
 i = 3
 p = 3
     
    Range("F3" ).Select
     
     For p = 3 To LastRow
       If (("D" & i) <> "" ) Then
         'If (("D" & i) = t) Then  BUG ?
           
          s = Application.WorksheetFunction.VLookup(Sheets("Importation_Données" ).Range("D" & i), Sheets("Projet" ).Range("A3:B12" ), 2, False)
          Selection.Value = s
          i = i + 1
          Range("F" & i).Select
           
        End If
        'End If
      Next p
    MsgBox ("Traitement terminé" )
     
End Sub
 
Merci de votre aide

mood
Publicité
Posté le 26-04-2011 à 15:41:39  profilanswer
 

n°2072063
kiki29
Posté le 26-04-2011 à 17:00:42  profilanswer
 

Salut,Balise ton code : Clic icône Editer le message puis sélection du code et clic sur icône Fixe

n°2072076
hoob91
Posté le 26-04-2011 à 17:31:28  profilanswer
 

Salut,
pas trés doué, tu le fais à partir d'explorer ou du vba sous excel
merci de ton aide

n°2072085
kiki29
Posté le 26-04-2011 à 18:51:57  profilanswer
 

re,les 2 mon colonel via SmartIndenter sous VBA puis ici  
dans le cas d'une réponse en cliquant sur Ajouter une réponse en bas à gauche
sinon en se logant puis en editant le message ( 2 eme icône à partir de la gauche )


Message édité par kiki29 le 26-04-2011 à 19:03:28
n°2072089
hoob91
Posté le 26-04-2011 à 19:09:11  profilanswer
 

Effectivement, merci
 sinon j'ai trouvé une solution que je partage et qui peut être surement améliorer :
 
Sub ClassActiv()
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("E2" ).Select
 
     For p = 3 To LastRow
     
         If Sheets("Importation_Données" ).Range("E" & i).Value <> "" Then
             Range("F" & i) = Range("E" & i)
             i = i + 1
             Range("E" & i).Select
          Else
             s = (Application.WorksheetFunction.VLookup(Sheets("Importation_Données" ).Range("D" & i), Sheets("Tables" ).Range("D3:E12" ), 2))
             Range("F" & i).Select
             Selection.Value = s
             i = i + 1
             Range("D" & i).Select
          End If
         
      Next p
End Sub
 
Merci pour votre aide

n°2072091
kiki29
Posté le 26-04-2011 à 19:18:14  profilanswer
 

re,visiblemnt ce n'est pas encore cela
 

Sub ClassActiv()
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("E2" ).Select
 
    For p = 3 To LastRow
 
        If Sheets("Importation_Données" ).Range("E" & i).Value <> "" Then
            Range("F" & i) = Range("E" & i)
            i = i + 1
            ' Range("E" & i).Select ????
        Else
            s = (Application.WorksheetFunction.VLookup(Sheets("Importation_Données" ).Range("D" & i), Sheets("Tables" ).Range("D3:E12" ), 2))
            Range("F" & i).Select
            Selection.Value = s          
            i = i + 1
            '  Range("D" & i).Select ????
        End If
    Next p
End Sub


 
essaye d'éviter les select ( ralentissent l'éxécution code ) et sont souvent inutiles

           Range("F" & i)..Value = s


Message édité par kiki29 le 26-04-2011 à 19:27:06
n°2072154
hoob91
Posté le 27-04-2011 à 10:07:52  profilanswer
 

Merci


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

  Fonction Recherche sur une plage de données

 

Sujets relatifs
problème de trie avec mysql et fonction mt_rand() ! help meConception d'un mini moteur de recherche
Declaration / appel fonction javascriptMacro VBA sous excell et fonction RTD
Transformer ma fonction Recherche en code[Matlab] fonction porte
recuperer des donnees dans une base par une JSP fonction compter mot identique entre deux chaines
[PHP] Recherche script d'enchères 
Plus de sujets relatifs à : Fonction Recherche sur une plage de données


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