Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Démarrer une recherche à partir d'un certaine zone de texte

  • Initiateur de la discussion Initiateur de la discussion iguan
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

I

iguan

Guest
Bonjour,

J'ai une maccro de recherche dans les textbox, il fonctionne parfaitement. Mais je voudrais y faire une petite amélioration: Si on le souhaite, continuer la recherche A PARTIR de la dernière textbox trouvé.

Pour l'instant la macro effectue :
-Demande a l'utilisateur le texte qui doit être rechercher
-Démarre de la feuille 1 ainsi que de la premiere textbox
-Compare le contenu de la textbox avec le texte rechercher
-Si il a trouvé, selectionne la textbox et centre la fenêtre sur cette textbox
-Demande a l'utilisateur si il veut continuer la recherche

Voila la boucle que je n'arrive pas a faire fonctionner:
VB:
z = 1
While continue = True
    '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 z" Then
            If laShape.TextFrame.Characters.Text Like "*" & numOf & "*" Then trouve = True
            If trouve Then Exit For
            End If
            z = z + 1
        Next laShape
    If trouve Then Exit For
    z = 1
    Next laFeuille

La boucle ne plante pas, car le z s'incrémente correctement. Je pense que sa doit venir de "Text Box z". lors de l'execution il ne trouve plus rien.
Quelqu'un à t'il une idée?

Merci d'avance
 
Bonjour iguan,
Bonjour à tous,

A la place de ceci :
Code:
If laShape.Name Like "Text Box z" Then
Je mettrais plutôt cela ou rajouterais :
Code:
If laShape.AutoShapeType = .....then

Sinon , n'y aurait t-il pas cela en trop ?

Code:
If trouve Then Exit For

Klin89
 
Re : Démarrer une recherche à partir d'un certaine zone de texte

Bonjour Klin89,
Bonjour pierrejean,

J'ai tester avec
VB:
 If laShape.Name Like "Text Box " & z Then
le z s'incrémente toujours mais ne trouve rien.

Avec
VB:
 If laShape.AutoShapeType = z then
même chose.

Klin89, la code
VB:
 If trouve Then Exit For
est utile. Je ne m'y connait pas énormement en vba, mais il me semble que c'est ce qu'il me permet de centrer l'écran sur la dernière textbox (celle ou le texte rechercher est trouver).

Je vous joint un fichier ou je fait mes test de code qui est sensiblement le même que le fichier réel, en moin conséquent.

a+
 

Pièces jointes

Re iguan,
Bonjour pierrejean,

Avec tes textbox, tu sèmes la confusion, tes formes automatiques sont des rectangles.
Ceci :
Code:
If laShape.AutoShapeType = msoShapeRectangle
A la place de cela :
Code:
If laShape.Name Like "Text Box z" Then

Klin89
 
Re : Démarrer une recherche à partir d'un certaine zone de texte

Re

Voici quelque chose qui fonctionne jusqu'a la selection de la textbox cherchée
Apres ???
NB: Modification faite dans la sub CommandButton de la feuil1
Que fait celle du Module1 ????
 

Pièces jointes

Re : Démarrer une recherche à partir d'un certaine zone de texte

Bonjour,

