Fonction Recherche sur une plage de données

Fonction Recherche sur une plage de données - VB/VBA/VBS - Programmation

Marsh Posté le 26-04-2011 à 15:41:39    

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

Reply

Marsh Posté le 26-04-2011 à 15:41:39   

Reply

Marsh Posté le 26-04-2011 à 17:00:42    

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

Reply

Marsh Posté le 26-04-2011 à 17:31:28    

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

Reply

Marsh Posté le 26-04-2011 à 18:51:57    

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
Reply

Marsh Posté le 26-04-2011 à 19:09:11    

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

Reply

Marsh Posté le 26-04-2011 à 19:18:14    

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
Reply

Marsh Posté le 27-04-2011 à 10:07:52    

Merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed