OVH Cloud OVH Cloud

UserForm

45 réponses
Avatar
nicolas65
Bonjour,

Y aurait-il parmi les grands sp=E9cialistes d'Excel=20
quelqu'un qui aurait la solution =E0 mon probl=E8me?
Ne pouvant pas mettre de fichier sur le forum merci de=20
regarder le lien
http://www.excel-
downloads.com/html/French/forum/messages/1_101898_101898.h
tm
pour avoir tous les d=E9tails.

Merci

10 réponses

1 2 3 4 5
Avatar
michdenis
Bonjour Nicolas65,

Tu peux t'amuser avec ceci :

Tout ce qui suit est à copier dans la feuille module où l'action se déroule. Un clic droit sur l'onglet de la feuille /
visualiser le code / et dans la feuille blanche ceci :

3 événements de la feuille sont utilisés

A ) Worksheet_Activate
- Ouverture d'une connection entre le fichier actuel et ta base de données
- charge le recordset de ta base de données en mémoire

B ) Worksheet_SelectionChange
-A chaque fois que tu cliqueras dans la colonne B:B, le contenu de la cellule sélectionnée sera recherchée dans
le recordset en mémoire, si l'information s'y trouve, (j'ai supposé que tu n'avais pas de doublons sur les noms des
cheveaux dans ta base de données) , l'information sera copiée à la suite des données de la feuil2 de ton classeur.
Si tu préfères le tout dans un formulaire :
Userform1.Show
For A = 1 To Nb
'En prenant pour acquis que tu as autant de textbox que de champs dans ta base de données
'le nom de tes textbox sont de 1 ... au nombre de champs
Controls("Textbox" & cstr(a) = Rst(A - 1)
Next

C )Worksheet_Deactivate
- Vide le recordset


D ) Tu dois ajouter à ton projet la bibliothèque suivante :
"Microsoft Activex Data Object 2.0 Librairy"


'Déclaration Variable : Haut du module Feuille
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
'--------------------------------------------
Private Sub Worksheet_Activate()

Dim Requete As String, NomFeuille As String
Dim file As String, Chemin As String

'*********Variable à définir**************

NomFeuille = "Feuil1" 'A déterminer
Chemin = "C:excel" 'à déterminer
file = "Données"

