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

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA Excel]Pied à l'étrier: Userform

 


 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA Excel]Pied à l'étrier: Userform

n°2160742
BrisChri
Since 1956
Posté le 19-10-2012 à 11:24:49  profilanswer
 

Je n'ai jamais utilisé de userform, je ne sais même pas comment ça se présente.
Au lieu d'utiliser un fichier réel, j'ai crée un classeur "MenuDeLaSemaine", le travail sera le même ailleurs.
 
J'aimerais "créer un menu", "modifier le menu" ou "imprimer le menu" en utilisant des boutons et des userform.
 
Voici la feuille "menu"

Code :
  1. Escalope milanaise        
  2. Milaanse snitzel
  3. Saucisse choux-fleur                
  4. Worst bloemkool
  5. Le Tartare ou l'Américain       
  6. Tartare of Américain
  7. Filet de poulet au chèvre        
  8. Kippe borst met geitekaas
  9. Saumon aux épinards                
  10. Zalm mer spinazie
  11.                         29/10/2012


 
Les premières macros:

Option Explicit
 
    Global tColJour(10) As String       '       Jours de la semaine
    Global tPlats(10) As String         '       Plats de jour
    Global tTitre(6) As String          '       Entete et pied de page
    Global dLundi As Date               '       Date lundi
Private Sub SupprimerAncienMenu()
    Sheets("Menu" ).Activate
    Range("A1:A10" ).ClearContents
    Cells(5, 1).Value = "Le Tartare ou l'Américain"
    Cells(6, 1).Value = "Tartare of Américain"
    Cells(11, 1).Value = DateAdd("d", 7, Cells(11, 1))
End Sub
Private Sub ChargerTableaux()
    Dim nI As Integer                   '       Index
     
    '                                   Remplir le tableau des jours
    tColJour(1) = "Lundi"
    tColJour(2) = "Maandag"
    tColJour(3) = "Mardi"
    tColJour(4) = "Dinsdag"
    tColJour(5) = "Mercredi"
    tColJour(6) = "Woensdag"
    tColJour(7) = "Jeudi"
    tColJour(8) = "Donderdag"
    tColJour(9) = "Vendredi"
    tColJour(10) = "Vrijdag"
     
    '                                   Remplir le tableau des plats
    Sheets("Menu" ).Activate
    For nI = 1 To 10
        tPlats(nI) = Cells(nI, 1)
    Next nI
    dLundi = Cells(11, 1)
End Sub
Private Sub ModifierMenu()
    Application.ScreenUpdating = False      '       arrêter la mise à jour de l'affichage
    ChargerTableaux
    Application.ScreenUpdating = True       '       relancer la mise à jour de l'affichage
End Sub
Private Sub CreerMenu()
    Application.ScreenUpdating = False      '       arrêter la mise à jour de l'affichage
    SupprimerAncienMenu
    ModifierMenu
    Application.ScreenUpdating = True       '       relancer la mise à jour de l'affichage
