Sub modulerecherchetextbox()
Dim laShape As Shape, celluleCentre As Range, centreT As Double, centreL As Double, i As Long
Dim nbColAffichees As Long, nbLigAffichees As Long, decalageCol As Long, decalageLig As Long
Dim numOf As String, laFeuille As Worksheet, trouve As Boolean
'récupérer le numéro d'OF à rechercher
numOf = InputBox("Numéro d'OF à rechercher :", "Rechercher")
'boucler sur chaque feuille du classeur
For Each laFeuille In ThisWorkbook.Sheets
'boucler sur toutes les formes de la feuille
For Each laShape In laFeuille.Shapes
If laShape.Name Like "Text Box *" Then
If laShape.TextFrame.Characters.Text Like "*" & numOf & "*" Then
laFeuille.Activate
laShape.Select
'centrer la forme à l'écran
'calculer les "coordonnées" du centre de la forme
centreT = laShape.Top + laShape.Height / 2
centreL = laShape.Left + laShape.Width / 2
'calculer la cellule correspondante aux "coordonnées"
Set celluleCentre = Sheets(1).Range("A1")
While celluleCentre.Offset(0, 1).Left < centreL
Set celluleCentre = celluleCentre.Offset(0, 1)
Wend
While celluleCentre.Offset(1, 0).Top < centreT
Set celluleCentre = celluleCentre.Offset(1, 0)
Wend
'vériffier le nombre de lignes et colonnes affichées
nbColAffichees = ActiveWindow.VisibleRange.Columns.Count
nbLigAffichees = ActiveWindow.VisibleRange.Rows.Count
'calculer la cellule (colonne et ligne) à afficher en haut à droite
decalageCol = IIf(celluleCentre.Column - CInt(nbColAffichees / 2) + 1 < 1, 1, celluleCentre.Column - CInt(nbColAffichees / 2) + 1)
decalageLig = IIf(celluleCentre.Row - CInt(nbLigAffichees / 2) + 1 < 1, 1, celluleCentre.Row - CInt(nbLigAffichees / 2) + 1)
'positionner la fenêtre (bugge depuis VBE, la macro doit être lancée depuis le excel)
ActiveWindow.ScrollColumn = decalageCol
ActiveWindow.ScrollRow = decalageLig
If MsgBox("Voulez-continuer à chercher", vbQuestion + vbYesNo, "Recherche") = vbNo Then Exit Sub
End If
End If
Next laShape
Next laFeuille
'si aucune forme contenant le numéro d'of n'a été trouvée, quitter la macro
MsgBox "Non trouvé"
End Sub