Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1158 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  saisie semie automatique liste déroulante Access

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

saisie semie automatique liste déroulante Access

n°2000818
MerryvorRa
Posté le 11-06-2010 à 11:35:35  profilanswer
 

Bonjour,  
 
Je travaille sur un formulaire access.  
Une liste déroulante appelée N°Abonné affiche le Numéro de l'abonné (numéro qui n'a aucune signification), le nom et le prénom de l'abonné. C'est bien un numéro d'abonné qui est enregistré dans ce champ.  
 
Je voudrai que lorsque je commence à taper le NOM d'un abonné dans cette liste déroulante, la sélection se place automatiquement sur le premier nom de la liste correspondant. Ainsi, en ayant tapé un NOM, je trouve la ligne correspondant au NUMERO.  
 
Par exemple, dans la liste j'ai les lignes suivantes:  
N°ABonné---------------NOM----------PRENOM  
1--------------------------MARTIN------Gilles  
2--------------------------MARIGNAN---Martine  
 
Si je tape "MAR" c'est la ligne 2 qui est sélectionnée (principe de la saisie automatique mais pas sur la colonne principale).  
 
Je ne sais pas si je suis très claire....  
 
Pouvez-vous m'aider???  

mood
Publicité
Posté le 11-06-2010 à 11:35:35  profilanswer
 

n°2000821
SuppotDeSa​Tante
Aka dje69r
Posté le 11-06-2010 à 11:53:13  profilanswer
 

Hello
 
Il faut "betement" jouer sur les colonnes.
Donc la, si je comprends bien ta liste affiche 3 colonnes.
A verifier dans les propriétés de ta liste dans la propriété : Nbre Colonnes
Ensuite en dessous, toujours dans la fenetre propriété de ta liste, tu dois voire la propriété : largeurs colonnes
Avec par exemple : 2cm;2,5cm;3cm
Il suffit de remplacer le premier chiffre par 0
Ce qui donnerait : 0;2,5cm;3cm
Et la, miracle, le numéro n'apparait plus (mais c'est lui qui est utilisé pour stocker ou renvoyer des valeurs) mais seulement le nom. Et donc tu peux commencer a saisir dans la pioche pour atteindre un nom specifique.
 
Et comme je suis de bonne humeur, petit screen a l'appui :D
 
http://dje69r.free.fr/col.jpg


Message édité par SuppotDeSaTante le 11-06-2010 à 11:53:58

---------------
Soyez malin, louez entre voisins !
n°2000834
MerryvorRa
Posté le 11-06-2010 à 12:19:09  profilanswer
 

Ok super  
Jme voyais déjà devoir programmer en VBA pour ça!
Merci beaucoup!!!!

n°2000846
MerryvorRa
Posté le 11-06-2010 à 12:58:07  profilanswer
 

Comment je fais maintenant pour créer un filtre sur mon formulaire?
J'ai créé une liste déroulante avec le nom de toutes les communes,
et je voudrais n'afficher que les abonnés de cette commune.
 
Sur quelle action créer le code? et comment j'écris ma fonction avec DoCmd.RunSQL (je m'empatouille avec les '";&;'&....)

n°2000880
SuppotDeSa​Tante
Aka dje69r
Posté le 11-06-2010 à 14:09:01  profilanswer
 

Oula, il y a beaucoup plus simple que toujours passer par du code "complexe"...
 
Ton formulaire doit avoir une requete comme source, ou une table. le mieux c'est une requete.
Comme ca dans le champ "numero de commune" de ta requete source, tu mets en critere ta pioche.
Et en code, tu n'as qu'un petit DoCmd.Requery a mettre apres mise a jour de ta pioche...
 
Regarde ca :
http://dje69r.free.fr/col2.jpg
 
En rouge : la source de la pioche, a savoir la table commune, et donc le numéro de commune.
En vert : la source du formulaire, une requete nommée "requete2" dont tu as la forme juste en dessous
En bleu : Le critere sur le numéro de commune dans la requete "requete2" qui est la source du formulaire qui filtre donc sur ce que contient la pioche du formulaire1
 