End Sub
Private Sub ImprimerMenu()
     
    Application.ScreenUpdating = False      '       arrêter la mise à jour de l'affichage
     
    Const EP_LIGNE As Integer = 2           '       épaisseur du trait entre dates
    Const LARG_LIGNE As Integer = 17        '       largeur trait entre dates
    Const LARG_COL As Integer = 37          '       largeur colonnes gauche et droite
 
    Dim nRow As Integer                     '       Numéro de ligne
    Dim nCol As Integer                     '       Numéro de colonne
    Dim nI As Integer                       '       Index
     
    Dim dVendredi As Date                   '       Vendredi
     
    Dim cColorTitre As String               '       Couleur des titres (haut et bas)
    Dim cColorTexte As String               '       Couleur du texte
    Dim cColorDate As String                '       Couleur de
    Dim cColorLigne As String               '       Couleur des interlignes
     
    '                                       Pseudo constantes
    cColorTitre = RGB(0, 255, 0)
    cColorTexte = RGB(0, 255, 0)
    cColorDate = RGB(0, 255, 0)
    cColorLigne = RGB(0, 255, 0)
     
     
    ChargerTableaux
    dVendredi = DateAdd("d", 4, dLundi)
    '                                       Remplir le tableau des titres
    tTitre(1) = "Plat du jour"
    tTitre(2) = "Dagschotel"
    tTitre(3) = Format(dLundi, "dd/mm/yyyy" ) + " => " + Format(dVendredi, "dd/mm/yyyy" )
    tTitre(4) = "Bon appétit !!!! / Smakelijk !!!!"
    tTitre(5) = "02 etc"
    tTitre(6) = "Par ici, 143 - 1000 Bruxelles"
                 
     
    '                                       Préparer la page Impression
    Sheets("Impression" ).Activate
    With ActiveSheet.PageSetup
        .Orientation = xlPortrait
        .PaperSize = xlPaperA4
        .LeftMargin = 0
        .RightMargin = 0
        .CenterVertically = True
        .CenterHorizontally = True
    End With
    With Range("A1:C22" )
        .ClearFormats
        .ClearContents
        .Font.Name = "Comic sans MS"
        .RowHeight = 37
    End With
     
    '                                       Largeur des colonnes, hauteur des lignes
    Columns("A:A" ).ColumnWidth = LARG_COL
    Columns("B:B" ).ColumnWidth = LARG_LIGNE
    Columns("C:C" ).ColumnWidth = LARG_COL
    Rows(1).HorizontalAlignment = xlCenter
     
    With Rows("1:1" )
        .RowHeight = 75
    End With
         
    '                                       Remplir la page Impression
    Cells(1, 1).Value = tTitre(1)
    Cells(1, 3).Value = tTitre(2)
    Cells(2, 1).RowHeight = EP_LIGNE
    nRow = 3
    For nI = 1 To 9 Step 2
    '                                       FR
        With Range(Cells(nRow, 1), Cells(nRow, 3))
            .Merge
            .HorizontalAlignment = xlLeft
            .Font.Color = cColorTexte
        End With
        Cells(nRow, 1).Value = tColJour(nI) + " : " + tPlats(nI)
    '                                       NL
        With Range(Cells((nRow + 1), 1), Cells((nRow + 1), 3))
            .Merge
            .HorizontalAlignment = xlRight
            .Font.Color = cColorTexte
        End With
        Cells((nRow + 1), 1).Value = tColJour(nI + 1) + " : " + tPlats(nI + 1)
    '                                       Interligne
        Cells((nRow + 2), 2).RowHeight = EP_LIGNE
        Cells((nRow + 2), 2).Interior.Color = cColorLigne
        nRow = nRow + 3
    Next nI
 
    Range(Cells(nRow, 1), Cells(nRow, 3)).RowHeight = 50
    nRow = nRow + 1
 
    With Range(Cells(nRow, 1), Cells(nRow, 3))
        .Merge
        .HorizontalAlignment = xlCenter
        .Font.Color = cColorDate
        .RowHeight = 28
    End With
    Cells(nRow, 1).Value = tTitre(3)
    nRow = nRow + 1
         
    For nI = 4 To 6
        With Range(Cells(nRow, 1), Cells(nRow, 3))
            .Merge
            .HorizontalAlignment = xlCenter
            .Font.Color = cColorTitre
            .RowHeight = 28
        End With
        Cells(nRow, 1).Value = tTitre(nI)
        nRow = nRow + 1
    Next nI
     
    '                                       utiliser la bonne taille de caractères
    '                                       titres
    '                       FR
    With Cells(1, 1).Font
        .Size = 28
        .Bold = True
        .Underline = True
        .Color = cColorTitre
    End With
    '                       NL
    With Cells(1, 3).Font
        .Size = 28
        .Bold = True
        .Underline = True
        .Color = cColorTitre
    End With
     
    Range(Cells(3, 1), Cells(16, 1)).Font.Size = 24
    Range(Cells(19, 1), Cells(20, 1)).Font.Size = 20
    Range(Cells(21, 1), Cells(22, 1)).Font.Size = 16
     
    Cells(nRow, 1).Select
     
    '                                       Relancer l'affichage
    Application.ScreenUpdating = True
End Sub


 
Je cherche une aide: me mettre le pied à l'étrier...
ModifierMenu()  

  • afficher le menu existant avec les jours de la semaine et un bouton (case à cocher ou autre) "congé Y/N" pour chaque jour.
  • Si congé, alors le plat du jour = "congé / verlof".
  • Enregistrer le menu de la semaine


Une direction?


---------------
Si une frite n'a pas de mayo, alors elle ne pourra pas aller à la piscine
mood
Publicité
Posté le 19-10-2012 à 11:24:49  profilanswer
 

n°2160774
vave
Nice to meet me
Posté le 19-10-2012 à 13:59:52  profilanswer
 

Je ne comprends pas trop ce que tu souhaites faire, mais :
- tu devrais commencer par créer ton userform avec les objets que tu veux (listes, zones de textes, cases à cocher, etc...).
 
Ensuite, tu clic droit sur le userform => code. De là, tu peux gérer les événements du userform :
- Private Sub UserForm_Initialize()  
         se lance dès que le userform est lancé. Là dedans, typiquement, tu remplis les listes avec les valeurs que tu veux :
                  ex :    For i = 1 To 100
                                 TaListe.AddItem i
                           Next i
 
- Private Sub OK_Click()
         se lance à l'appui sur le bouton OK (notes que ce qui est avant le "_" est le nom que tu donnes à ton objet. tu les as dans la liste déroulante de l'éditeur en haut).
          Donc, là tu fait ce que tu as à faire, comme lancer une autre macro par exemple.
 
 
Pour lancer le userform, dans une sub normale :
load userform
 