'*****************************************
'La requête qui sera exécutée ' `a déterminer
Requete = "SELECT * From [" & NomFeuille & "$] "

'établir la connection avec le fichier...
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & file & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

'Ouverture d'un recordset
Rst.Open Requete, Conn, adOpenForwardOnly, adLockOptimistic

End Sub
'--------------------------------------------
Private Sub Worksheet_Deactivate()

Rst.Close
Set Rst = Nothing

End Sub
'--------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim A As Integer, Nb As Integer, Rg As Range

If Target.Column = Range("B1").Column Then
If Target.Cells.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub

'Titre2 = Nom De l'étiquette Colonne B de ta base de données
Rst.Find "Titre2='" & Target & "'"
If Rst.EOF Then
MsgBox "Aucun cheval trouvé!"
Rst.MoveFirst
Else
'déterminer où l'information sera copiée
With Worksheets("Feuil2")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65356").End(xlUp).Row)(2)
End If
End With
'déterminer le nombre de champs du recordset
Nb = Rst.Fields.Count
For A = 1 To Nb
Rg.Offset(, A - 1) = Rst(A - 1)
Next
End If

End If
'--------------------------------------------


Salutations!








"nicolas65" a écrit dans le message de
news:2d96701c46a6d$2176cd70$
Re(Bonjour)

Veuillez excuser le doublon mais le message est partit
trop vite. Je le reprend donc en entier.

Je n'ai pas demandé de me faire intégralement le
programme. J'ai adapté un certains nombres de formules et
j'ai fait une grande partie de la mise en page en
fonction de mes connaissances.

Je reprends donc mon problème.

J'aimerais si possible que lorsque je sélectionne une
cellule ( en cliquant ou en me déplacant dessus) afficher
des infos contenues dans un autre fichier excel ou dans
le même sur une autre feuille.

Je sélectionne une cellule de la colonne B de la feuille
1 par exemple à partir de la ligne 7 et je vois
apparaitre (dans un Userform? ) toutes les infos
concernant ce cheval si le cheval est trouvé dans la base
si non il affiche cheval inconnu. Ce fichier (si on prend
la solution du fichier) sera enregistré dans le
Répertoire Mes Documents Sous Répertoire Equitation.
Le fichier Base chevaux (ou la feuille) aura la structure
suivante:
Colonne A Cheval
Colonne B Sexe
Colonne C Robe
Colonne B Age
Colonne C Race
Colonne D Gains
Colonne E Naisseur
Colonne F Propriétaire
Colonne G Père
Colonne H Race père
Colonne I Mère
Colonne J Race mère
Colonne K Père de la Mère
Colonne L Race père de mère
Colonne M Département naissance

Dès que je changerais de colonne (sans avoir de
validation à faire) les infos "disparaitront".

Mes faibles connaisances en VBA ne me permettent pas de
faire ça.

J'essayerais d'apter la solution que vous voudrez bien me
donner pour la colonne cavaliers et me propose d'envoyer
le fichier à toute personne désirant m'aider

D'avance Merci
-----Message d'origine-----
dont acte,
Cependant, les forums sont fait pour aider ceux qui
s'aident eux-même

d'abord. Ca commence par formuler correctement sa
question. Si tu vas

lire la page connexion d'excelabo, tu comprendras
pourquoi les fichiers

joints sont vraiment la solution de facilité (au moins
c'est ce que

crois celui qui l'envoie) et pourquoi on n'en veut pas.
Si tu avais pris

la peine d'expliquer ton problème avec des mots, sois
sur que plus de

"pros" comme tu dis (dont Jean pascal et laurent font
tout à fait partie

entre nous soit dit) se seraient penchés sur ton pb.
Là,


avec ta
démarche et le ton que tu as adopté jusqu'à ton dernier
post exclu, les

probabilités pour qu'on ait envie de t'aider sont
faibles. Il n'est pas

interdit d'envoyer des fichiers en bal perso une fois
qu'un contributeur

du forum, se penchant sur ton pb t'en fait la demande
(pas avant). Mais

la démarche minimum qui est demandée c'est d'expliquer
en quelques mots

ou réside le pb à résoudre. Tu imagines si chacun
postait un mail avec

dans l'en tête "pb excel" ou "pb de macro"
ou "userform"


voire
"classeur" et un fichier joint pour expliquer le pb ???
L'intérêt d'un

forum c'est que tout le monde puisse lire les questions
et profite des

réponses. S'il faut aller pour chaque question
télécharger un fichier,

l'ouvrir ... nul doute que le forum ne devienne vite
sacrément moins

réactif. Si tu n'as trouvé d'aide sur aucun des
nombreux


forums que tu
dis avoir utilisé c'est quand même probablement que le
pb vient de la

façon dont le pb est posé non ? Si c'était un truc
impossible à faire,

genre avoir plus de 256 colonnes, sur que la réponse tu
l'aurais déjà eue...

rien ne t'empêche de reprendre à 0 et d'expliquer ici
ce


qui coince et
en quoi les soluces proposées ne conviennent pas. A toi
de voir



Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 15/07/2004 12:20:
Bonjour Misange

Très loin de mois l'idée de considérer que c'est une
obligation de me répondre ni de faire faire mon
boulot



par quelqu'un. Je suis tout simplement un passionné
d'Excel (mais n'ayant pas vos connaissance) et
d'Equitation. Je juge et chronomètre régulièrement
des



concours de saut d'obastacle bénévolement et j'essaye
de


me "monter" un programme sous Excel pour m'aider
grace



à
votre aide à tous. Je suis d'ailleurs tout à fait
pret



à
envoyer le fichier une fois fini à tous ceux qui m'en
feront la demande pour peux qu'ils participent au
projet


d'une manière ou d'une autre.

Certes j'ai posté un message sur plusieurs forums
pour



essayer de trouver le maximum de personnes pouvant
m'aider et me permettre de joindre deux fichiers qui
me


permettent d'expliquer plus clairement ma demande.

Je sais très bien qu'il s'agit de bénévoles que je
n'ai


d'ailleurs pas manqué de remercier (Désolé si j'ai
oublié


quelqu'un) et qu'il ne s'agit pas de salarié de
Microsoft.



Je ne rale pas du tout et fréquente d'ailleurs
régilièrement ton site. Lorsque je parlais de "pro"
je



l'entendais pas du tout en tant que professionnels
mais


en tant que personnes ayant des connaisance pointues.

En espérant que vous comprendrez ma démarche

Merci à tous ceux qui m'ont aidé

-----Message d'origine-----
Tu manques pas d'air quand même...
Tu as l'air de considérer qu'ici c'est une obligation
de




te répondre et

de faire ton boulot. Tu vas sur un autre forum qui


n'arrive pas à te

fournir ta réponse. Tu déboules ici en demandant aux


BENEVOLES de ce

forum (ce ne sont pas des employés de microsoft comme
tu




as l'air de le

considérer) de se démm... pour aller récupérer ton


problème parce que

toi tu sais pas comment l'expliquer. Deux personnes
se





décarcassent pour

t'aider, te font même un exemple qu'elles t'envoient


dans ta bal (c'est

loin d'être la règle !) et tu rales encore parce que
ce




n'est pas pile

poil ce que tu veux. Non content de cela, tu reviens
à





la charge en

réclamant des pros !!! ben vas donc les chercher les


pros. Là où ils

sont : dans des boites d'informatique probablement.
Mais




apprête toi à

les payer convenablement.
grrrr

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

le 15/07/2004 09:54:

Bonjour le forum
J'ai bien reçu ta proposition graphiquement une dès



plus

aboutie mais j'attends toujours les "pro".
Merci


-----Message d'origine-----
salut Nicolas,

dans le fichier que je t'ai envoye tout a l'heure,




l'as

tu recu ? tu peux modifier les procedures
Private Sub Worksheet_SelectionChange(ByVal Target
As





Range) en ajoutant une ligne pour que le Userform
disparaisse des que tu cliques sur une cellule hors
colonne B (ou vide) :

If Target.Column <> 2 Or Target.Row < 7 Or




Target.Value

= "" Then
UserForm1.Hide
Exit Sub: End If

En ce qui concerne la possibilite de travailler au
clavier sur une feuille quand un UserForm est
affiche .... lance un appel aux pros de chez Pro
(attention, un jour de fete, ca doit banquer ;-)))

bon courage




-----Message d'origine-----
Merci Laurent

Fichier bien reçu et testé Cette solution ne me


satisfait


qu'à 99,9% . En effet elle est assez lourde
puisque








pour


sortir du userform il faut cliquer sur masquer ou
sur







la


croix.
J'aurais souhaité que le Userform
soit "transparent"






c'est à dire que pour le masquer il suffise de





déplacer

le curseur par les touches de tabulations par
exemple







ou


en tapant sur les flèches de déplacement du
curseur.







Pour moi le bouton Masquer n'a qu'une utilité
limitée.






Nouvelle version du fichier corrigé accessible à:
Merci




-----Message d'origine-----
Bonjour, dans ta boîte,
je t'ai envoyé ton fichier modifié avec un
userform








qui


fera ce que tu


demandes.
Amicalement
Sitting Hoax
"nicolas65"
a








écrit dans le message de


news:2b9a501c46921$38e426d0$
Bonjour,

Y aurait-il parmi les grands spécialistes d'Excel
quelqu'un qui aurait la solution à mon problème?
Ne pouvant pas mettre de fichier sur le forum
merci








de

regarder le lien
http://www.excel-
downloads.com/html/French/forum/messages/1_101898_
1








01

89

8


..


h


tm
pour avoir tous les détails.

Merci


.



.



.


.



.



.











Avatar
nicolas 65
-----Message d'origine-----
Nicolas, (devenu anonyme ?)
Envoie trop rapide


Je sélectionne une cellule de la colonne B de la
feuille


1 par exemple à partir de la ligne 7 et je vois
apparaitre (dans un Userform? ) toutes les infos
concernant ce cheval si le cheval est trouvé dans la
base

si non il affiche cheval inconnu.


Ca, tu dois l'avoir sur les fichiers proposes par JP,
Laurent ou le mien, non ?


Oui effectivement mais je reprenais l'explication complète

Dès que je changerais de colonne (sans avoir de
validation à faire) les infos "disparaitront".


La solution que je t'ai donnee ne te convient pas ?
Pas réussie à mettre en place

J'essayeais d'apter la solution que vous voudrez bien
me


donner pour la colonne cavaliers


C'est nouveau ca, what is the matter ?
Je voulais montrez à misange que je ne vous solliciter

pas pour faire tout le travail

Quant au mot "PRO", je suis desole d'avoir declenche ce
feu d'artifice en le lachant imrudemment ici (c'etait
sous forme de boutade), il concernait le probleme de
garder les touches Tab, fleches de direction actives
lorsque'un UserForm est affiche.

bon courage,


J-Dan

.




Avatar
nicolas 65
Bonjour michdenis,

Tout ceci me parait bien compliqué. Puis je t'envoyer le
fichier zippé. J'étudierais l'exemple.
Je te préciserais à ce moment là le chemin.
Je préfère bien sur la solution du formulaire à condition
comme je l'ai indiqué qu'il puisse disparaitre dès que je
change de cellule et sans avoir à cliqué sur un bouton
fermer ou sur une croix
Merci

-----Message d'origine-----
Bonjour Nicolas65,

Tu peux t'amuser avec ceci :

Tout ce qui suit est à copier dans la feuille module où
l'action se déroule. Un clic droit sur l'onglet de la

feuille /
visualiser le code / et dans la feuille blanche ceci :

3 événements de la feuille sont utilisés

A ) Worksheet_Activate
- Ouverture d'une connection entre le fichier
actuel et ta base de données

- charge le recordset de ta base de données en
mémoire


B ) Worksheet_SelectionChange
-A chaque fois que tu cliqueras dans la colonne
B:B, le contenu de la cellule sélectionnée sera

recherchée dans
le recordset en mémoire, si l'information s'y trouve,
(j'ai supposé que tu n'avais pas de doublons sur les noms

des
cheveaux dans ta base de données) , l'information sera
copiée à la suite des données de la feuil2 de ton

classeur.
Si tu préfères le tout dans un formulaire :
Userform1.Show
For A = 1 To Nb
'En prenant pour acquis que tu as autant
de textbox que de champs dans ta base de données

'le nom de tes textbox sont de 1 ... au
nombre de champs

Controls("Textbox" & cstr(a) = Rst(A - 1)
Next

C )Worksheet_Deactivate
- Vide le recordset


D ) Tu dois ajouter à ton projet la bibliothèque
suivante :

"Microsoft Activex Data Object 2.0 Librairy"


'Déclaration Variable : Haut du module Feuille
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
'--------------------------------------------
Private Sub Worksheet_Activate()

Dim Requete As String, NomFeuille As String
Dim file As String, Chemin As String

'*********Variable à définir**************

NomFeuille = "Feuil1" 'A déterminer
Chemin = "C:excel" 'à déterminer
file = "Données"

'*****************************************
'La requête qui sera exécutée ' `a déterminer
Requete = "SELECT * From [" & NomFeuille & "$] "

