| 
 
 |  |  | auteur : Team Access |  | Mettre les 4 états en tant que sous-etat d'un état vierge, indépendant.
 
 | 
|  |  | auteur : Cafeine |  | Vous voulez par exemple imprimer x fois un enregistrement (pour une étiquette ou autre).Créez une table (tblCount) avec un seul champ ID (numérique)
 et remplissez 1, 2, 3, ..... Nombre Maxi
 Si votre requête est du genre :
 | SelectCLIENTS.NOMFrom CLIENTS
Where CLIENTS.NOM="TOTO";
 | 
Cette requête ne donne qu'un seul résultat.Il faut alors la modifier pour utiliser la cardinalité :
 
 | SelectCLIENTS.NOMFrom CLIENTS, TBLCOUNT
Where CLIENTS.NOM="TOTO"AndTblCount.Id<=5;
 | 
et j'en ai alors 5 identiques. 
 | 
|  |  | auteur : Maxence HUBICHE |  | Si vous voulez favoriser le rendement, créez une requête. Par exemple : qryxTonEtat.Faites un état reposant sur cette requête.
 Ensuite, en code, vous n'avez plus qu'à modifier le SQL de la requête.
 
 Ainsi, celà évitera de créer des requetes à la volée.Vous aurez un état facilement modifiable puisqu'il aura une source.
 Vous pourrez profiter pleinement de la technologie Rushmoore de recherche sur les index, ce qui n'est pas le cas pour le SQL dans le VBA. Et donc, les performances seront meilleures.
 | DimqdfasQueryDefsetqdf=currentdb.querydefs("qryxTonEtat")
qdf.SQL="LeSQLquetuveux"
 | 
 | 
|  |  | auteur : jacma |  | | PrivateSubReport_Page()
  
    Me.Line(0,0)-(Me.ScaleWidth-50, Me.ScaleHeight-50), , BEndSub
 | 
 |  | lien :  Complément 
 | 
|  |  | auteur : Team Access |  | La propriété Fen indépendante doit être à Vrai, passez là à Faux. Ceci doit résoudre le problème. 
 | 
|  |  | auteur : tee_grandbois |  | Il  faut passer par une API qui liste les imprimantes existantes, vous les collez dans une table temporaire et vous affichez tout cela dans un formulaire. L'utilisateur choisit l'imprimante et vous n'avez plus qu'à imprimer sur la ou les imprimantes sélectionnées. 
 
Structure de la table des imprimantes tbPrtList
 
 
no_Prt, Entiertx_PrtNom, Texte 255tx_PrtPort, Texte 255tx_PrtDriver, Texte 255st_Selection, Booléen 
SECTION MODULES DE FONCTIONNEMENTFonction permettant de charger les imprimantes dans la table
 | OptionCompare DatabaseOptionExplicitFunctionfChargementImprimantes()DimiAsIntegerDimitNbPrtAsIntegerDimrsAsRecordset
    StaticatagDevices()Asaht_tagDeviceRecOnErrorGoToGestErrSetrs=CurrentDb().OpenRecordset("tbPrtList", dbOpenDynaset)
   
    
   
    DoCmd.RunSQL"DELETE * FROM tbPrtList"itNbPrt=ahtGetPrinterList(atagDevices())Fori=1ToitNbPrt
        rs.AddNewrs![No_Prt].Value=i
            rs![tx_Prtnom].Value=atagDevices(i).drDeviceNamers![tx_Prtport].Value=atagDevices(i).drPortrs![tx_prtdriver].Value=atagDevices(i).drDriverNamers.UpdateNextiFinLoad:
    
    rs.CloseSetrs=NothingExitFunctionGestErr:MsgBox"Erreur dans fChargementImprimantes : "&Error&" ("&Err&")"ResumeFinLoadEndFunction
 | 