Donc en gros la requete n'affiche les infos que pour les communes de la table commune qui sont egales a la pioche. Et comme cette requete est la source du formulaire1, ton formulaire sera filtré. Juste un petit Requery comme dit plus haut a mettre sur mise a jour de ta pioche.


Message édité par SuppotDeSaTante le 11-06-2010 à 14:10:28

---------------
Soyez malin, louez entre voisins !
n°2000922
MerryvorRa
Posté le 11-06-2010 à 15:25:03  profilanswer
 

Merci beaucoup!!!

n°2000938
SuppotDeSa​Tante
Aka dje69r
Posté le 11-06-2010 à 15:52:35  profilanswer
 

:jap:
 
trop de code tue le code


Message édité par SuppotDeSaTante le 11-06-2010 à 15:53:13

---------------
Soyez malin, louez entre voisins !
n°2002538
MerryvorRa
Posté le 17-06-2010 à 15:50:06  profilanswer
 

Bonjour,  
 
J'ai maitenant un soucis de masque de saisie
j'ai une requête qui concatène 2 champs:
Tiroir : T1, à T4
Fibre: 1 à 144
J'aimerais pouvoir ranger par ordre alphabétique cette concaténation pour retrouver rapidement les fibres disponibles.
Seulement le tri ne fonctionne pas car ma chaine numérique possède 1 2 ou 3 caractère, de ce fait j'ai un ordre du sytle
T1.1
T1.13
T1.114
T1.2
C'est pas du tout ce que je cherche!  
J'ai changé le format de mon champ: il affiche fibre "002" au lieu de "2"
mais ce format ne s'enregistre pas dans la base, et de ce fait n'existe pas à la sortie de ma requête.
 
Pouvez-vous m'aider?

n°2002552
SuppotDeSa​Tante
Aka dje69r
Posté le 17-06-2010 à 17:04:24  profilanswer
 

Tu fais le format lors de la concatenation de la chaine.
 
2 champs calculés dans ta requete :
Un pour l'affichage comme tu as fait, du genre je pense : [Tiroir] & "." & [Fibre]
Un second pour le tri, tri croissant, que tu n'affiches pas : [Tiroir] & "." & Format$([Fibre];"000" )
 
Comme ca tes fibres seront comme ca : 001 ; 002 ; ... 099 ; ... ; 144
Et ca te donnera T1.001 ;...; T1.099 ; ... ; T1.144 qui une fois trié te les mettras dans le bon ordre, mais ce champ est masqué et ne sert qu'au tri
Tu te retrouveras donc bien avec ton champ trié, qui lui est affiché comme cela :
T1.1
T1.2
T1.13
T1.14
Etc.


Message édité par SuppotDeSaTante le 17-06-2010 à 17:07:14

---------------
Soyez malin, louez entre voisins !
n°2002560
MerryvorRa
Posté le 17-06-2010 à 17:29:30  profilanswer
 

Merci beaucoup encore une fois!!!!! :-))

mood
Publicité
Posté le 17-06-2010 à 17:29:30  profilanswer
 

n°2002592
SuppotDeSa​Tante
Aka dje69r
Posté le 17-06-2010 à 22:14:40  profilanswer
 
n°2003377
MerryvorRa
Posté le 21-06-2010 à 16:06:50  profilanswer
 

j'ai créé un formulaire avec deux onglets.
Chaque onglet dépend d'un sous-formulaire.
Chaque sous-formulaire dépend d'une requête.
 