'établir la connection avec le fichier...
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & file & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

'Ouverture d'un recordset
Rst.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic


End Sub
'--------------------------------------------
Private Sub Worksheet_Deactivate()

Rst.Close
Set Rst = Nothing

End Sub
'--------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)


Dim A As Integer, Nb As Integer, Rg As Range

If Target.Column = Range("B1").Column Then
If Target.Cells.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub

'Titre2 = Nom De l'étiquette Colonne B de ta base de
données

Rst.Find "Titre2='" & Target & "'"
If Rst.EOF Then
MsgBox "Aucun cheval trouvé!"
Rst.MoveFirst
Else
'déterminer où l'information sera copiée
With Worksheets("Feuil2")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range
("A65356").End(xlUp).Row)(2)

End If
End With
'déterminer le nombre de champs du recordset
Nb = Rst.Fields.Count
For A = 1 To Nb
Rg.Offset(, A - 1) = Rst(A - 1)
Next
End If

End If
'--------------------------------------------


Salutations!








"nicolas65" a
écrit dans le message de

news:2d96701c46a6d$2176cd70$
Re(Bonjour)

Veuillez excuser le doublon mais le message est partit
trop vite. Je le reprend donc en entier.

Je n'ai pas demandé de me faire intégralement le
programme. J'ai adapté un certains nombres de formules et
j'ai fait une grande partie de la mise en page en
fonction de mes connaissances.

Je reprends donc mon problème.

J'aimerais si possible que lorsque je sélectionne une
cellule ( en cliquant ou en me déplacant dessus) afficher
des infos contenues dans un autre fichier excel ou dans
le même sur une autre feuille.

Je sélectionne une cellule de la colonne B de la feuille
1 par exemple à partir de la ligne 7 et je vois
apparaitre (dans un Userform? ) toutes les infos
concernant ce cheval si le cheval est trouvé dans la base
si non il affiche cheval inconnu. Ce fichier (si on prend
la solution du fichier) sera enregistré dans le
Répertoire Mes Documents Sous Répertoire Equitation.
Le fichier Base chevaux (ou la feuille) aura la structure
suivante:
Colonne A Cheval
Colonne B Sexe
Colonne C Robe
Colonne B Age
Colonne C Race
Colonne D Gains
Colonne E Naisseur
Colonne F Propriétaire
Colonne G Père
Colonne H Race père
Colonne I Mère
Colonne J Race mère
Colonne K Père de la Mère
Colonne L Race père de mère
Colonne M Département naissance

Dès que je changerais de colonne (sans avoir de
validation à faire) les infos "disparaitront".

Mes faibles connaisances en VBA ne me permettent pas de
faire ça.

J'essayerais d'apter la solution que vous voudrez bien me
donner pour la colonne cavaliers et me propose d'envoyer
le fichier à toute personne désirant m'aider

D'avance Merci
-----Message d'origine-----
dont acte,
Cependant, les forums sont fait pour aider ceux qui
s'aident eux-même

d'abord. Ca commence par formuler correctement sa
question. Si tu vas

lire la page connexion d'excelabo, tu comprendras
pourquoi les fichiers

joints sont vraiment la solution de facilité (au moins
c'est ce que

crois celui qui l'envoie) et pourquoi on n'en veut pas.
Si tu avais pris

la peine d'expliquer ton problème avec des mots, sois
sur que plus de

"pros" comme tu dis (dont Jean pascal et laurent font
tout à fait partie

entre nous soit dit) se seraient penchés sur ton pb.
Là,


avec ta
démarche et le ton que tu as adopté jusqu'à ton dernier
post exclu, les

probabilités pour qu'on ait envie de t'aider sont
faibles. Il n'est pas

interdit d'envoyer des fichiers en bal perso une fois
qu'un contributeur

du forum, se penchant sur ton pb t'en fait la demande
(pas avant). Mais

la démarche minimum qui est demandée c'est d'expliquer
en quelques mots

ou réside le pb à résoudre. Tu imagines si chacun
postait un mail avec

dans l'en tête "pb excel" ou "pb de macro"
ou "userform"


voire
"classeur" et un fichier joint pour expliquer le pb ???
L'intérêt d'un

forum c'est que tout le monde puisse lire les questions
et profite des

réponses. S'il faut aller pour chaque question
télécharger un fichier,

l'ouvrir ... nul doute que le forum ne devienne vite
sacrément moins

réactif. Si tu n'as trouvé d'aide sur aucun des
nombreux


forums que tu
dis avoir utilisé c'est quand même probablement que le
pb vient de la

façon dont le pb est posé non ? Si c'était un truc
impossible à faire,

genre avoir plus de 256 colonnes, sur que la réponse tu
l'aurais déjà eue...

rien ne t'empêche de reprendre à 0 et d'expliquer ici
ce


qui coince et
en quoi les soluces proposées ne conviennent pas. A toi
de voir



Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 15/07/2004 12:20:
Bonjour Misange

Très loin de mois l'idée de considérer que c'est une
obligation de me répondre ni de faire faire mon
boulot



par quelqu'un. Je suis tout simplement un passionné
d'Excel (mais n'ayant pas vos connaissance) et
d'Equitation. Je juge et chronomètre régulièrement
des



concours de saut d'obastacle bénévolement et j'essaye
de


me "monter" un programme sous Excel pour m'aider
grace



à
votre aide à tous. Je suis d'ailleurs tout à fait
pret



à
envoyer le fichier une fois fini à tous ceux qui m'en
feront la demande pour peux qu'ils participent au
projet


d'une manière ou d'une autre.

Certes j'ai posté un message sur plusieurs forums
pour



