2017-10-20 35 views
0

Je travaille sur la création d'un formulaire utilisateur pour réviser une feuille Excel. J'ai besoin de rechercher une colonne spécifique pour voir si l'utilisateur a déjà examiné la ligne. Si tel est le cas, la cellule sera remplie de "Révisée", si elle n'a pas encore été révisée, elle aura "Non examiné".Rechercher une entrée de cellule spécifique dans une colonne dans VBA

Chaque département a son propre journal de colonnes, que la ligne ait été examinée ou non. C'est à dire. Dept1 peut avoir examiné la ligne, tandis que Dept2 ne l'a pas encore fait.

J'ai essayé quelque chose comme

With Sheets("ECR") 
     UnReviewedRow = .Range(DepartmentReviewColumn:DepartmentReviewColumn).Find(what:="Not Reviewed", after:=.Cells(DepartmentReviewColumn, 3)).Row 
    End With 

Mais je reçois une erreur, pas tout à fait sûr d'où il vient de bien. Le "3" codé en dur est parce que je sais que toutes les entrées commencent à la troisième ligne, tout ce qui précède est en-têtes.

J'ai trouvé quelques questions similaires, mais elles supposent toutes que la colonne recherchée sera la même à chaque fois. Mon problème est que je ne veux pas coder ceci pour chaque département, je voudrais être un peu plus élégant que cela.

+0

Les cellules sont une ligne, une colonne et non une colonne, ligne – QHarr

+1

'.Range (DepartmentReviewColumn: DepartmentReviewColumn)' semble être un problème. Quelle est la valeur de 'DepartmentReviewColumn'? –

+1

suppose également DepartmentReviewColumn une chaîne et aurait besoin de concaténation correctement? DepartmentReviewColumn & ":" & DepartmentReviewColumn – QHarr

Répondre

1

Quelque chose comme ceci:

With Sheets("ECR") 
    UnReviewedRow = .Range(DepartmentReviewColumn & ":" & DepartmentReviewColumn).Find(What:="Not Reviewed", After:=.Cells(3, DepartmentReviewColumn)).Row 
End With 

Modifications apportées:

  • Range() prend maintenant un argument de chaîne correctement construit;
  • Cells() a maintenant un numéro de ligne comme premier argument et une colonne exprimée comme une chaîne comme deuxième argument.

Notez que ce code échouera avec Object variable or With block variable not set si la chaîne de recherche est introuvable. Vous pouvez gérer cette situation en initialisant UnReviewedRow par exemple. 0 (zéro) et en plaçant On Error Resume Next au-dessus de l'appel Rechercher et On Error Resume <either 0 or your original error handler's label> sous l'appel Rechercher. Ensuite, vérifiez si UnReviewedRow = 0 et agissez correctement.

Mettez toujours Option Explicit en haut des modules et des classes et compilez votre code (Debug/Compile VBAProject). Lors de la publication, inclure le texte de toutes les erreurs rencontrées.