Bonjour,
Je cherche a faire une fonction rechercher dans des zones de textes.
J'ai un document qui contient uniquement des zones de texte pour réaliser un planning, après quelque recherche on ma donner se code. Il fonctionne parfaitement sur un fichier test mais pas sur le fichier réel:
Private Sub test()
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")
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.TextFrame.Characters.Text Like "*" & numOf & "*" Then trouve = True
If trouve Then Exit For
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("Feuil1").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
End Sub
La macro s'éxécute et s'arrète comme si elle n'avait rien trouver sur le fichier réel.
Si quelqu'un a une solution, je vous en serait très reconnaissant.
A+