Rechercher dans une zone de texte

iguan

XLDnaute Nouveau
Bonjour,

J'ai une feuille excel avec plein de zone de texte (représente un planning) avec du texte écrit dedans.
Par exemple une zones de texte va contenir:
"Nom de la pièce" x"nombre de pièce"
"n°OF"

le n°OF contient obligatoirement 13 chiffres, je voudrais pouvoir créer une maccro ou autre pour chercher ce n°OF.

Il me faudrait la même chose que ctrl+f mais pour le contenu des zones de texte.

Est ce possible?

Merci d'avance
 

iguan

XLDnaute Nouveau
Re : Rechercher dans une zone de texte

Bonjour Rachid_0661,

Ce fichier est confidentiel, je suis stagiaire dans la boite et je n'y est même pas accès librement. Alors je ne pourrais pas le joindre.

Ce que je voudrais c'est comme lors de l'utilisation de ctrl+f, mais qui recherche dans les zones de texte créer.

J'ai regarder sur le net, j'ai rien trouver de concluant. Alors je me demande si c'est possible.

Cdt
 

mromain

XLDnaute Barbatruc
Re : Rechercher dans une zone de texte

Bonjour iguan, Bonjour Rachid_0661,

Tu peux essayer de créer un fichier exposant le problème (sans données confidentielles) avec quelques zones de texte.
De plus, je ne vois pas trop ce que tu attends comme type de recherche...
Est-ce que tu veux rechercher le n°OF et que ça te renvoie le nom de la zone de texte dans lequel il est ?

A+
 

R@chid

XLDnaute Barbatruc
Re : Rechercher dans une zone de texte

Bonjour Rachid_0661,

Ce fichier est confidentiel, je suis stagiaire dans la boite et je n'y est même pas accès librement. Alors je ne pourrais pas le joindre.

Ce que je voudrais c'est comme lors de l'utilisation de ctrl+f, mais qui recherche dans les zones de texte créer.

J'ai regarder sur le net, j'ai rien trouver de concluant. Alors je me demande si c'est possible.

Cdt
Salut tout le monde,
tu peux recreer un autre fichier anonymise, si c'est possible ce serait le bienvenu
 

iguan

XLDnaute Nouveau
Re : Rechercher dans une zone de texte

Bonjour,

Voila un exemple qui pourra résumer ce que je voit.
dans les zones de texte il n'est pas marquer "N°OF: 1234567890123" mais juste "1234567890123"

C'est ce numéro à 13 chiffre que je voudrais rechercher.
 

Pièces jointes

  • essai.xls
    31.5 KB · Affichages: 136
  • essai.xls
    31.5 KB · Affichages: 119
  • essai.xls
    31.5 KB · Affichages: 125

mromain

XLDnaute Barbatruc
Re : Rechercher dans une zone de texte

Bonjour iguan, Rachid_0661, le forum,


Voici un essai :
VB:
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

    'récupérer le numéro d'OF à rechercher
    numOf = InputBox("Numéro d'OF à rechercher :", "Rechercher")
    
    'boucler sur toutes les formes de la feuille
    For Each laShape In ThisWorkbook.Sheets("Feuil1").Shapes
        If laShape.TextFrame.Characters.Text Like "*" & numOf & "*" Then Exit For
    Next laShape
    
    'si aucune forme contenant le numéro d'of n'a été trouvée, quitter la macro
    If laShape Is Nothing Then Exit Sub
    
    'sélectionner la forme
    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

A+
 

iguan

XLDnaute Nouveau
Re : Rechercher dans une zone de texte

Waaou super code. Je l'ai essayer sur mon programme d'essai impecable.
Dès que je peut je l'essaye sur le vrai programme.

Est-ce que cet maccro va rechercher sur toute les feuilles du classeur ou que sur la feuille active?

Un grand merci.
a+
 

mromain

XLDnaute Barbatruc
Re : Rechercher dans une zone de texte

Re,


Voici le code modifié pour chercher sur toutes les feuilles du classeur :
VB:
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 Exit Sub
    
    '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

A+
 

iguan

XLDnaute Nouveau
Re : Rechercher dans une zone de texte

Re,

Après test sur le classeur excel réel, malheureusement sa ne fonctionne pas.
J'ai affecter à la macro un bouton dans une barre d'outils personalisé. Lorsque je la lance, il m'affiche la message box de recherche. Lorsque je tape un numéro d'OF, une nouvel message box apparait : "Incompatibilité de type".

Ceci est-il du au nombre de feuille présent dans le classeur? (environ 40 feuilles et 30 graph)
ou peut-être au nombre de zone de texte ? (1000 minimum)

Merci d'avance.
a+
 

iguan

XLDnaute Nouveau
Re : Rechercher dans une zone de texte

Bonjour,

Excusez moi pour le temps de réponse. J'ai été blancer sur un autre travail.
Alors j'ai recommencer la phase de test, et j'ai très légèrement modifier le code :

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

Au lieu de quitter, il me dit qu'il a pas trouvé se que je cherchait.

Et maintenant le message d'erreur qu'il maffichait avant n'apparait plus. La macro s'éxécute et s'arrète comme si elle n'avait rien trouver.

Si quelqu'un a une solution, je vous en serait très reconnaissant.
 
Dernière édition:

iguan

XLDnaute Nouveau
Re : Rechercher dans une zone de texte

Bonjour,

Après de l'aide sur d'autre forum voici le code vba qui marche parfaitement.

VB:
Sub recherchecontenuzone()
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.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
End Sub

Je me permet de le mettre sur ce forum, car pour moi c'est quelque chose de très utile.

En tout cas merci beaucoup mromain, ton trvail à été une super base.

++
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 957
Membres
103 990
dernier inscrit
lamiadebz