Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

T = Replace(T, T, = " = LEFT(T,LEN(T)-SEARCH("" N°"",T))")

13 réponses
Avatar
Jean-Paul V
Bonjour à tous

J’ai une requète ADO dans un Userform qui fonctionne :

Me.ComboBox1.Clear
Établir_Connexion (File)
Requete = "SELECT Pièce From [" & NomFeuille & "$] Group By Pièce"
Controle = "Combobox1"
MaRequêteAvecADO Controle, Requete

Elle me donne dans le combobox la liste :
Airs d'opéra
Concerto N°1
Concerto N°2
Requiem
Sonate N°2
Variation

Or je souhaite obtenir :
Airs d'opéra
Concerto
Requiem
Sonate
Variation

Je voudrais éliminer dans mon Combobox N°.. ect J’ai donc imaginé la
nouvelle macro :
Me.ComboBox1.Clear
T = Me.ComboBox1.List(Me.ComboBox1.ListIndex)
T = Replace(T, "'", "''")
T = Replace(T, T, = " = LEFT(T,LEN(T)-SEARCH("" N°"",T))")
Controle = "ComboBox1"
Requete = "SELECT Pièce From [" & NomFeuille & "$] like " & _
"'" & T & "' Group By Pièce"
MaRequêteAvecADO Controle, Requete

J’obtiens erreur de syntaxe sur T = Replace(T, T, = " =
LEFT(T,LEN(T)-SEARCH("" N°"",T))")
J’ai fait plusieurs autres essais en vain …solution ?
http://cjoint.com/?hdqgslQekw

A + j’espère

--
Jean-Paul V

3 réponses

1 2
Avatar
MichDenis
Oups ! Si tu veux charger le combobox "Types"
avec les données de la feuille "CompositeursType"
remplace dans la procédure "Private Sub UserForm_Initialize()"
le bout de code mettant à jour le combobox par celui-ci.
Dans le classeur que je t'ai envoyé, le combobox est chargé
à partir des données de la feuille BD

'-------------------------------------
'Mettre à jour le combobox "Types"
Me.Types.Clear
Controle = "Types"
With Worksheets("CompositeursType")
Requete = "SELECT [Type d'œuvre] From [" & .Name & "$]"
End With
MaRequêteAvecADO Controle, Requete
'-------------------------------------



"MichDenis" a écrit dans le message de groupe de discussion :
#LdI$Cq$
Bravo Jean-Paul, ton formulaire se charge sans problème !
Tu as fait du bon travail.

Je me suis permis de modifier la procédure "Private Sub UserForm_Initialize()"
pour faire le chargement du combobox "Types". L'approche ne requiert pas
l'usage d'une procédure de tri. De plus, je crois que cela augmente la vitesse
de traitement d'où une ouverture plus rapide du formulaire.

http://cjoint.com/?hhdkW41U0C





"Jean-Paul V" a écrit dans le message de groupe de
discussion :
Bonjour MichDenis
Merci pour vos bons conseils.
J'ai compris que je faisais fausse route, et je voulais trouver une solution
avant de vous répondre.
Grace à vos précédentes réponses à d'autres questions, jai trouvé cette
solution qui marche (NB mon Combobox est nommé Types ):
Sub RemplitcomboTypes()
Dim N As String, P As Variant
Dim T As String
Set MonDico = CreateObject("Scripting.Dictionary")
' Me.ComboBox1.Clear
Me.Types.Clear
With Sheets("BD")
Set Rg = .Range("C2:C" & .Range("C65536").End(xlUp).Row)
End With
For Each C In Rg
N = """" & C.Value & """"
P = "=TEXT(LEFT(" & N & ",SEARCH("" N°""," & N & ")-1),)"
P = Evaluate("TEXT(LEFT(" & N & ",SEARCH("" N°""," & N & ")-1),)")
If IsError(P) Then
P = N
P = Evaluate(N)
Else
End If
If Not MonDico.Exists(P) Then MonDico.Add P, P
Next C
temp = MonDico.items ' le tableau temp() reçoit les éléments de MonDico
Call tri(temp, LBound(temp), UBound(temp)) ' tri
Me.Types.List = temp
Me.Types.ListIndex = -1

Voir le fichier : http://cjoint.com/?hgs3YLahPh

--
Jean-Paul V


"MichDenis" wrote:


| A ) Avec votre modif concernant le PB du ‘ vous m’avez montré que le pouvait
| dans la requête travaillé sur des éléments modifiés sans changer le champ de
| la requête.

****Moi, j'arrive à une autre conclusion : Remarque qu'avec le dédoublement
des " ' " , le contenu demeure le même dans le contrôle "Listbox" et la cellule
de la plage de cellules. Cela ne modifie en rien le contenu. Cela n'a rien à voir
avec ce que toi tu veux faire !

****Je n'ai pas compris ce que tu veux faire...mais il faudra que tu ajoutes
une nouvelle macro ou un bout de code...dans ton formulaire, tu parles d'un
combobox et d'un textbox... cela n'a rien à voir avec les 2 ListBox et un
contrôle "Picture" que contenait le formulaire que tu as publié.




