Problème avec valeur approx/exacte VLOOKUP

Damorek

XLDnaute Nouveau
Bonjour à tous,

Avec mon nouvel emploi, je devais monter un fichier excel pour la gestion des projets dans l'entreprise. Je me considère comme étant intermédiaire avec Excel, mais avec VBA je suis tout nouveau... mes premières macro ont été fait il y a 3 jours seulement. Mes seules expériences en programmation me vient de MatLab, donc en buchant pas mal j'ai réussi a m'y retrouver avec VBA... je dois dire que c'est hyper-intéressant et surtout hyper-puissant comme outils de travail et je m'amuse comme un petit fou a écrire des lignes de codes.

Je dois vous avouer que votre site internet m'a BEAUCOUP aidé dès le début car cela m'a permis de trouver des macros et lignes de codes que je cherchait pour compléter mon fichier.

Cependant, la je vient de frapper un mur... j'ai un bug et je comprend pas pourquoi. Je vous explique:
--------------------------------------

J'ai un fichier avec différents Onglets représentant un projet (P101 à P147, mais pour l'instant j'ai limité à P146 et P147 pour tester), à l'intérieur de ces onglets, j'ai une ''fiche d'information'' qui est identique pour chacun des projets dans lequel on retrouve des informations sur le projet, les échéanciers, les personnes en charge et etc....

Jusque là tout va bien, mais là je viens de créer un nouvel onglet "RÉSUMÉ" qui permet d'avoir une vue global des différentes taches présentent dans les différents projets (donc de P101 à P147). Donc j'ai créé une petite macro permettant (grace a un bouton "Mise a jour") de faire un balayage de toutes les tâches en allant chercher des infos (Nom du projet, Date de début/fin, Ressource affecté et etc...) en fonction du #Tache (numero unique).

Voici le code en question
-------------------------------------------

Sub MaJ_NoTache()

Dim Cell As Range
Dim NomTache As String
Dim NoProjet As String
Dim NomProjet As String
Dim Categorie As String
Dim Ressource_Aff As String
Dim Date_Echeance As Date
Dim Date_Complete As Date
Dim Termine As String
Dim DoubleCheck As String
Dim Position_Cell As Long

'La valeur de chacun des cellules de la colonne "#Tache" en partant de la tâche 1 jusqu'à la dernière tache inscrite
For Each Cell In Sheets("RÉSUMÉ").Range("A3:A" & Sheets("RÉSUMÉ").Range("A3").End(xlDown).Row)

On Error Resume Next

'Donne la position verticale relative (à partir de A3) de "Cell"
Position_Cell = Application.WorksheetFunction.Match(Cell, Worksheets("RÉSUMÉ").Range("A3:A65536"), 0)

'On met une bouble for pour balayer les TABS
For i = 146 To 147

'Trouve les informations souhaité pour chacun des # de taches à mettre à jour
NomTache = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 6, False)
NoProjet = ThisWorkbook.Worksheets("P" & i).Range("G4")
NomProjet = ThisWorkbook.Worksheets("P" & i).Range("G1")
Categorie = ThisWorkbook.Worksheets("P" & i).Range("L4")
Ressource_Aff = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 17, False)
Date_Echeance = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 11, False)
Date_Complete = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 23, False)
Termine = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 14, False)
DoubleCheck = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 20, False)

'On affiche Oui ou Non pour savoir si la tache est terminé
If Termine = "x" Then
Termine = "Oui"
Else
Termine = "Non"
End If

'On affiche Oui ou Non pour savoir si le Double Check a été fait par le superviseur
If DoubleCheck = "x" Then
DoubleCheck = "Oui"
Else
DoubleCheck = "Non"
End If

'Opération permettant d'écrire l'information souhaitée dans la bonne cellule du tab "Résumé"
If (NomTache = "" Or IsError(NomTache)) Then