Mon sous-formulaire fonctionne nickel en me demandant quelle est la valeur du Modifiable17sur lequel il doit baser son exécution (déduction : la requête est correcte) (j'avais cette ligne dans ma requête : WHERE (NRO.NomNRO=[Formulaires]![RechercheNRO]![Modifiable17]))
 
Dans mon formulaire principal, en modifiant le modifiable17, j'ai le droit de re-rentrer manuellement ce que je viens d'indiquer dans la liste déroulante (RequêteRechercheNROPassif.NomNRO)..... GRRRR
 pourquoi?

n°2003383
MerryvorRa
Posté le 21-06-2010 à 16:14:10  profilanswer
 

ah et ce même paramètre m'est également demandé à l'ouverture du formulaire avant même que j'ai touché au modifiable...

n°2003480
SuppotDeSa​Tante
Aka dje69r
Posté le 21-06-2010 à 18:39:48  profilanswer
 

Citation :

Mon sous-formulaire fonctionne nickel en me demandant quelle est la valeur du Modifiable17sur lequel il doit baser son exécution (déduction : la requête est correcte) (j'avais cette ligne dans ma requête : WHERE (NRO.NomNRO=[Formulaires]![RechercheNRO]![Modifiable17]))


Ca c'est pas normal il ne devrait rien de te demander. Soit le nom du formulaire principal est mal orthographié soit c'est celui du controle Modifiable17


---------------
Soyez malin, louez entre voisins !
n°2003591
MerryvorRa
Posté le 22-06-2010 à 08:12:40  profilanswer
 

Effectivement, j'ai retiré les sou-formulaires, puis les ai remis en place, j'avais du les modifier pendant qu'ils se trouvaient encore sur le formulaire principal.

n°2005231
MerryvorRa
Posté le 28-06-2010 à 11:34:27  profilanswer
 

C'est encore moi!
 
Ma base de données avance bien, j'ai le clic précis maintenant.
Mais nouvelle problématique: le publipostage.
J'ai des couriers types à envoyer à des propriétaires selon leur type de passage (façade, souterrain,...). Je compte créer un bouton sur le formulaire qui affiche toutes les caractéristiques du propriétaire. Ce bouton analyserai le type de passage et ouvrirai automatiquement le courier publiposté adéquat.
Comment faire?

n°2005236
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2010 à 11:58:54  profilanswer
 

Comme toujours, sois un peu plus explicite ;)
 
Pour le publipostage deux solutions :
Word se connecte a ta base de données et fusionne
Access pilote Word pour le publipostage


---------------
Soyez malin, louez entre voisins !
n°2005237
MerryvorRa
Posté le 28-06-2010 à 12:01:07  profilanswer
 

C'est access qui piloterai Word: depuis la page du propriétaire concerné, le code détermine le publipostage approprié et renvoie le document word.
Je voudrais que tout soit piloté par Access

n°2005262
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2010 à 14:01:54  profilanswer
 

Citation :

J'ai des couriers types à envoyer à des propriétaires selon leur type de passage (façade, souterrain,...). Je compte créer un bouton sur le formulaire qui affiche toutes les caractéristiques du propriétaire. Ce bouton analyserai le type de passage et ouvrirai automatiquement le courier publiposté adéquat.


Faut etre plus precis, c'est vraiment trop vague la...
 
Sinon un bout de code pour piloter Word :

Code :
  1. Set Wrd = CreateObject("word.application" )
  2. 'Ouvre le document de fusion
  3.     Wrd.Documents.Open CheminVersTonModeleDeFusion
  4.    
  5.     With Wrd.ActiveDocument.MailMerge
  6.         .OpenDataSource Name:=CheminVersTaBase, LinkToSource:=True, AddToRecentFiles:=False, Connection:="TaTable", SQLStatement:="SELECT * FROM `TaTable`"
  7.         .Destination = wdSendToNewDocument
  8.         .Execute
  9.     End With


Message édité par SuppotDeSaTante le 28-06-2010 à 14:02:19

---------------
Soyez malin, louez entre voisins !
n°2005312
MerryvorRa
Posté le 28-06-2010 à 15:06:44  profilanswer
 

le but est d'imprimer le courrier type à envoyer (par la poste, pas de mail) au propriétaire d'une parcelle.
J'ai plusieurs documents word type selon le type de passage de la fibre. Les champs liés sont nom, prénom ville
En cliquant sur le bouton, ca ouvrirait le document word adéquat avec les champs qui correspondent à l'enregistrement sur lequel je suis sur access. Ce document part à l'impression ensuite.

n°2005317
SuppotDeSa​Tante
Aka dje69r
Posté le 28-06-2010 à 15:27:21  profilanswer
 

Et bah tu as le code dont tu as besoin dans mon dernier post.
 
Il faut te faire un document de fusion pour chaque type, tu appelles tel ou tel document de fusion que tu lies a une table qui contient le ou les enregistrements a fusionner, tu fusionnes le document et tu as tes documents pret a etre imprimer...


---------------
Soyez malin, louez entre voisins !
n°2005707
MerryvorRa
Posté le 29-06-2010 à 14:06:39  profilanswer
 

Merci pour la piste!!
Avec un peu de recherche je suis arrivée à quelque chose de très sympathique!!
 

n°2005860
SuppotDeSa​Tante
Aka dje69r
Posté le 29-06-2010 à 19:49:37  profilanswer
 

Ca serait sympa de partager ici au cas ou qqun ai le meme 'souci' ;)


