Private Sub CommandButton1_Click()
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, z As Integer
'récupérer le numéro d'OF à rechercher
numOf = InputBox("Numéro d'OF à rechercher :", "Rechercher")
etiquette:
trouve = False
'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 trouve = True
If trouve Then Exit For
End If
Next laShape
If trouve Then Exit For
Next laFeuille
'si aucune forme contenant le numéro d'of n'a été trouvée, quitter la macro
If laShape Is Nothing Then
MsgBox "Non trouvé"
Exit Sub
End If
'activer la feuille et sélectionner la forme
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
'MsgBox Oui + Non
Select Case MsgBox("Chercher le numéro d'OF suivant ?", vbYesNo + vbQuestion, "Rechercher")
Case vbYes
GoTo etiquette
'procédure si click sur Oui
Case vbNo
'procédure si click sur Non
Exit Sub
End Select
End Sub