Kelly a un classeur qui contient des centaines de feuilles de calcul. Chaque feuille de travail représente un projet individuel pour son entreprise. La cellule C4 de chaque feuille de calcul contient le numéro de projet pour ce projet particulier.

Trouver des projets individuels parmi les centaines du classeur est, au mieux, fastidieux. Elle se demande si une macro pourrait être créée pour que tous les utilisateurs entrent un numéro de travail, trouvent la feuille de calcul qui a ce numéro de travail dans la cellule C4, puis affichent cette feuille de calcul.

Avant d’aborder la procédure à suivre dans une macro, vous devez comprendre que vous pourrez peut-être trouver le projet souhaité à l’aide des outils natifs d’Excel.

Tout ce que vous avez à faire est de suivre ces étapes:

  1. Appuyez sur Ctrl + F. Excel affiche l’onglet Rechercher de la boîte de dialogue Rechercher et remplacer.

  2. Cliquez sur le bouton Options pour développer la boîte de dialogue. (Voir la figure 1.)

  3. À l’aide de la liste déroulante Dans, choisissez Classeur.

  4. Si la cellule C4 de chaque feuille de calcul contient uniquement le numéro de projet, activez la case à cocher Faire correspondre tout le contenu de la cellule.

  5. Cliquez sur Suivant.

C’est ça; vous devriez être redirigé vers la première instance de cellule qui contient votre numéro de projet. Si votre classeur contient des numéros de projet dans plusieurs cellules (en plus de la cellule C4), l’utilisation de l’outil Rechercher peut être un peu fastidieuse; vous devrez continuer à cliquer sur Suivant jusqu’à ce que vous trouviez la feuille de calcul correcte. Dans une telle situation, une macro peut être la meilleure solution car elle vous permet de regarder spécifiquement la cellule C4 et d’ignorer ce qui se trouve dans n’importe quelle autre cellule.

La macro suivante invite l’utilisateur à entrer un numéro de projet. Il recherche ensuite dans chaque feuille de calcul du classeur la première feuille de calcul dans laquelle la cellule C4 contient ce numéro de projet. Si elle est trouvée, la macro affiche la feuille de calcul et active la cellule. S’il ne le trouve pas, un message s’affiche pour l’indiquer.

Sub FindProject1()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell) = sProj Then             wks.Activate             wks.Range(sCell).Activate             MsgBox ("Project '" & sProj & "' is in:" & vbCrLf & wks.Name)

Exit Sub         End If     Next wks     MsgBox ("Project is not found")

End Sub

Il existe deux problèmes potentiels avec cette macro. Premièrement, si le numéro de votre projet est en fait un nombre, la macro peut ne pas le trouver lorsqu’elle recherche des chaînes de texte. Deuxièmement, s’il existe plusieurs feuilles de calcul qui utilisent le même numéro de projet, vous ne le saurez jamais car la macro s’arrête toujours à la feuille de calcul avec le premier numéro de projet correspondant dans la cellule C4. Vous pouvez surmonter ces deux problèmes en apportant quelques modifications à la macro.

Sub FindProject2()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String     Dim vSheets As New Collection     Dim sTemp As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell).Value = sProj Or _           wks.Range(sCell).Value = Val(sProj) Or _           wks.Range(sCell).Text = sProj Then             vSheets.Add wks         End If     Next wks

Select Case vSheets.Count         Case 0             sTemp = "Project " & sProj & " was not found "

sTemp = sTemp & "in this workbook."

MsgBox sTemp         Case 1             wks.Activate             wks.Range(sCell).Activate         Case Else             sTemp = "Project " & sProj & " was found on more "

sTemp = sTemp & "than one sheet:" & vbCrLf             For Each wks In vSheets                 sTemp = sTemp & wks.Name & vbCrLf             Next wks             MsgBox sTemp     End Select End Sub

Avec cette version de la macro, la feuille de calcul du projet s’affiche uniquement si le numéro de projet est unique parmi toutes les feuilles de calcul. S’il existe plusieurs instances où le numéro de projet est le même, vous êtes informé du nom de ces feuilles de calcul, mais aucune feuille de calcul n’est sélectionnée.

Vous pouvez, si vous le souhaitez, rendre la macro beaucoup plus simple en renommant toutes vos feuilles de calcul avec le numéro de projet. Cela aurait également l’avantage de garantir qu’aucun projet n’utilise réellement deux feuilles de calcul. (Tous les noms de feuille de calcul doivent être uniques, donc si chaque feuille de calcul utilise un numéro de projet comme nom, vous ne pouvez avoir qu’une seule feuille de calcul par numéro de projet.) Si vous adoptez cette approche, vous pouvez utiliser une macro similaire à la suivante pour rechercher et sauter à la feuille de calcul souhaitée:

Sub FindProject3()

On Error GoTo ErrorHandler     Sheets(InputBox("Enter Project Number:")).Activate     Exit Sub ErrorHandler: MsgBox "No such Project"

End Sub

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (13489) s’applique à Microsoft Excel 2007, 2010, 2013 et 2016.