---------------
Soyez malin, louez entre voisins !
n°2005913
MerryvorRa
Posté le 30-06-2010 à 09:02:15  profilanswer
 

oui j'ai essayé de mettre le code en copie, pour que ce soit dans un encadré au post mais je sais pas où il est le bouton! lol
jfais juste copié collé ou ya autre chose pour la mise en forme?

n°2005922
MerryvorRa
Posté le 30-06-2010 à 09:16:49  profilanswer
 

moé lol Donc re pour ceux qui ont suivi.
 
ok Donc voilà mon code, une première fonction déclenchée au clic, qui fait appel à une requête déjà écrite pour déterminer le type de passage.  

Code :
  1. Sub MergeBM()
  2. 'Définitions
  3. Dim sql As String
  4. Dim database As DAO.database
  5. Dim qry As DAO.QueryDef
  6. Dim recordset As DAO.recordset
  7. 'Implémentations
  8. Set database = Application.CurrentDb
  9. Set qry = database.QueryDefs("RequêteTypePassage" )
  10. qry.Parameters("PARAM_NUM" ).Value = Forms!CréationConvention!Modifiable27
  11. Set rs = qry.OpenRecordset
  12. 'Conditions
  13. Debug.Print rs.Fields(0) 'pour afficher le résultat dans la fenêtre d'exécution
  14. Select Case rs.Fields(0)
  15. Case "façade"
  16.    Call MergeFacade
  17. Case "surplomb"
  18.    Call MergeSurplomb
  19. Case "souterrain"
  20.    Call MergeSouterrain
  21. Case "façade+boîtier"
  22.    Call MergeFacadeBoitier
  23. Case Else
  24.    MsgBox ("Pas de trame type définie pour ce type de passage" )
  25. End Select
  26. End Sub

 
 En fonction du type, je renvoie vers la fonction appropriée.  
Exemple d'une de ces fonctions de publipostage  

Code :
  1. Sub MergeFacade()
  2. 'Déclaration des variables
  3. Dim db As DAO.database
  4. Dim query As DAO.QueryDef
  5. Dim rs As DAO.recordset
  6. Dim oAppli
  7. Dim oDoc
  8. 'Affectation des objets d'accès aux données
  9. Set db = Application.CurrentDb
  10. Set query = db.QueryDefs("RequêtePublipostageFaçade" )
  11. query.Parameters("PARAM_NUM" ).Value = Forms!CréationConvention!Modifiable27
  12. Set rs = query.OpenRecordset
  13. Set oAppli = CreateObject("Word.Application" )
  14. Set oDoc = oAppli.Documents.Open("\\...\trame type\AccessFusionFaçade.dotm" )
  15. oAppli.Visible = True
  16. 'Boucle pour la récupération de données
  17. While Not rs.EOF
  18.    oDoc.Bookmarks("Commune" ).Range.Text = rs.Fields("Commune" )
  19.    oDoc.Bookmarks("Nom" ).Range.Text = rs.Fields("Nom" )
  20.    oDoc.Bookmarks("Commune2" ).Range.Text = rs.Fields("Commune" )
  21.    oDoc.Bookmarks("Adresse" ).Range.Text = rs.Fields("Adresse" )
  22.    oDoc.Bookmarks("Parcelle" ).Range.Text = rs.Fields("Parcelle" )
  23.    oDoc.Bookmarks("Parcelle2" ).Range.Text = rs.Fields("Parcelle" )
  24.    oDoc.SaveAs ("C:\Documents and Settings\All Users\Documents\" & rs.Fields(0) & ".doc" )
  25.    rs.MoveNext
  26. Wend
  27. 'Libération des objets
  28. rs.Close
  29. Set rs = Nothing
  30. db.Close
  31. Set db = Nothing
  32. End Sub


n°2005923
SuppotDeSa​Tante
Aka dje69r
Posté le 30-06-2010 à 09:20:04  profilanswer
 

:jap:
 
Je te laisse effacer la multitude de poste ;)
 