essayer de trouver le maximum de personnes pouvant
m'aider et me permettre de joindre deux fichiers qui
me


permettent d'expliquer plus clairement ma demande.

Je sais très bien qu'il s'agit de bénévoles que je
n'ai


d'ailleurs pas manqué de remercier (Désolé si j'ai
oublié


quelqu'un) et qu'il ne s'agit pas de salarié de
Microsoft.



Je ne rale pas du tout et fréquente d'ailleurs
régilièrement ton site. Lorsque je parlais de "pro"
je



l'entendais pas du tout en tant que professionnels
mais


en tant que personnes ayant des connaisance pointues.

En espérant que vous comprendrez ma démarche

Merci à tous ceux qui m'ont aidé

-----Message d'origine-----
Tu manques pas d'air quand même...
Tu as l'air de considérer qu'ici c'est une obligation
de




te répondre et

de faire ton boulot. Tu vas sur un autre forum qui


n'arrive pas à te

fournir ta réponse. Tu déboules ici en demandant aux


BENEVOLES de ce

forum (ce ne sont pas des employés de microsoft comme
tu




as l'air de le

considérer) de se démm... pour aller récupérer ton


problème parce que

toi tu sais pas comment l'expliquer. Deux personnes
se





décarcassent pour

t'aider, te font même un exemple qu'elles t'envoient


dans ta bal (c'est

loin d'être la règle !) et tu rales encore parce que
ce




n'est pas pile

poil ce que tu veux. Non content de cela, tu reviens
à





la charge en

réclamant des pros !!! ben vas donc les chercher les


pros. Là où ils

sont : dans des boites d'informatique probablement.
Mais




apprête toi à

les payer convenablement.
grrrr

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

le 15/07/2004 09:54:

Bonjour le forum
J'ai bien reçu ta proposition graphiquement une dès



plus

aboutie mais j'attends toujours les "pro".
Merci


-----Message d'origine-----
salut Nicolas,

dans le fichier que je t'ai envoye tout a l'heure,




l'as

tu recu ? tu peux modifier les procedures
Private Sub Worksheet_SelectionChange(ByVal Target
As





Range) en ajoutant une ligne pour que le Userform
disparaisse des que tu cliques sur une cellule hors
colonne B (ou vide) :

If Target.Column <> 2 Or Target.Row < 7 Or




Target.Value

= "" Then
UserForm1.Hide
Exit Sub: End If

En ce qui concerne la possibilite de travailler au
clavier sur une feuille quand un UserForm est
affiche .... lance un appel aux pros de chez Pro
(attention, un jour de fete, ca doit banquer ;-)))

bon courage




-----Message d'origine-----
Merci Laurent

Fichier bien reçu et testé Cette solution ne me


satisfait


qu'à 99,9% . En effet elle est assez lourde
puisque








pour


sortir du userform il faut cliquer sur masquer ou
sur







la


croix.
J'aurais souhaité que le Userform
soit "transparent"






c'est à dire que pour le masquer il suffise de





déplacer

le curseur par les touches de tabulations par
exemple







ou


en tapant sur les flèches de déplacement du
curseur.







Pour moi le bouton Masquer n'a qu'une utilité
limitée.






Nouvelle version du fichier corrigé accessible à:
Merci




-----Message d'origine-----
Bonjour, dans ta boîte,
je t'ai envoyé ton fichier modifié avec un
userform








qui


fera ce que tu


demandes.
Amicalement
Sitting Hoax
"nicolas65"
a








écrit dans le message de


news:2b9a501c46921$38e426d0$
Bonjour,

Y aurait-il parmi les grands spécialistes d'Excel
quelqu'un qui aurait la solution à mon problème?
Ne pouvant pas mettre de fichier sur le forum
merci








de

regarder le lien
http://www.excel-
downloads.com/html/French/forum/messages/1_101898
_









1
01

89

8


..


h


tm
pour avoir tous les détails.

Merci


.



.



.


.



.



.





.











Avatar
michdenis
Bonjour Nicolas65,

De vouloir faire intervenir des informations de fichiers fermés, c'est toujours un peu plus compliqué.. mais je crois
t'avoir donné suffisamment d'informations pour que tu puisses faire à ton tour un bout de chemin. Si tu as besoin
d'autres informations spécifiques, le forum est toujours là. Moi, je ne peux me permettre de faire ce que tu demandes !


Salutations!






"nicolas 65" a écrit dans le message de
news:2d78901c46a74$b0f19730$
Bonjour michdenis,

Tout ceci me parait bien compliqué. Puis je t'envoyer le
fichier zippé. J'étudierais l'exemple.
Je te préciserais à ce moment là le chemin.
Je préfère bien sur la solution du formulaire à condition
comme je l'ai indiqué qu'il puisse disparaitre dès que je
change de cellule et sans avoir à cliqué sur un bouton
fermer ou sur une croix
Merci

-----Message d'origine-----
Bonjour Nicolas65,

Tu peux t'amuser avec ceci :

Tout ce qui suit est à copier dans la feuille module où
l'action se déroule. Un clic droit sur l'onglet de la

feuille /
visualiser le code / et dans la feuille blanche ceci :

3 événements de la feuille sont utilisés

A ) Worksheet_Activate
- Ouverture d'une connection entre le fichier
actuel et ta base de données

- charge le recordset de ta base de données en
mémoire


B ) Worksheet_SelectionChange
-A chaque fois que tu cliqueras dans la colonne
B:B, le contenu de la cellule sélectionnée sera

recherchée dans
le recordset en mémoire, si l'information s'y trouve,
(j'ai supposé que tu n'avais pas de doublons sur les noms

des
cheveaux dans ta base de données) , l'information sera
copiée à la suite des données de la feuil2 de ton

classeur.
Si tu préfères le tout dans un formulaire :
Userform1.Show
For A = 1 To Nb
'En prenant pour acquis que tu as autant
de textbox que de champs dans ta base de données

'le nom de tes textbox sont de 1 ... au
nombre de champs

Controls("Textbox" & cstr(a) = Rst(A - 1)
Next

C )Worksheet_Deactivate
- Vide le recordset


D ) Tu dois ajouter à ton projet la bibliothèque
suivante :

"Microsoft Activex Data Object 2.0 Librairy"


'Déclaration Variable : Haut du module Feuille
Dim Conn As ADODB.Connection, Rst As New ADODB.Recordset
'--------------------------------------------
Private Sub Worksheet_Activate()

Dim Requete As String, NomFeuille As String
Dim file As String, Chemin As String

'*********Variable à définir**************

NomFeuille = "Feuil1" 'A déterminer
Chemin = "C:excel" 'à déterminer
file = "Données"