pour le décharger :
unload userform
 
 
Voilà pour une première mise à l'étrier :D
 


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
n°2160791
BrisChri
Since 1956
Posté le 19-10-2012 à 15:11:37  profilanswer
 

Je suis toujours occupé avec le même fichier ( http://forum.hardware.fr/hfr/Progr [...] 7868_1.htm ).
Comme il y a des données qui et que machin, je me suis créé un tout autre fichier (qui peut vraiment servir :D ).
- Comment faire une mise-à-jour de données sans toucher à la page? Réponse (mais je me trompe peut-être): un userform.
- En utilisant un userform, comment lire/afficher les données? Comment les enregistrer?
Pas bien compliqué quand on sait comment faire. Et, justement, j'aimerais savoir comment faire. Par quoi commencer.
 
L'idée est d'avoir une feuille avec des boutons: ajouter / modifier sur toutes les feuilles, et il y en a quelques-unes: inventaire, adresse, juridictions, matériel  et contact. Hors de question de permettre une modif accidentelle.
Alors, pour débuter, lire, écrire et une valeur true/false qui impose une donnée. Je pense m'en sortir après. Et pour l'instant, je ne suis qu'avant.


---------------
Si une frite n'a pas de mayo, alors elle ne pourra pas aller à la piscine
n°2160908
vave
Nice to meet me
Posté le 22-10-2012 à 07:09:14  profilanswer
 

Je crois que pour mes débuts en userform, j'avais utilisé ce tuto entre autres.
Essayes de commencer avec ça et si tu as des questions plus précises, viens les poser ici.
 
Et pour commencer, comme je te le disais au dessus, créés ton userform comme tu le veux au final.


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
n°2160912
kiki29
Posté le 22-10-2012 à 09:23:14  profilanswer
 
n°2160956
BrisChri
Since 1956
Posté le 22-10-2012 à 14:38:48  profilanswer
 

:jap:
Ça va me faire de la lecture pour les longues soirées d'hiver automne :)


---------------
Si une frite n'a pas de mayo, alors elle ne pourra pas aller à la piscine
n°2162073
BrisChri
Since 1956
Posté le 31-10-2012 à 11:38:06  profilanswer
 

J'ai jeté plus qu'un oeil, résultat, j'ai créé mes premiers formulaires.
Là, il m'en faudrait un qui soit un peu plus compliqué que le simple "ajouter une ligne".
Principe du "ajouter une ligne":

  • chercher la première ligne vide = nRow
  • nRow = nRow + 1
  • remplir les colonnes une par une avec les données du formulaire
  • trier la plage A1:nRow,Col

Je pense qu'on ne peut pas faire plus simple.
 
Le nouveau formulaire, lui, doit avoir 5 boutons actifs par 2 ou par 3.
Créer / Modifier / Imprimer // OK / Cancel
 
On ouvre le classeur, affichage du formulaire UsfMenu, caption: "afficher le menu"
Dans le bas de UsfMenu, 3 boutons.

  • Imprimer. Rien de spécial.


  • Créer.

Devrait enable/visible=false pour les 3 boutons
Devrait enable/visible = true pour les 2 boutons OK / Cancel.
Mettre les données à blanc, etc.
Lancer modifier("Créer un menu" )               ' "créer un menu" sera la caption de UsfMenu
 

  • Modifier.

Devrait enable/visible=false pour les 3 boutons
Devrait enable/visible = true pour les 2 boutons OK / Cancel.
Lancer modifier("Modifier le menu" )             ' "Modifier le menu" sera la caption de UsfMenu
 
 

  • OK.

enable = false pour OK / Cancel
Traiter
visible = false pour OK / Cancel
visible/enable = true pour les 3 boutons
 

  • Cancel

Pas de traitement
visible/enable = false pour OK /Cancel
visible/enable = true pour les 3 boutons.
 
Ceci me semble un raisonnement correct... mais est-il possible de placer les boutons au même endroit, "OK" prenant la place de "Créer" et "Cancel" celle de "Modifier" ? ou faut-il un formulaire par niveau?
Je préfère poser la question avant de me planter et de risquer de ne plus pouvoir sortir de mon truc en cas d'erreur, surtout que la première façon me semble plus simple, un formulaire unique est plus facile à maintenir que 2 ou 3 formulaires ne se différenciant que par les boutons.


---------------
Si une frite n'a pas de mayo, alors elle ne pourra pas aller à la piscine

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

  [VBA Excel]Pied à l'étrier: Userform

 

Sujets relatifs
macro excel qui imprime si la feuille existe uniquementProblème VBA Attachment Email
Bibliotheque de formes dans VBAVBA calculette, probleme de ligne !
[VBA Excel][Résolu] Aide à la mise-en-pageimprimer des feuilles excel générées à partir d'une liste de données
aide formule excelVBA excel fonctionne en 2010 et plante en 97?
Plus de sujets relatifs à : [VBA Excel]Pied à l'étrier: Userform


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