Avatar
MichDenis
La procédure finale serait :

'----------------------------------------------
Private Sub UserForm_Initialize()
Dim Requete As String, Controle As String
Dim File As String, Rg As Range

File = ThisWorkbook.FullName
NomFeuille = "BD"

For b = 1 To 27
Set Btn(b).GrLettres = Me("B_" & b)
Next b

With Sheets("BD")
.[A2:K5000].Sort Key1:=.Range("A2"), Order1:=xlAscending, _
Key2:=.Range("C2"), Order2:=xlAscending
End With

'-- Liste des noms
Me.Lettre = "Tous"

'Établir la connexion avec le fichier
Établir_Connexion (File)

'Mettre à jour la listeBox choixnom
Me.choixnom.Clear
Requete = "SELECT Auteur From [" & NomFeuille & "$] Group By Auteur"
Controle = "choixnom"
MaRequêteAvecADO Controle, Requete
If Me.choixnom.ListCount > 0 Then
If Me.choixnom.ListIndex = -1 Then
Me.choixnom.ListIndex = 0
End If
End If

'Mettre à jour le Combobox "Compositeurs"
Me.Compositeurs.List = Me.choixnom.List

'Mettre à jour le combobox "Types"
Me.Types.Clear
Controle = "Types"
With Worksheets("CompositeursType")
Requete = "SELECT [Type d'œuvre] From [" & .Name & "$]"
End With
MaRequêteAvecADO Controle, Requete

'mettre à jour le combobox ORCHESTRE
Me.ORCHESTRE.Clear
Requete = "SELECT OrchestreInstr From [" & NomFeuille & "$] Group By OrchestreInstr"
Controle = "ORCHESTRE"
MaRequêteAvecADO Controle, Requete

'mettre à jour le combobox CHEFS
Me.CHEFS.Clear
Requete = "SELECT ChefMusicien From [" & NomFeuille & "$] Group By ChefMusicien"
Controle = "CHEFS"
MaRequêteAvecADO Controle, Requete
End Sub
'----------------------------------------------
Avatar
Jean-Paul V
Merci pour votre réponse qui fait que je vais abandonner ma macro que j’ai eu
tant de mal à construire et à faire tourner car j’ai la réponse initiale
comment faire tourner une requête ADO sur un champ ou on élimine des
caractères pour la requête et rétablir le champ dans sa situation initiale.
Et la solution était :
x = Rg ‘ mettre dans x le champ initial
Rg.Replace "N°*", "" ‘ afin d’éliminer les caractères indésirables.
Et Rg = x rétablir Rg tel qu’il était cela semble tout simple avec la
solution
Je vais donc utiliser votre version et faire tous les tests par exemple
MajChoixNom se plante parce que vous avez supprimé Remplitcombo je vais le
remplacer par Me.Compositeurs.List = Me.choixnom.List
A terme je vais abandonner la Feuille CompositeursTypes.
Merci mille fois bonne journée.

--
Jean-Paul V


"MichDenis" wrote:

La procédure finale serait :

'----------------------------------------------
Private Sub UserForm_Initialize()
Dim Requete As String, Controle As String
Dim File As String, Rg As Range

File = ThisWorkbook.FullName
NomFeuille = "BD"

For b = 1 To 27
Set Btn(b).GrLettres = Me("B_" & b)
Next b

With Sheets("BD")
.[A2:K5000].Sort Key1:=.Range("A2"), Order1:=xlAscending, _
Key2:=.Range("C2"), Order2:=xlAscending
End With

'-- Liste des noms
Me.Lettre = "Tous"

'Établir la connexion avec le fichier
Établir_Connexion (File)

'Mettre à jour la listeBox choixnom
Me.choixnom.Clear
Requete = "SELECT Auteur From [" & NomFeuille & "$] Group By Auteur"
Controle = "choixnom"
MaRequêteAvecADO Controle, Requete
If Me.choixnom.ListCount > 0 Then
If Me.choixnom.ListIndex = -1 Then
Me.choixnom.ListIndex = 0
End If
End If

'Mettre à jour le Combobox "Compositeurs"
Me.Compositeurs.List = Me.choixnom.List

'Mettre à jour le combobox "Types"
Me.Types.Clear
Controle = "Types"
With Worksheets("CompositeursType")
Requete = "SELECT [Type d'œuvre] From [" & .Name & "$]"
End With
MaRequêteAvecADO Controle, Requete

'mettre à jour le combobox ORCHESTRE
Me.ORCHESTRE.Clear
Requete = "SELECT OrchestreInstr From [" & NomFeuille & "$] Group By OrchestreInstr"
Controle = "ORCHESTRE"
MaRequêteAvecADO Controle, Requete

'mettre à jour le combobox CHEFS
Me.CHEFS.Clear
Requete = "SELECT ChefMusicien From [" & NomFeuille & "$] Group By ChefMusicien"
Controle = "CHEFS"
MaRequêteAvecADO Controle, Requete
End Sub
'----------------------------------------------








1 2