'*****************************************
'La requête qui sera exécutée ' `a déterminer
Requete = "SELECT * From [" & NomFeuille & "$] "

'établir la connection avec le fichier...
Set Conn = New ADODB.Connection
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Chemin & file & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES;"""

'Ouverture d'un recordset
Rst.Open Requete, Conn, adOpenForwardOnly,
adLockOptimistic


End Sub
'--------------------------------------------
Private Sub Worksheet_Deactivate()

Rst.Close
Set Rst = Nothing

End Sub
'--------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)


Dim A As Integer, Nb As Integer, Rg As Range

If Target.Column = Range("B1").Column Then
If Target.Cells.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub

'Titre2 = Nom De l'étiquette Colonne B de ta base de
données

Rst.Find "Titre2='" & Target & "'"
If Rst.EOF Then
MsgBox "Aucun cheval trouvé!"
Rst.MoveFirst
Else
'déterminer où l'information sera copiée
With Worksheets("Feuil2")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range
("A65356").End(xlUp).Row)(2)

End If
End With
'déterminer le nombre de champs du recordset
Nb = Rst.Fields.Count
For A = 1 To Nb
Rg.Offset(, A - 1) = Rst(A - 1)
Next
End If

End If
'--------------------------------------------


Salutations!








"nicolas65" a
écrit dans le message de

news:2d96701c46a6d$2176cd70$
Re(Bonjour)

Veuillez excuser le doublon mais le message est partit
trop vite. Je le reprend donc en entier.

Je n'ai pas demandé de me faire intégralement le
programme. J'ai adapté un certains nombres de formules et
j'ai fait une grande partie de la mise en page en
fonction de mes connaissances.

Je reprends donc mon problème.

J'aimerais si possible que lorsque je sélectionne une
cellule ( en cliquant ou en me déplacant dessus) afficher
des infos contenues dans un autre fichier excel ou dans
le même sur une autre feuille.

Je sélectionne une cellule de la colonne B de la feuille
1 par exemple à partir de la ligne 7 et je vois
apparaitre (dans un Userform? ) toutes les infos
concernant ce cheval si le cheval est trouvé dans la base
si non il affiche cheval inconnu. Ce fichier (si on prend
la solution du fichier) sera enregistré dans le
Répertoire Mes Documents Sous Répertoire Equitation.
Le fichier Base chevaux (ou la feuille) aura la structure
suivante:
Colonne A Cheval
Colonne B Sexe
Colonne C Robe
Colonne B Age
Colonne C Race
Colonne D Gains
Colonne E Naisseur
Colonne F Propriétaire
Colonne G Père
Colonne H Race père
Colonne I Mère
Colonne J Race mère
Colonne K Père de la Mère
Colonne L Race père de mère
Colonne M Département naissance

Dès que je changerais de colonne (sans avoir de
validation à faire) les infos "disparaitront".

Mes faibles connaisances en VBA ne me permettent pas de
faire ça.

J'essayerais d'apter la solution que vous voudrez bien me
donner pour la colonne cavaliers et me propose d'envoyer
le fichier à toute personne désirant m'aider

D'avance Merci
-----Message d'origine-----
dont acte,
Cependant, les forums sont fait pour aider ceux qui
s'aident eux-même

d'abord. Ca commence par formuler correctement sa
question. Si tu vas

lire la page connexion d'excelabo, tu comprendras
pourquoi les fichiers

joints sont vraiment la solution de facilité (au moins
c'est ce que

crois celui qui l'envoie) et pourquoi on n'en veut pas.
Si tu avais pris

la peine d'expliquer ton problème avec des mots, sois
sur que plus de

"pros" comme tu dis (dont Jean pascal et laurent font
tout à fait partie

entre nous soit dit) se seraient penchés sur ton pb.
Là,


avec ta
démarche et le ton que tu as adopté jusqu'à ton dernier
post exclu, les

probabilités pour qu'on ait envie de t'aider sont
faibles. Il n'est pas

interdit d'envoyer des fichiers en bal perso une fois
qu'un contributeur

du forum, se penchant sur ton pb t'en fait la demande
(pas avant). Mais

la démarche minimum qui est demandée c'est d'expliquer
en quelques mots

ou réside le pb à résoudre. Tu imagines si chacun
postait un mail avec

dans l'en tête "pb excel" ou "pb de macro"
ou "userform"


voire
"classeur" et un fichier joint pour expliquer le pb ???
L'intérêt d'un

forum c'est que tout le monde puisse lire les questions
et profite des

réponses. S'il faut aller pour chaque question
télécharger un fichier,

l'ouvrir ... nul doute que le forum ne devienne vite
sacrément moins

réactif. Si tu n'as trouvé d'aide sur aucun des
nombreux


forums que tu
dis avoir utilisé c'est quand même probablement que le
pb vient de la

façon dont le pb est posé non ? Si c'était un truc
impossible à faire,

genre avoir plus de 256 colonnes, sur que la réponse tu
l'aurais déjà eue...

rien ne t'empêche de reprendre à 0 et d'expliquer ici
ce


qui coince et
en quoi les soluces proposées ne conviennent pas. A toi
de voir



Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 15/07/2004 12:20:
Bonjour Misange

Très loin de mois l'idée de considérer que c'est une
obligation de me répondre ni de faire faire mon
boulot



par quelqu'un. Je suis tout simplement un passionné
d'Excel (mais n'ayant pas vos connaissance) et
d'Equitation. Je juge et chronomètre régulièrement
des



concours de saut d'obastacle bénévolement et j'essaye
de


me "monter" un programme sous Excel pour m'aider
grace



à
votre aide à tous. Je suis d'ailleurs tout à fait
pret



à
envoyer le fichier une fois fini à tous ceux qui m'en
feront la demande pour peux qu'ils participent au
projet


d'une manière ou d'une autre.

Certes j'ai posté un message sur plusieurs forums
pour



essayer de trouver le maximum de personnes pouvant
m'aider et me permettre de joindre deux fichiers qui
me


permettent d'expliquer plus clairement ma demande.

Je sais très bien qu'il s'agit de bénévoles que je
n'ai


d'ailleurs pas manqué de remercier (Désolé si j'ai
oublié


quelqu'un) et qu'il ne s'agit pas de salarié de
Microsoft.



Je ne rale pas du tout et fréquente d'ailleurs
régilièrement ton site. Lorsque je parlais de "pro"
je



l'entendais pas du tout en tant que professionnels
mais


en tant que personnes ayant des connaisance pointues.

En espérant que vous comprendrez ma démarche

Merci à tous ceux qui m'ont aidé

-----Message d'origine-----
Tu manques pas d'air quand même...
Tu as l'air de considérer qu'ici c'est une obligation
de




te répondre et

de faire ton boulot. Tu vas sur un autre forum qui


n'arrive pas à te

fournir ta réponse. Tu déboules ici en demandant aux


BENEVOLES de ce

forum (ce ne sont pas des employés de microsoft comme
tu




as l'air de le

considérer) de se démm... pour aller récupérer ton


problème parce que

toi tu sais pas comment l'expliquer. Deux personnes
se





décarcassent pour

t'aider, te font même un exemple qu'elles t'envoient


dans ta bal (c'est

loin d'être la règle !) et tu rales encore parce que
ce




n'est pas pile

poil ce que tu veux. Non content de cela, tu reviens
à





la charge en

réclamant des pros !!! ben vas donc les chercher les


pros. Là où ils

sont : dans des boites d'informatique probablement.
Mais




apprête toi à

les payer convenablement.
grrrr

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

le 15/07/2004 09:54:

Bonjour le forum
J'ai bien reçu ta proposition graphiquement une dès



plus

aboutie mais j'attends toujours les "pro".
Merci


-----Message d'origine-----
salut Nicolas,

dans le fichier que je t'ai envoye tout a l'heure,




l'as

tu recu ? tu peux modifier les procedures
Private Sub Worksheet_SelectionChange(ByVal Target
As





Range) en ajoutant une ligne pour que le Userform
disparaisse des que tu cliques sur une cellule hors
colonne B (ou vide) :

If Target.Column <> 2 Or Target.Row < 7 Or




Target.Value

= "" Then
UserForm1.Hide
Exit Sub: End If

En ce qui concerne la possibilite de travailler au
clavier sur une feuille quand un UserForm est
affiche .... lance un appel aux pros de chez Pro
(attention, un jour de fete, ca doit banquer ;-)))

bon courage




-----Message d'origine-----
Merci Laurent

Fichier bien reçu et testé Cette solution ne me


satisfait


qu'à 99,9% . En effet elle est assez lourde
puisque








pour


sortir du userform il faut cliquer sur masquer ou
sur







la


croix.
J'aurais souhaité que le Userform
soit "transparent"






c'est à dire que pour le masquer il suffise de





déplacer

le curseur par les touches de tabulations par
exemple







ou


en tapant sur les flèches de déplacement du
curseur.







Pour moi le bouton Masquer n'a qu'une utilité
limitée.






Nouvelle version du fichier corrigé accessible à:
Merci




-----Message d'origine-----
Bonjour, dans ta boîte,
je t'ai envoyé ton fichier modifié avec un
userform








qui


fera ce que tu


demandes.
Amicalement
Sitting Hoax
"nicolas65"
a








écrit dans le message de


news:2b9a501c46921$38e426d0$
Bonjour,

Y aurait-il parmi les grands spécialistes d'Excel
quelqu'un qui aurait la solution à mon problème?
Ne pouvant pas mettre de fichier sur le forum
merci








de

regarder le lien
http://www.excel-
downloads.com/html/French/forum/messages/1_101898
_









1
01

89

8


..


h


tm
pour avoir tous les détails.

Merci


.



.



.


.



.



.





.











Avatar
J-Dan
Dès que je changerais de colonne (sans avoir de
validation à faire) les infos "disparaitront".


La solution que je t'ai donnee ne te convient pas ?
Pas réussie à mettre en place



Dans les modules des 3 feuilles (Epreuve1, 1bis, 2 et 3)
tu inseres simplement "UserForm1.Hide" a l'endroit
indique ci-dessous :

Private Sub Worksheet_SelectionChange(ByVal Target As
Range)
......
If Target.Column <> 2 Or Target.Row < 7 Or _
Target.Value = "" Then
UserForm1.Hide
Exit Sub: End If
......



Avatar
J-Dan
bonjour Denis,

j'ai teste ta solution et 2 points restent obscurs :
- les noms comportant une apostrophe generent une erreur
"Erreur 3001 - Les arguments ..... ou semblent en
conflit..."
- il semble qu'il y ait un "effet latence", une requete
peut ne rien renvoyer de facon aleatoire "aucun
cheval .." alors que repetee quelques secondes plus tard,
ca marche.

Precision (pour Nicolas ;-))) :

remplacer
'Titre2 = Nom De l'étiquette Colonne B de ta base de
données
Rst.Find "Titre2='" & Target & "'"
par
'Titre2 = Nom De l'étiquette Colonne A de ta base de
données
Rst.Find "cheval='" & Target & "'"


-----Message d'origine-----
Bonjour Nicolas65,

De vouloir faire intervenir des informations de fichiers
fermés, c'est toujours un peu plus compliqué.. mais je

crois
t'avoir donné suffisamment d'informations pour que tu
puisses faire à ton tour un bout de chemin. Si tu as

besoin
d'autres informations spécifiques, le forum est toujours
là. Moi, je ne peux me permettre de faire ce que tu

demandes !

Avatar
Philippe.R
J'accepte avec le plus grand plaisir Misange
;o)))
--
Amicales Salutations

"Misange" a écrit dans le message de
news:%23$
Ben heureusement qu'il y en a d'autres qui font des ficelles rien que
pour dire qu'ils sont contents ! ça compense :-)
tien merci Philippe au fait (je vais pas rater cette occasion quand
même, ce serait gacher)

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


le 15/07/2004 12:00:
Ahhhh ! ça fait du bien des fois, un bon coup de gueule !
Hein Flo !?!




Avatar
michdenis
Bonjour J-Dan,

"2 points restent obscurs :"

APOSTROPHE : Il n'y a rien de nouveau à l'horizon, cela est documenté. Il y a une parade simple dans ces cas de figures
que je te soupçonne de la connaître .... Effectivement je me suis pas senti obligé lorsque j'ai écrit cette sub de
tester tous les cas de figures ... et pour l'information de Nicolas 65, voilà la ligne de code qu'il devra changer le
cas échéant :

Dans la procédure :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Adopte plutôt cette syntaxe, que tes noms de chevaux aient ou non une apostrophe, ça marcheras.
Rst.Find "Titre2 = '" & Replace(Target, "'", "''") & "'"

Titre2 étant le nom de l'étiquette de colonne B de ta base de données.


EFFET DE LATENCE :

J'ai un fichier exemple, et j'ai obtenu le bon résultat 15 fois d'affiler ! Sans aucun problème !

Serais-tu victime d'un micro climant ????????????????????????????????????


Ceci étant dit, toujours pour le bénéfice de Nicolas,

tu devrais utiliser ce qui suit plutôt que le code de la procédure intiale. La raison, c'est si tu désires ouvrir ta
base de données suite à une première exécution du code, tu dois avoir préalablement fermé la connection ouverte par le
code.Cette connection est représentée par la variable "Conn ". Dans mon message précédent, je n'ai pas fermé la
connection "Conn.Close" ... cela rend temporairement l'ouverture de la base de données impossible. Et pour fermer cette
connection, tu dois simplement sélectionner une autre feuille que celle où se retrouve tes données.

'---------------------------
Private Sub Worksheet_Deactivate()
Rst.Close
Set Rst = Nothing
Conn.Close
Set Conn = Nothing
End Sub
'---------------------------

Pour ceux que la chose intéresse, j'ai un fichier exemple pour ceux qui le désirent !


Salutations!



"J-Dan" a écrit dans le message de news:2d86001c46a7e$710d3110$
bonjour Denis,

j'ai teste ta solution et 2 points restent obscurs :
- les noms comportant une apostrophe generent une erreur
"Erreur 3001 - Les arguments ..... ou semblent en
conflit..."
- il semble qu'il y ait un "effet latence", une requete
peut ne rien renvoyer de facon aleatoire "aucun
cheval .." alors que repetee quelques secondes plus tard,
ca marche.

Precision (pour Nicolas ;-))) :

remplacer
'Titre2 = Nom De l'étiquette Colonne B de ta base de
données
Rst.Find "Titre2='" & Target & "'"
par
'Titre2 = Nom De l'étiquette Colonne A de ta base de
données
Rst.Find "cheval='" & Target & "'"


-----Message d'origine-----
Bonjour Nicolas65,

De vouloir faire intervenir des informations de fichiers
fermés, c'est toujours un peu plus compliqué.. mais je

crois
t'avoir donné suffisamment d'informations pour que tu
puisses faire à ton tour un bout de chemin. Si tu as

besoin
d'autres informations spécifiques, le forum est toujours
là. Moi, je ne peux me permettre de faire ce que tu

demandes !

Avatar
J-Dan
Denis,

APOSTROPHE :

Il y a une parade simple dans ces cas de figures
que je te soupçonne de la connaître ....


je reclame la presomption d'innocence !! ;-)))

Rst.Find "cheval = '" & Replace(Target, "'", "''") & "'"


OK, impeccable

EFFET DE LATENCE :

J'ai un fichier exemple, et j'ai obtenu le bon résultat
15 fois

d'affiler ! Sans aucun problème !
Serais-tu victime d'un micro climat ????????????


j'crois pas, climat maritime tempere, normal quoi !

j'ai modifie le programme en cherchant les "rejets" :

If Rst.EOF Then
'MsgBox "Aucun cheval trouvé!"
With Worksheets("Feuil2")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65356").End
(xlUp).Row)(2)
End If
Rg = Target
End With
Rst.MoveFirst

et en supprimant la partie report du recordset :

'Else
'............
'Next

puis j'ai cree une macro pour visualiser ces rejets :

Sub TestRejets()
Dim c As Double
Application.ScreenUpdating = False

For i = 1 To 255
c = 7
With Worksheets("Feuil1")
While .Cells(c, 2) <> ""
.Cells(c, 2).Select
c = c + 1
Wend
End With
Worksheets("Feuil2").Columns("A:A").Insert
Shift:=xlToRight
Next
End Sub

resultat, j'obtiens 255 fois la meme liste de 31 noms
sur 83 ! (dans mon post precedent, je croyais que c'etait
aleatoire).
J'ai lance cette macro pusieurs dizaines de fois and same
results
soit quelques milliers de tests.
Autre particularite, si je selectionne individuellement
un nom "rejete"
ca marche parfois.
Je peux t'envoyer le fichier si tu veux.

Ceci dit, je n'ai pas l'intention de te pieger, mais
quand quelque chose m.... sous mon clavier, je suis comme
un pittbull et je ne lache mon PC que quand il a crache
sa substantifique moelle.

Malgre tout, je reste "adLockOptimistic".

bonne nuit a tous


-----Message d'origine-----
Bonjour J-Dan,

"2 points restent obscurs :"

APOSTROPHE : Il n'y a rien de nouveau à l'horizon, cela
est documenté. Il y a une parade simple dans ces cas de

figures
que je te soupçonne de la connaître .... Effectivement
je me suis pas senti obligé lorsque j'ai écrit cette sub

de
tester tous les cas de figures ... et pour l'information
de Nicolas 65, voilà la ligne de code qu'il devra changer

le
cas échéant :

Dans la procédure :
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)


Adopte plutôt cette syntaxe, que tes noms de chevaux
aient ou non une apostrophe, ça marcheras.

Rst.Find "Titre2 = '" & Replace(Target, "'", "''") & "'"

Titre2 étant le nom de l'étiquette de colonne B de ta
base de données.



EFFET DE LATENCE :

J'ai un fichier exemple, et j'ai obtenu le bon résultat
15 fois d'affiler ! Sans aucun problème !


Serais-tu victime d'un micro
climant ????????????????????????????????????



Ceci étant dit, toujours pour le bénéfice de Nicolas,

tu devrais utiliser ce qui suit plutôt que le code de la
procédure intiale. La raison, c'est si tu désires ouvrir

ta
base de données suite à une première exécution du code,
tu dois avoir préalablement fermé la connection ouverte

par le
code.Cette connection est représentée par la
variable "Conn ". Dans mon message précédent, je n'ai pas

fermé la
connection "Conn.Close" ... cela rend temporairement
l'ouverture de la base de données impossible. Et pour

fermer cette
connection, tu dois simplement sélectionner une autre
feuille que celle où se retrouve tes données.


'---------------------------
Private Sub Worksheet_Deactivate()
Rst.Close
Set Rst = Nothing
Conn.Close
Set Conn = Nothing
End Sub
'---------------------------

Pour ceux que la chose intéresse, j'ai un fichier
exemple pour ceux qui le désirent !



Salutations!



"J-Dan" a écrit
dans le message de news:2d86001c46a7e$710d3110

$
bonjour Denis,

j'ai teste ta solution et 2 points restent obscurs :
- les noms comportant une apostrophe generent une
erreur

"Erreur 3001 - Les arguments ..... ou semblent en
conflit..."
- il semble qu'il y ait un "effet latence", une requete
peut ne rien renvoyer de facon aleatoire "aucun
cheval .." alors que repetee quelques secondes plus tard,
ca marche.

Precision (pour Nicolas ;-))) :

remplacer
'Titre2 = Nom De l'étiquette Colonne B de ta base de
données
Rst.Find "Titre2='" & Target & "'"
par
'Titre2 = Nom De l'étiquette Colonne A de ta base de
données
Rst.Find "cheval='" & Target & "'"


-----Message d'origine-----
Bonjour Nicolas65,

De vouloir faire intervenir des informations de fichiers
fermés, c'est toujours un peu plus compliqué.. mais je

crois
t'avoir donné suffisamment d'informations pour que tu
puisses faire à ton tour un bout de chemin. Si tu as

besoin
d'autres informations spécifiques, le forum est toujours
là. Moi, je ne peux me permettre de faire ce que tu

demandes !


.




Avatar
michdenis
Bonjour J-Dan,

"j'ai modifie le programme en cherchant les "rejets" "

Je peux m'expliquer ce que tu attends par "rejets" ?

La base de données source que j'utilise contient des noms de chevaux tous différents. C'est un peu comme si c'était un
champ de clé primaire ...En conséquence, J'ai supposé que le recordset renvoyé ne pouvait pas avoir plus d'un
enregistrement au nom du cheval inscrit en colonne B:B. ... d'où l'utilisation de la méthode "Find". Si le champ de la
base de données contient plusieurs fois le même nom de cheval, il faudrait alors utiliser la méthode "sort" du recordset
afin d'appliquer un filtre sur ce dernier pour en extraire tous les enregistrements répondant au critère...

Je ne comprends pas réellement les modifications que tu apportent à la procédure et pour cause :

Dans l'événement "Activate" de la feuille, j'ouvre la connection avec la base de données et extrait tous les
enregistrements de la base de données..Objectif recherché : augmenter la vitesse de traitement .....En conséquence, tout
au long de la procédure, le recordset "Rst" contient toujours et en tout moment l'ensemble des enregistrements .... la
méthode find permet de déplacer le curseur du recordset sur l'enregistrement désiré (trouvé) (en supposant qu'il n'y ait
que des noms uniques de cheval dans la colonne visée par la condition de la méthode find). Lorsqu'il trouve une
correspondance avec le critère imposé, je fais seulement lire les données que contient cet enregistrement dans chacun
des champs. Que la méthode "Find" trouve une correspondance ou pas, la taille du recordset n'a pas changé et ne changera
pas. Cependant, dans la procédure, comme j'ai utilisé :"adOpenForwardOnly" , il faut remettre à chaque fois (nouvelle
recherche), le curseur sur le premier enregistrement pour que la recherche puisse aboutir ...car ce type de curseur
"adOpenForwardOnly" permet des déplacements du début du recordset vers la fin du recordset (sens unique)....D'ailleurs
si tu essayais d'extraire le nombre d'enregistrements du recordset par une ligne du type : Msgbox Rst.RecordCount , tu
obtiendrais à tout coup le résultat -1 à cause justement du type de curseur utilisé....En contre partie, le recordset
retourné par ce type de curseur est plus "léger" de tous.

En espérant que ce soit plus clair !

N.B. Ces discussions autour de ADO, SQL ... sort quelque peu du décor habituel du thème de ce groupe de discussions. La
procédure soumise n'était qu'un exemple, une façon de faire...et comme tu le dis toi-même.. si tu es un pitbull ... peut
être arriveras-tu à trouver un "os" plus gros et meilleur que celui que je t'ai donné ! ;-)


Salutations!







"J-Dan" a écrit dans le message de news:2df5a01c46ab5$3211d1f0$
Denis,

APOSTROPHE :

Il y a une parade simple dans ces cas de figures
que je te soupçonne de la connaître ....


je reclame la presomption d'innocence !! ;-)))

Rst.Find "cheval = '" & Replace(Target, "'", "''") & "'"


OK, impeccable

EFFET DE LATENCE :

J'ai un fichier exemple, et j'ai obtenu le bon résultat
15 fois

d'affiler ! Sans aucun problème !
Serais-tu victime d'un micro climat ????????????


j'crois pas, climat maritime tempere, normal quoi !

j'ai modifie le programme en cherchant les "rejets" :

If Rst.EOF Then
'MsgBox "Aucun cheval trouvé!"
With Worksheets("Feuil2")
If .Range("A1") = "" Then
Set Rg = .Range("A1")
Else
Set Rg = .Range("A" & .Range("A65356").End
(xlUp).Row)(2)
End If
Rg = Target
End With
Rst.MoveFirst

et en supprimant la partie report du recordset :

'Else
'............
'Next

puis j'ai cree une macro pour visualiser ces rejets :

Sub TestRejets()
Dim c As Double
Application.ScreenUpdating = False

For i = 1 To 255
c = 7
With Worksheets("Feuil1")
While .Cells(c, 2) <> ""
.Cells(c, 2).Select
c = c + 1
Wend
End With
Worksheets("Feuil2").Columns("A:A").Insert
Shift:=xlToRight
Next
End Sub

resultat, j'obtiens 255 fois la meme liste de 31 noms
sur 83 ! (dans mon post precedent, je croyais que c'etait
aleatoire).
J'ai lance cette macro pusieurs dizaines de fois and same
results
soit quelques milliers de tests.
Autre particularite, si je selectionne individuellement
un nom "rejete"
ca marche parfois.
Je peux t'envoyer le fichier si tu veux.

Ceci dit, je n'ai pas l'intention de te pieger, mais
quand quelque chose m.... sous mon clavier, je suis comme
un pittbull et je ne lache mon PC que quand il a crache
sa substantifique moelle.

Malgre tout, je reste "adLockOptimistic".

bonne nuit a tous


-----Message d'origine-----
Bonjour J-Dan,

"2 points restent obscurs :"

APOSTROPHE : Il n'y a rien de nouveau à l'horizon, cela
est documenté. Il y a une parade simple dans ces cas de

figures
que je te soupçonne de la connaître .... Effectivement
je me suis pas senti obligé lorsque j'ai écrit cette sub

de
tester tous les cas de figures ... et pour l'information
de Nicolas 65, voilà la ligne de code qu'il devra changer

le
cas échéant :

Dans la procédure :
Private Sub Worksheet_SelectionChange(ByVal Target As
Range)


Adopte plutôt cette syntaxe, que tes noms de chevaux
aient ou non une apostrophe, ça marcheras.

Rst.Find "Titre2 = '" & Replace(Target, "'", "''") & "'"

Titre2 étant le nom de l'étiquette de colonne B de ta
base de données.



EFFET DE LATENCE :

J'ai un fichier exemple, et j'ai obtenu le bon résultat
15 fois d'affiler ! Sans aucun problème !


Serais-tu victime d'un micro
climant ????????????????????????????????????



Ceci étant dit, toujours pour le bénéfice de Nicolas,

tu devrais utiliser ce qui suit plutôt que le code de la
procédure intiale. La raison, c'est si tu désires ouvrir

ta
base de données suite à une première exécution du code,
tu dois avoir préalablement fermé la connection ouverte

par le
code.Cette connection est représentée par la
variable "Conn ". Dans mon message précédent, je n'ai pas

fermé la
connection "Conn.Close" ... cela rend temporairement
l'ouverture de la base de données impossible. Et pour

fermer cette
connection, tu dois simplement sélectionner une autre
feuille que celle où se retrouve tes données.


'---------------------------
Private Sub Worksheet_Deactivate()
Rst.Close
Set Rst = Nothing
Conn.Close
Set Conn = Nothing
End Sub
'---------------------------

Pour ceux que la chose intéresse, j'ai un fichier
exemple pour ceux qui le désirent !



Salutations!



"J-Dan" a écrit
dans le message de news:2d86001c46a7e$710d3110

$
bonjour Denis,

j'ai teste ta solution et 2 points restent obscurs :
- les noms comportant une apostrophe generent une
erreur

"Erreur 3001 - Les arguments ..... ou semblent en
conflit..."
- il semble qu'il y ait un "effet latence", une requete
peut ne rien renvoyer de facon aleatoire "aucun
cheval .." alors que repetee quelques secondes plus tard,
ca marche.

Precision (pour Nicolas ;-))) :

remplacer
'Titre2 = Nom De l'étiquette Colonne B de ta base de
données
Rst.Find "Titre2='" & Target & "'"
par
'Titre2 = Nom De l'étiquette Colonne A de ta base de
données
Rst.Find "cheval='" & Target & "'"


-----Message d'origine-----
Bonjour Nicolas65,

De vouloir faire intervenir des informations de fichiers
fermés, c'est toujours un peu plus compliqué.. mais je

crois
t'avoir donné suffisamment d'informations pour que tu
puisses faire à ton tour un bout de chemin. Si tu as

besoin
d'autres informations spécifiques, le forum est toujours
là. Moi, je ne peux me permettre de faire ce que tu

demandes !


.




1 2 3 4 5