Fonction permettant d'imprimer l'état
 | FunctionfMultiImpression(stNomFichierAsString)OnErrorGoToGestErrIfstNomFichier=""ThenExitFunctionDimrsAsRecordsetDimdrAsaht_tagDeviceRecDimstDvDefaultAsStringDimstDrDefaultAsStringDimstPrDefaultAsStringIfahtGetDefaultPrinter(dr)ThenstDvDefault=dr.drDeviceNamestDrDefault=dr.drDriverNamestPrDefault=dr.drPortEndIfSetrs=CurrentDb().OpenRecordset("SELECT * FROM tbPrtList WHERE st_selection = true")IfNotrs.EOFAndNotrs.BOFThenWhileNotrs.EOFdr.drDeviceName=rs.Fields("[tx_PrtNom]")
            dr.drDriverName=rs.Fields("[tx_PrtDriver]")
            dr.drPort=rs.Fields("[tx_PrtPort]")
            
            ahtSetDefaultPrinter dr
   
            
            DoCmd.OpenReportstNomFichier, , acViewNormal
           
            
            DoCmd.CloseacReport, stNomFichier
           
            rs.MoveNextWendEndIfRestoreDftPrt:
   
    
    rs.CloseSetrs=Nothingdr.drDeviceName=stDvDefault
    dr.drDriverName=stDrDefault
    dr.drPort=stPrDefault
    ahtSetDefaultPrinter drExitFunctionGestErr:MsgBox"Erreur dans fMultiImpression : "&Error&" ("&Err&")"ResumeRestoreDftPrtEndFunction
 | 
SECTION API :
 | ConstMAX_SIZE=255ConstMAX_SECTION=2048DeclareFunctionaht_apiGetPrivateProfileInt Lib"kernel32"Alias"GetPrivateProfileInt"_
(ByValstrAppNameAsString,ByValstrKeyNameAsString,ByValintDefaultAsInteger, _ByValstrFilenameAsString)AsInteger
DeclareFunctionaht_apiGetPrivateProfileString Lib"kernel32"Alias"GetPrivateProfileStringA"_
(ByValstrAppNameAsString,ByValstrKeyNameAsString,ByValstrDefaultAsString, _ByValstrReturnedAsString,ByVallngSizeAsLong,ByValstrFilenameAsString)AsLong
DeclareFunctionaht_apiGetProfileString Lib"kernel32"Alias"GetProfileStringA"_
(ByValstrAppNameAsString,ByValstrKeyNameAsString,ByValstrDefaultAsString, _ByValstrReturnedAsString,ByVallngSizeAsLong)AsLong
DeclareFunctionaht_apiGetProfileInt Lib"kernel32"Alias"GetProfileInt"_
(ByValstrAppNameAsString,ByValstrKeyNameAsString,ByValintDefaultAsInteger)AsInteger
DeclareFunctionaht_apiGetProfileSection Lib"kernel32"Alias"GetProfileSectionA"_
(ByVallpAppNameAsString,ByVallpReturnedStringAsString,ByValnSizeAsLong)AsLong
DeclareFunctionaht_apiGetPrivateProfileSection Lib"kernel32"Alias"GetPrivateProfileSectionA"_
(ByVallpAppNameAsString,ByVallpReturnedStringAsString,ByValnSizeAsLong, _ByVallpFileNameAsString)AsLong
DeclareFunctionaht_apiWritePrivateProfileString Lib"kernel32"Alias"WritePrivateProfileStringA"_
(ByValstrAppNameAsString,ByValstrKeyNameAsString,ByValstrValueAsString, _ByValstrFilenameAsString)AsInteger
DeclareFunctionaht_apiWriteProfileString Lib"kernel32"Alias"WriteProfileStringA"_
(ByValstrAppNameAsString,ByValstrKeyNameAsString,ByValstrValueAsString)AsInteger
Type aht_tagDeviceRec
   drDeviceNameAsStringdrDriverNameAsStringdrPortAsStringEndType