Else
ThisWorkbook.Worksheets("RÉSUMÉ").Range("B" & 2 + Position_Cell).Value = NomTache
ThisWorkbook.Worksheets("RÉSUMÉ").Range("C" & 2 + Position_Cell).Value = NoProjet
ThisWorkbook.Worksheets("RÉSUMÉ").Range("D" & 2 + Position_Cell).Value = NomProjet
ThisWorkbook.Worksheets("RÉSUMÉ").Range("E" & 2 + Position_Cell).Value = Categorie
ThisWorkbook.Worksheets("RÉSUMÉ").Range("F" & 2 + Position_Cell).Value = Ressource_Aff
ThisWorkbook.Worksheets("RÉSUMÉ").Range("G" & 2 + Position_Cell).Value = Date_Echeance
ThisWorkbook.Worksheets("RÉSUMÉ").Range("J" & 2 + Position_Cell).Value = Date_Complete
ThisWorkbook.Worksheets("RÉSUMÉ").Range("H" & 2 + Position_Cell).Value = Termine
ThisWorkbook.Worksheets("RÉSUMÉ").Range("I" & 2 + Position_Cell).Value = DoubleCheck
End If
Next
Next
End Sub

-----------------------------------------------------------------------------------
J'utilise donc la fonction VLOOKUP comme suit:

Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 11, False)

Cependant, pour une raison totalement inconnue, lorsque je fait rouler le programme (en cliquant sur le bouton "Mise a jour") mon programme s'exécute bien et il rempli tous les champs de l'onglet "RÉSUMÉ", mais par contre lorsqu'il ne trouve pas de #Tache (NoTache donc LOOKUP_VALUE) correspondant dans un Onglet, au lieu de me retourner #N/A (Avec le FALSE pour forcer VLOOKUP a chercher une valeur exacte), il fait exactement le contraire et il agit comme si c'était TRUE (il va chercher la valeur approximative la plus proche de LOOKUP_VALUE)

Je ne sais pas si c'est clair mais vous avez le fichier pour voir.

merci d'avance et lâchez pas votre bon travail
 

Pièces jointes

  • Gestion de projets_test.xlsm
    112.1 KB · Affichages: 57

Damorek

XLDnaute Nouveau
Re : Problème avec valeur approx/exacte VLOOKUP

Je viens de trouver !!!

Le probleme est pas la fonction VLOOKUP (évidemment), mais bien la facon dont la boucle For a été construit

Voici donc comment j'ai reussi a résoudre mon problème.... il suffisait simplement de mettre toutes mes valeurs que je cherche nulle.
--------------------------------------------------------------------------------------
For Each Cell In Sheets("RÉSUMÉ").Range("A3:A" & Sheets("RÉSUMÉ").Range("A3").End(xlDown).Row)

On Error Resume Next

'Donne la position verticale relative (à partir de A3) de "Cell"
Position_Cell = Application.WorksheetFunction.Match(Cell, Worksheets("RÉSUMÉ").Range("A3:A65536"), 0)

'On met une boucle for pour balayer les TABS
For i = 146 To 147

'On initialise les valeurs pour éviter les doublons
NomTache = ""
NoProjet = ""
NomProjet = ""
Categorie = ""
Ressource_Aff = ""
Date_Echeance = ""
Date_Complete = ""
Termine = ""
DoubleCheck = ""

'Trouve les informations souhaité pour chacun des # de taches à mettre à jour
NomTache = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 6, False)
NoProjet = ThisWorkbook.Worksheets("P" & i).Range("G4")
NomProjet = ThisWorkbook.Worksheets("P" & i).Range("G1")
Categorie = ThisWorkbook.Worksheets("P" & i).Range("L4")
Ressource_Aff = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 17, False)
Date_Echeance = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 11, False)
Date_Complete = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 23, False)
Termine = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 14, False)
DoubleCheck = Application.WorksheetFunction.VLookup(Cell, Worksheets("P" & i).Range("B22:Z65536"), 20, False)


Merci quand meme
 

Discussions similaires

Réponses
6
Affichages
227

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 813
dernier inscrit
kaiyi