Microsoft 365 VBA - recherche et remplace

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 !

PLA

XLDnaute Nouveau
Bonjour,
Y-at-il un moyen de modifier via VBA le paramètre "Dans" de la boîte de dialogue "Recherche et remplace" (pour le faire passer de "Feuille" à "Classeur" ou inversement ?
En vous remerciant pour votre aide
 
Bonjour,
Y-at-il un moyen de modifier via VBA le paramètre "Dans" de la boîte de dialogue "Recherche et remplace" (pour le faire passer de "Feuille" à "Classeur" ou inversement ?
En vous remerciant pour votre aide
Qu'est-ce que tu veux faire exactement ? parce que même si on arrive à changer la valeur , il faut faire des actions après ?
code qui fait l'action :
VB:
Sub ModifSearchReplace()
Dim c As New CUIAutomation, oReR As IUIAutomationElement, utils As Object
Dim oDesktop As IUIAutomationElement, oCondition As IUIAutomationCondition
'Dim  comboDans As IUIAutomationElement, valCombo As IUIAutomationValuePattern
Set utils = CreateObject("XlDnaLibJP.Utils")
On Error Resume Next
CommandBars.FindControl(ID:=313).Execute ' ouvrir fenêtre dialogue rechercher et remplacer
DoEvents
Set oCondition = c.CreatePropertyCondition(UIAutomationClient.UIA_NamePropertyId, "Rechercher et remplacer")
Set oDesktop = c.GetRootElement
Set oReR = oDesktop.FindFirst(TreeScope_Children, oCondition) ' Recherche de la fenêtre
oReR.SetFocus ' Focus sur la fenêtre
DoEvents: DoEvents
utils.Sleep 2000
SendKeys ("%{p}"): DoEvents ' Alt+p -> onglet remplacer
utils.Sleep 2000
SendKeys ("%{D}"): DoEvents ' Alt+D -> comboBox Dans :
utils.Sleep 2000
utils.SendKeys ("{DOWN}"): DoEvents ' Classeur
utils.Sleep 2000
'SendKeys ("{UP}"): DoEvents   ' Feuille
'utils.Sleep 2000
SendKeys ("{ENTER}"): DoEvents
utils.Sleep 5000
'Set oCondition = c.CreatePropertyCondition(UIAutomationClient.UIA_NamePropertyId, "Dans :")
'Set comboDans = oReR.FindFirst(TreeScope_Descendants, oCondition)
'Set valCombo = comboDans.GetCurrentPattern(UIA_ValuePatternId)
End Sub
La tempo c'est pour bien voir les actions
ReR.gif
 
ouais mais des sendkeys focussés et pas envoyés par VBA mais par dotnet 😉
Sinon on y arrive presque en tout UIAutomation (je n'arrive pas à changer la valeur de la combobox avec le SetValue)
VB:
Sub ModifSearchReplace()
Dim c As New CUIAutomation, oReR As IUIAutomationElement
Dim oDesktop As IUIAutomationElement, oCondition As IUIAutomationCondition
Dim allElem As IUIAutomationElementArray, comboDans As IUIAutomationElement
Dim valCombo As IUIAutomationValuePattern, oUIAelem As IUIAutomationElement
Dim invokeCombo As IUIAutomationInvokePattern
On Error Resume Next
CommandBars.FindControl(ID:=313).Execute ' ouvrir fenêtre dialogue rechercher et remplacer
DoEvents
Set oCondition = c.CreatePropertyCondition(UIAutomationClient.UIA_NamePropertyId, "Rechercher et remplacer")
Set oDesktop = c.GetRootElement
Set oReR = oDesktop.FindFirst(TreeScope_Children, oCondition) ' Recherche de la fenêtre
Set oCondition = c.CreateTrueCondition
Set allElem = oReR.FindAll(TreeScope_Descendants, oCondition)
    For i = 0 To allElem.length - 1
         Set oUIAelem = allElem.GetElement(i)
        If (oUIAelem.CurrentControlType = 50003) And (InStr(1, oUIAelem.CurrentName, "Dans") > 0) Then
          Set comboDans = oUIAelem
        End If
    Next i
'DoEvents
comboDans.SetFocus
Set valCombo = comboDans.GetCurrentPattern(UIA_ValuePatternId)
Set invokeCombo = comboDans.GetCurrentPattern(UIA_InvokePatternId)
Debug.Print valCombo.CurrentValue
valCombo.SetValue "Feuille"
'valCombo.SetValue "Classeur"
DoEvents
End Sub
 
Bonjour Jurassic pork,

Je vous remercie pour ces premiers éléments.

Pour replacer le contexte, je suis amené à faire un "Remplacer" via VBA sur une sélection de cellules (en utilisant le classique Range.Replace). Si l'option "Feuille" est activée dans EXCEL le "Remplacer" se fait correctement sur la sélection de cellules. Si l'option "Classeur" est activée dans EXCEL le "Remplacer" va se lancer sur l'ensemble du classeur sans tenir compte de la sélection des cellules indiquée dans la macro.

Mon VBA n'aime pas l'instruction "Set utils = CreateObject("XlDnaLibJP.Utils")" : il me renvoie le classique "un composant ActiveX ne peut pas créer d'objet". Une bibliothèque complémentaire à installer ?
 
Dernière édition:
- 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

Discussions similaires

  • Question Question
Microsoft 365 RECHERCHEV
Réponses
10
Affichages
393
Réponses
5
Affichages
232
Réponses
5
Affichages
565
Retour