Type aht_tagDEVMODEdmDeviceName(1To32)AsByte
   dmSpecVersionAsInteger
   dmDriverVersionAsInteger
   dmSizeAsInteger
   dmDriverExtraAsInteger
   dmFieldsAsLong
   dmOrientationAsInteger
   dmPaperSizeAsInteger
   dmPaperLengthAsInteger
   dmPaperWidthAsInteger
   dmScaleAsInteger
   dmCopiesAsInteger
   dmDefaultSourceAsInteger
   dmPrintQualityAsInteger
   dmColorAsInteger
   dmDuplexAsInteger
   dmYResolutionAsInteger
   dmTTOptionAsInteger
   dmCollateAsIntegerdmFormName(1To32)AsByte
   dmLogPixelsAsInteger
   dmBitsPerPixelAsLong
   dmPelsWidthAsLong
   dmPelsHeightAsLong
   dmDisplayFlagsAsLong
   dmDisplayFrequencyAsLong
   dmICMMethodAsLong
   dmICMIntentAsLong
   dmMediaTypeAsLong
   dmDitherTypeAsLong
   dmICCManufacturerAsLong
   dmICCModelAsLongdmDriverExtraBytes(1To1024)AsByteEndType
Type aht_tagDEVMODEStr
   DMStrAsString*1024EndType
Type aht_tagDEVNAMES
   dnDriverOffsetAsInteger
   dnDeviceOffsetAsInteger
   dnOutputOffsetAsInteger
   dnDefaultAsIntegerEndType
Type aht_tagDEVNAMEStr
   DNStrAsString*4EndType
Type aht_tagMIP
   xLeftMarginAsLong
   yTopMarginAsLong
   xRightMarginAsLong
   yBotMarginAsLong
   fDataOnlyAsLong
   xFormSizeAsLong
   yFormSizeAsLong
   fDefaultSizeAsLong
   cxColumnsAsLong
   xFormSpacingAsLong
   yFormSpacingAsLong
   radItemOrderAsLong
   fFastPrintingAsLong
   fDataSheetAsLongEndType
Type aht_tagMIPSTR
   MIPStrAsString*28EndTypeFunctionahtFillPrinterList(ctlAsControl, varIDAsVariant, varRowAsVariant, varColAsVariant, varCodeAsVariant)
   
   StaticatagDevices()Asaht_tagDeviceRec
   Static intCountAsIntegerDimvarRetvalAsVariantSelectCasevarCodeCaseacLBInitialize
         intCount=ahtGetPrinterList(atagDevices())
         varRetval=TrueCaseacLBOpen
         varRetval=TimerCaseacLBGetRowCount
         varRetval=intCountCaseacLBGetColumnCount
         varRetval=1CaseacLBGetValue
         varRetval=atagDevices(varRow+1).drDeviceName&" sur "&_atagDevices(varRow+1).drPortCaseacLBEndEraseatagDevicesEndSelectahtFillPrinterList=varRetvalEndFunctionFunctionahtGetPrinterList(atagDevices()Asaht_tagDeviceRec)AsIntegerDimastrPrinters()AsStringDimintCountAsIntegerDimvarPrintersAsVariant
   varPrinters=ahtGetProfileSection("DEVICES")IfLen(varPrinters&"")=0ThenahtGetPrinterList=0ElseintCount=GetDevices(varPrinters,atagDevices())EndIfahtGetPrinterList=intCountEndFunctionPrivateFunctionGetDevices(ByValstrPrintersAsString,atagDevices()Asaht_tagDeviceRec)AsIntegerDimintIAsIntegerDimstrBufferAsStringDimintCountAsIntegerForintI=1ToLen(strPrinters)IfMid$(strPrinters, intI,1)=Chr$(0)ThenintCount=intCount+1EndIfNextintIReDimatagDevices(1TointCount)ForintI=1TointCount
      strBuffer=ahtGetToken(strPrinters,Chr$(0), intI)atagDevices(intI).drDeviceName=ahtGetToken(strBuffer,"=",1)
      strBuffer=ahtGetToken(strBuffer,"=",2)atagDevices(intI).drDriverName=ahtGetToken(strBuffer,",",1)atagDevices(intI).drPort=ahtGetToken(strBuffer,",",2)NextintI
   GetDevices=intCountEndFunctionFunctionahtGetDefaultPrinter(drAsaht_tagDeviceRec)AsBooleanDimstrBufferAsStringstrBuffer=ahtGetINIString("Windows","Device")IfLen(strBuffer)>0ThenWithdr.drDeviceName=ahtGetToken(strBuffer,",",1).drDriverName=ahtGetToken(strBuffer,",",2).drPort=ahtGetToken(strBuffer,",",3)EndWithahtGetDefaultPrinter=TrueElseahtGetDefaultPrinter=FalseEndIfEndFunctionFunctionahtSetDefaultPrinter(drAsaht_tagDeviceRec)AsBooleanDimstrBufferAsStringstrBuffer=dr.drDeviceName&","strBuffer=strBuffer&dr.drDriverName&","strBuffer=strBuffer&dr.drPortahtSetDefaultPrinter=(aht_apiWriteProfileString("Windows", _"Device", strBuffer)<>0)EndFunctionFunctionahtGetToken(ByValstrValueAsString,ByValstrDelimiterAsString,ByValintPieceAsInteger)AsVariantDimintPosAsIntegerDimintLastPosAsIntegerDimintNewPosAsIntegerOnErrorGoToahtGetTokenExit
   strDelimiter=Left(strDelimiter,1)If(InStr(strValue, strDelimiter)=0)Or(intPiece<=0)ThenahtGetToken=strValueElseintPos=0intLastPos=0DoWhileintPiece>0intLastPos=intPos
         intNewPos=InStr(intPos+1, strValue, strDelimiter)IfintNewPos>0ThenintPos=intNewPos
               intPiece=intPiece-1ElseintPos=Len(strValue)+1ExitDoEndIfLoopIfintPiece>1ThenahtGetToken=NullElseahtGetToken=Mid$(strValue, intLastPos+1, intPos-intLastPos-1)EndIfEndIfahtGetTokenExit:ExitFunctionahtGetTokenErr:MsgBox"Error in ahtGetToken: "&Error&" ("&Err&")"ResumeahtGetTokenExitEndFunctionFunctionahtGetPrivateIniString(ByValstrGroupAsString,ByValstrItemAsString,ByValstrFileAsString)AsVariantDimintCharsAsIntegerDimstrBufferAsStringstrBuffer=String(MAX_SIZE,0)
   intChars=aht_apiGetPrivateProfileString(strGroup, strItem,"", strBuffer, MAX_SIZE, strFile)
   ahtGetPrivateIniString=Left(strBuffer, intChars)EndFunctionFunctionahtGetPrivateProfileSection(ByValstrGroupAsString,ByValstrFileAsString)AsVariantDimstrBufferAsStringDimintCountAsInteger
   
   strBuffer=Space(MAX_SECTION)
   intCount=aht_apiGetPrivateProfileSection(strGroup, strBuffer, MAX_SECTION, strFile)
   ahtGetPrivateProfileSection=Left(strBuffer, intCount)EndFunctionFunctionahtGetProfileSection(ByValstrGroupAsString)AsVariantDimstrBufferAsStringDimintCountAsInteger
   
   strBuffer=Space(MAX_SECTION)
   intCount=aht_apiGetProfileSection(strGroup, strBuffer, MAX_SECTION)
   ahtGetProfileSection=Left(strBuffer, intCount)EndFunctionFunctionahtGetINIString(ByValstrGroupAsString,ByValstrItemAsString)AsVariantDimintCharsAsIntegerDimstrBufferAsStringstrBuffer=String(MAX_SIZE,0)
   intChars=aht_apiGetProfileString(strGroup, strItem,"", strBuffer, MAX_SIZE)
   ahtGetINIString=Left(strBuffer, intChars)EndFunctionFunctionahtGetPrivateINIInt(ByValstrGroupAsString,ByValstrItemAsString,ByValstrFileAsString)AsVariant
   ahtGetPrivateINIInt=aht_apiGetPrivateProfileInt(strGroup, strItem,-1, strFile)EndFunctionFunctionahtGetINIInt(ByValstrGroupAsString,ByValstrItemAsString)AsVariant
   ahtGetINIInt=aht_apiGetProfileInt(strGroup, strItem,-1)EndFunction
 | 
 | 