(Modification de ton message http://forum-images.hardware.fr/themes_static/images_forum/1/edit.gif, coche "Effacer message" en dessous de la zone de saisie)


Message édité par SuppotDeSaTante le 30-06-2010 à 09:20:27

---------------
Soyez malin, louez entre voisins !
n°2006353
MerryvorRa
Posté le 01-07-2010 à 15:35:03  profilanswer
 

Bon rebelote avec l'exportation sous excel qui fonctionne pas. Ca c'est ce que j'aimerais faire : on entre une date, on clique, et ça sort la liste des abonnés raccordés depuis cette date. La requête fonctionne bien.

Code :
  1. Sub Rapport()
  2. 'Déclaration des variables
  3. Dim db As database
  4. Dim query As QueryDef
  5. Dim rs As recordset
  6. Dim oAppli
  7. Dim oDoc
  8. Dim param As String
  9. 'Affectation des objets d'accès aux données
  10. Set db = Application.CurrentDb
  11. Set query = db.QueryDefs("RequêteRapportRaccordés" )
  12. param = Forms!RechercheAbonnés!Texte66
  13. query.Parameters("PARAM_DATE" ).Value = param
  14. param = Replace(param, "/", "-" )
  15. 'Set rs = query.OpenRecordset
  16. Set oAppli = CreateObject("Excel.Application" )
  17. oAppli.Visible = True
  18. Set oDoc = oAppli.Workbooks.Add
  19. oDoc.Sheets("Feuil1" ).Select
  20. oDoc.Sheets("Feuil1" ).Name = "mafeuille"
  21. oDoc.SaveAs ("RaccordésAvantLe" & param & ".xls" )
  22. DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, query, "RaccordésAvantLe" & param & ".xls", True, "A2"
  23. End Sub


et ca fonctionne pas car apparement query n'est pas une requête
 
et sinon j'ai tenté avec ce qui existe sur Internet, c'est-à-dire une requete temporaire.
Et là.... Rien ,rien d'affiché dans le fichier excel, même pas le nom des colonnes.
 
Help please?

n°2006419
SuppotDeSa​Tante
Aka dje69r
Posté le 01-07-2010 à 18:21:10  profilanswer
 

Et pourquoi tu créés pas "betement" une requete dans Access, vu que tu n'as pas de choses particuliere sur cette requete, et derriere un simple docmd.transferspreadsheet ??


---------------
Soyez malin, louez entre voisins !
n°2006496
MerryvorRa
Posté le 02-07-2010 à 09:08:59  profilanswer
 

ba le simple doCmd.Transferspreadsheet ne m'a jamais rien affiché dans excel...! sais pas pourquoi. Pas plus de succès avec le OutputTo
Finalement j'ai une solution qui fonctionne, je me suis servie du code automation : http://cafeine.developpez.com/acce [...] xcel/#LV-A,  
ça marche, mais comme c'est du code, c'est légèrement plus long à exécuter.

n°2007398
MerryvorRa
Posté le 06-07-2010 à 14:16:11  profilanswer
 

Ya-t-il un moyen de demander à access d'attribuer le prochain numéro automatique disponible à un nouvel enregistrement?
explications : après une (ou plusieurs) manipulation inconnue, je passe de l'abonné N° 135 à l'abonné N° 56976394.
Comment puis-je rendre access à la raison?

n°2007403
SuppotDeSa​Tante
Aka dje69r
Posté le 06-07-2010 à 14:24:03  profilanswer
 

A part :
- supprimer tout ce qu'il y a apres le 135, puis compacater la base
- Stocker dans une table temporaire tout ce qu'il y a apres le 135, compacter la base, ajouter de la table temporaire a la table
- Stocker dans une table temporaire tout ce qu'il y a apres le 135, supprimer tout ce qu'il y a apres le 135, ajouter dans la table en forcant le numéro automatique


---------------
Soyez malin, louez entre voisins !
n°2007405
MerryvorRa
Posté le 06-07-2010 à 14:28:43  profilanswer
 

il n'y a plus rien après le N°135, la base se compacte à la fermeture.
Mais à la réouverture, le nouveau prochain abonné est le n° 56 millions...
Faut-il un autre type de compactage? Comment "ajouter dans la table en forcant le numéro automatique"?

n°2007432
SuppotDeSa​Tante
Aka dje69r
Posté le 06-07-2010 à 15:15:56  profilanswer
 

Hum apres compactage de la base DES DONNEES normalement il doit repartir a plus 1 sur chaque table depuis le derniere numéro auto...
 
C'est quelle version d'Access déjà ?


Message édité par SuppotDeSaTante le 06-07-2010 à 15:20:03

---------------
Soyez malin, louez entre voisins !
n°2007443
MerryvorRa
Posté le 06-07-2010 à 15:42:59  profilanswer
 

access 2007

n°2007444
SuppotDeSa​Tante
Aka dje69r
Posté le 06-07-2010 à 15:44:17  profilanswer
 

C'est bien le fichier où sont les données (Tables) et pas celle ou tu as les programmes (Formulaires, requetes etc.) que tu compactes on est d'accord ?
 
Bouton Office, Gerer base de données (ou un truc dns le genre  j'ai pas le 2007 sous les yeux), Compacter la base


Message édité par SuppotDeSaTante le 06-07-2010 à 15:44:59

---------------
Soyez malin, louez entre voisins !
n°2007446
MerryvorRa
Posté le 06-07-2010 à 15:46:01  profilanswer
 

je n'ai pas encore séparé la base en 2, car je crée encore des formulaires

n°2007458
SuppotDeSa​Tante
Aka dje69r
Posté le 06-07-2010 à 16:03:28  profilanswer
 

Bah la dsl, je ne vois pas...


---------------
Soyez malin, louez entre voisins !
n°2007714
MerryvorRa
Posté le 07-07-2010 à 12:40:17  profilanswer
 

Il semble que le fait de fractionner la base de données en 2 résolve le problème.
En fractionnant, il y a compactage et le numéro automatique de ma base redevient raisonnable.
 
Merci d'avoir trouvé la piste!

n°2007826
SuppotDeSa​Tante
Aka dje69r
Posté le 07-07-2010 à 17:22:20  profilanswer
 
n°2008870
MerryvorRa
Posté le 12-07-2010 à 17:00:20  profilanswer
 

J'ai une requête insert into qui ne fonctionne pas en VBA:

Code :
  1. Dim sql As String
  2. If IsNull(Me.N°OS) = True Then
  3.    MsgBox ("Complétez d'abord les informations concernant l'OS! " )
  4. Else
  5.    sql = "INSERT INTO NRO (N°OS) VaLUES (" & Me.N°OS & " ) WHERE NRO.NomNRO = " & Me.NomNRO & ";"
  6.    'sql = "INSERT INTO NRO (N°OS) VaLUES ('56') WHERE NRO.NomNRO = 'BEL001';"
  7.    CurrentDb.Execute sql
  8.    DoCmd.Requery
  9. End If


à la ligne CurrenDB.Execute sql,  
Access m'affiche : "la requête doit être construite à partir d'au moins une table ou une requête source"
késaco???


Message édité par MerryvorRa le 12-07-2010 à 17:00:59
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  saisie semie automatique liste déroulante Access

 

Sujets relatifs
Base de donnée access depuis feuille excel.mise à jour de liste déroulante sous access 2007
Problème rechercher et remplacer sous AccessVBA création d'une liste de validation
VBA Excel et base Accessbse de connaissance access
Générer une liste qui s'affiche comme un tableauURGENT : Calcul Access
Plus de sujets relatifs à : saisie semie automatique liste déroulante Access


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR