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

5 réponses

1 2 3 4 5
Avatar
michdenis
En fait, il manque à un endroit Rst.MoveFirst dans le "else" de If Rst.EOF Then ... je l'avais mis dans le If mais
oublié dans la section du "else"

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

'***** Ligne ajoutée******
Rst.MoveFirst
'**********************

End If



Salutations!




"michdenis" a écrit dans le message de news:
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 !


.




Avatar
J-Dan
bonjour Denis,

merci pour la correction, c'est very good !
Je suppose que Rst.MoveFirst fait remonter le "pointeur"
a la premiere ligne du RecordSet ?

Je garde ton code sous le coude (que je leve a ta sante
et a celle de tous les contributeurs du MPFE.

bonne journee

En fait, il manque à un endroit Rst.MoveFirst dans
le "else" de If Rst.EOF Then ... je l'avais mis dans le

If mais
oublié dans la section du "else"


Avatar
Frédéric Sigonneau
Bonjour,

Ce que tu décris comme résultat attendu me fait penser à un commentaire : il
s'affiche lorsque la souris survole la cellule commentée et disparait dès que la
souris passe ailleurs.
Pour tester si cette fonctionnalité peut correspondre à ce que tu souhaites
faire, supposons un classeur qui comprend deux feuilles : une feuille "base",
avec la structure que tu décris (entêtes Cheval, Sexe, etc. en ligne 1), où tu
as saisi tes informations en colonnes A à O, et une feuille "infos" où tu vas
saisir dans un deuxième temps, en colonne B à partir de B7, une liste de chevaux.
La feuille "base" étant renseignée en premier lieu, lorsque tu saisis les noms
des chevaux dans la feuille "infos" un commentaire est ajouté à chaque nom
saisi. Le texte de ce commentaire indique soit "cheval inconnu" soit les
renseignements qui concernent un cheval connu. Pour cela, avant de saisir les
noms des chevaux dans la feuille "infos", clic droit sur l'onglet de cette
feuille, choisis la commande 'Visualiser le code' et copie la procédure ci-dessous :

'======================= Private Sub Worksheet_Change(ByVal Target As Range)
Dim S$, res

If Not Intersect(Target, Range("B7:B65536")) Is Nothing Then
res = Application.Match(Target.Value, Sheets("Base").Range("A:A"), 0)
If IsError(res) Then
Target.AddComment("Cheval inconnu").Shape.TextFrame.AutoSize = True
Else
If Target.NoteText <> "" Then Target.Comment.Delete
For i = 1 To 15
S = S & Sheets("base").Cells(1, i).Value & " : " & _
Sheets("base").Cells(res, i).Value & vbLf
Next
S = Left(S, Len(S) - 1)
Target.AddComment(S).Shape.TextFrame.AutoSize = True
End If
End If

End Sub

'=======================
Saisi ensuite les noms des chevaux en colonne B de cette feuille.

FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

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
Bonsoir le forum,

Absent depuis quelques jours (sans accès à Internet) je
viens de refaire un tour sur ce fil. Je suis très heureux
de voir que ce fil connait une fréquentation importante.
Je ne parviens malheureusemnt pas à faire la synthèse de
toutes ces réponses.
-----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 !


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_10189
8










_
1
01

89

8


..


h


tm
pour avoir tous les détails.

Merci


.



.



.


.



.



.





.




.












Avatar
nicolas 65
Suite du message précédent (suite à une mauvaise
manipulation)
Quelqu'un aurait-il la grande amabilité de m'envoyer par
mail une synthèse ?
Il n'est pas facile en effet de suivre un fil directement
sur le forum de Microsoft
Merci d'avance
-----Message d'origine-----
Bonsoir le forum,

Absent depuis quelques jours (sans accès à Internet) je
viens de refaire un tour sur ce fil. Je suis très
heureux

de voir que ce fil connait une fréquentation importante.
Je ne parviens malheureusemnt pas à faire la synthèse de
toutes ces réponses.
-----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 !


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_1018
9











8
_
1
01

89

8


..


h


tm
pour avoir tous les détails.

Merci


.



.



.


.



.



.





.




.

.














1 2 3 4 5