|  |  | auteur : shwin |  | Il faut utiliser le code suivant qui en fait reproduit par le code les manipulation que l'utilisateur doit effectuer afin d'obtenir l'effet escompté.
 | SendKeys "{f10}"SendKeys"{f}"SendKeys"{p}"SendKeys"{right}"SendKeys"%{y}"SendKeys"{enter}"
 | 
 | 
|  |  | auteur : Maxence HUBICHE |  | | PrivateSubReport_Page()
    Me.Line(Me.ScaleWidth/2,0)-(Me.ScaleWidth/2, Me.ScaleHeight),255EndSub
 | 
Aller plus loin :Voici un truc inutile :
 Créez un nouvel état, en mode création, sans aucune source.
 Allez dans le module de l'état, et copiez-y le code suivant :
 | OptionCompare DatabasePrivateEnum XY
    x
    yEndEnumPrivateSubReport_Page()Dimx1AsLong, x2AsLongDimy1AsLong, y2AsLongDimnAsLongForn=1To255x1=Banzai(x)
        x2=Banzai(x)
        y1=Banzai(y)
        y2=Banzai(y)
        c=DefCouleur
        Me.Line(x1, y1)-(x2, y2), cNextEndSubFunctionBanzai(xyTypeAsLong)AsLongDimMAXAsLongDimnAsLongSelectCasexyTypeCasex
            MAX=Me.ScaleWidthCasey
            MAX=Me.ScaleHeightEndSelectBanzai=CLng(Rnd()*MAX)EndFunctionFunctionDefCouleur()AsLong
    DefCouleur=CLng(Rnd()*2^24)EndFunction
 | 
Ouvrez l'état.
Vous savez maintenant gribouiller un état.
 
 | 
|  |  | auteur : Maxence HUBICHE |  | | 
PrivateSubZoneEntêtePage_Format(CancelAsInteger, FormatCountAsInteger)IfMe.Page=1ThenMe.ZoneEntêtePage.Visible=FalseElseMe.ZoneEntêtePage.Visible=TrueEndIfEndSub
 | 
 | 
|  |  | auteur : Cafeine |  | On fait une boucle sur le container "Reports" et on teste la longueur du nom de l'état ouvert courant,
 ce qui fait que si on ferme l'état, cela provoque une erreur que nous allons récupérer pour déclencher
 l'ouverture de l'état suivant.
 
 | SubViewAllReports()DimiIntAsIntegerOnErrorGoToVARerrHandlerForiInt=0ToCurrentDb.Containers("Reports").Documents.Count-1DoCmd.OpenReportCurrentDb.Containers("Reports").Documents(iInt).Name, acViewPreviewDoWhileLen(Reports(0).Name)>0DoEventsLoopNextReport:NextiIntMsgBox"Vous avez visualisé les "&iInt&" états de la base",vbInformation+vbOKOnlyExitSubVARerrHandler:SelectCaseErr.NumberCase2457Err.ClearResumeNextReportCaseElseMsgBoxErr.Number&vbCrLf&Err.DescriptionErr.ClearEndSelectEndSub
 | 
 | 
|  |  | auteur : Starec |  | Vous ne pouvez mettre dans un état en mode multi colonnes un titre qui fait tout la largeur de la page.Pour remédier à cela, il faut écrire le titre sur l'état.
 Pour cela on utilisera l'évènement Page de l'état,et on utilise l'instruction Print.
 | PrivateSubReport_Page()
     Me.Print"Je suis super www.developpez.com le forum d'entraide des développeurs francophones"EndSub
 | 
 |  | lien :  Apprendre à Ecrire et Dessiner dans les états Access 
 | 
 
 
						Consultez les autres F.A.Q's
					 
 Les sources présentés sur cette pages sont libre de droits,
			et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
			Copyright ©2004 
			Developpez LLC. Tout droits réservés Developpez LLC.
			Aucune reproduction, même partielle, ne peut être faite de ce site et de
			l'ensemble de son contenu : textes, documents et images sans l'autorisation
			expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
			de prison et jusqu'à 300 000 E de dommages et intérets.
			Cette page est déposée à la SACD. |