Tout d'abord excuser moi pour le temps de réponse.
Merci Pierrejean pour la modification, en effet il me trouve 2 text box pour le numéro d'OF "1234567890125" ce qui est normal car c'est un doublon volontaire.
Après test le programme me trouve (pour la recherche "1234567890125") d'abord la text box 6 (alors qu'il me selectionne la 4), apres continuation il me trouve la text box 4 (alors qu'il me selectionne la 1). De plus on dirait qu'il n'aime pas les triplon...

Le module1 fait la même chose que le commandbutton, mais je trouve plus pratique de faire ma phase de test dans un commandbutton plutot que d'une barre d'outils personaliser.

Encore merci.
++

Edit:
Après avoir écrit ce message, j'ai essayer de faire une boucle de ce type:
VB:
For laShape.Name = "Text Box 1" To laShape.Name = "Text Box " & z
            If laShape.TextFrame.Characters.Text Like "*" & numOf & "*" Then trouve = True
            If trouve Then z = z + 1
                            Exit For
            End If
            z = z + 1
        Next laShape
mais elle ne marche pas, est ce possible de faire une boucle comme ceci?
 
Dernière modification par un modérateur:
Re : Démarrer une recherche à partir d'un certaine zone de texte

Re

pour selectionner tous les OF d'un Numero

Si ton besoin est different ou s'il y a autre chose a faire , dis nous ce qu'il en est

Code:
Sub test()
Dim a()
ReDim a(0)
 numOf = InputBox("Numéro d'OF à rechercher :", "Rechercher")
 For Each laFeuille In ThisWorkbook.Sheets
   For Each laShape In laFeuille.Shapes
    If InStr(laShape.Name, "Text Box") <> 0 Then
     If InStr(laShape.TextFrame.Characters.Text, numOf) <> 0 Then
       a(UBound(a)) = laShape.Name
       ReDim Preserve a(UBound(a) + 1)
     End If
    End If
   Next
Next
ReDim Preserve a(UBound(a) - 1)
ActiveSheet.Shapes.Range(a).Select
End Sub
 
Re : Démarrer une recherche à partir d'un certaine zone de texte

Re Pierrejean,

Cette maccro est très utile, n'étant pas très fort en vba je me demandait si il était possible de l'intégrer a ma macro.
Grâce a cette maccro il connait le nom de chaque textbox qui contient la recherche voulu. Moi il faudrait un dialogue avec l'utilisateur comme dans ce code ci:

VB:
    '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
    [............]
    'positionner la fenêtre (bugge depuis VBE, la macro doit être lancée depuis le excel)
    ActiveWindow.ScrollColumn = decalageCol
    ActiveWindow.ScrollRow = decalageLig

    Select Case MsgBox("Chercher le numéro d'OF suivant ?", vbYesNo + vbQuestion, "Rechercher")
        Case vbYes
        continue = True
        Case vbNo
        Exit Sub
    End Select
Wend
End Sub

Par la je voulais dire qu'il indique si il ne trouve rien. Qu'il centre la fenêtre sur la premiere textbox trouvé. Une message box yes/no apparait et demande si il veut continuer la recherche.
Yes-> chercher et centrer la fenetre sur la 2eme textbox trouvé
No->arreter la macro.





Sinon après recherche sur internet j'ai fait ceci :
VB:
For Each laFeuille In ThisWorkbook.Sheets
        For Each laShape In laFeuille.Shapes
            n = z
        Next laShape
        'boucler sur toutes les formes de la feuille
       For z = debut To n
            If userform1.Controls("TextBox" & z) = "" Then
            If laShape.TextFrame.Characters.Text Like "*" & numOf & "*" Then trouve = True
            If trouve Then z = z + 1
                            Exit For
            End If
        Next z
    If trouve Then Exit For
    z = 1
    Next laFeuille
    debut = z

La premiere boucle va incrémenter les feuille "For Each laFeuille In ThisWorkbook.Sheets"
La deuxieme me permettra d'avoir la derniere textbox pour la feuille selectionner. "For Each laShape In laFeuille.Shapes"
Enfin la derniere devra être la boucle de recherche "For z = debut To n". Le problème ce situe dans cette boucle. Je n'arrive pas a faire comprendre qu'il doit selectionner la textbox 1, 2, 3, ..., n et comparer son contenu.

A voir la solution la plus simple.

Merci d'avance.
a+
 
Re : Démarrer une recherche à partir d'un certaine zone de texte

Re,

Une autre personne a trouvé la solution, il falait modifier la fin de la boucle comme ceci :

VB:
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

Merci encore Pierrejean tu ma beaucoup aidé, et merci a ce forum.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
554
Réponses
3
Affichages
919
Réponses
3
Affichages
876
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…