IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème avec mon user-form


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Problème avec mon user-form
    Bonjour à tous,
    j'ai vraiment un gros problème.
    je débute sur VBA, et là j'ai un gros souci avec mon user-form.
    voici ce que je voudrais faire:
    A savoir:
    - le bouton "effacer les données" ne devrait pas supprimer toutes les lignes du tableau, mais seulement supprimer la ligne précédente.
    - Je n'arrive pas à faire apparaitre les boutons "réduire" et "agrandir" dans la macro "saisieclient" pour mettre mon formulaire en plein écran.
    - et lorsque je clic sur "enregistrer" les données s'enregistre et le formulaire se ferme. Mais je voudrais qu'après l'enregistrement il reste ouvert.
    Pourriez-vous m'aider?

    Voici le fichier

    https://drive.google.com/file/d/0B4h...it?usp=sharing

    Encore merci.
    Cordialement.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    je débute sur VBA
    Etant donné votre niveau débutant, je ne sais pas si vous pourrez appréhender facilement la piste compliquée que j'indique plus bas.
    Le VBA Excel ne sait pas tout faire et, pour certaines choses, on est obligé de faire de la programmation Windows par le biais des APIs.
    Je ne me suis pas préoccupé de l'image de fonds du UserForm aussi l'ai-je délibérément viré.

    1) Effacez les codes du module Standard et de la fenêtre de code du UserForm
    2) Copiez le code suivant dans un module Standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    '--- APIs ---
    Declare Function FindWindow& Lib "user32.dll" Alias "FindWindowA" ( _
        ByVal lpClassName As String, ByVal lpWindowName As String)
    Declare Function GetWindowLong& Lib "user32.dll" Alias "GetWindowLongA" ( _
        ByVal hwnd As Long, ByVal nIndex As Long)
    Declare Function SetWindowLong& Lib "user32.dll" Alias "SetWindowLongA" ( _
        ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long)
    Declare Function ShowWindow& Lib "user32.dll" ( _
        ByVal hwnd As Long, ByVal nCmdShow As Long)
     
    '--- Constante GetWindowLong ---
    Const GWL_STYLE As Long = -&H10
    '--- Constantes SetWindowLong ---
    Const WS_THICKFRAME = &H40000                                                 'Le cadre peut être redimensionné
    Const WS_MINIMIZEBOX = &H20000                                                'Bouton Réduire
    Const WS_MAXIMIZEBOX = &H10000                                                'Bouton Agrandir
    Const WS_FRAME_MINI_MAXI = WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX  'Fusion des 3 constantes ci-dessus
    '--- Constante ShowWindow ---
    Const SW_MAXIMIZE As Long = &H3
     
    '--- Variable publique ---
    Public USFhwnd&
     
    '#########################
    Sub GetHwndUSF(USFCaption As String)
    '--- Handle du UserForm ---
    USFhwnd& = FindWindow(vbNullString, USFCaption)
    End Sub
     
    Sub BoutonsMiniMaxi(Optional dummy As Byte)
    '--- Boutons Réduire et Agrandir du UserForm ---
    SetWindowLong USFhwnd&, GWL_STYLE, GetWindowLong(USFhwnd&, GWL_STYLE) Xor WS_FRAME_MINI_MAXI
    End Sub
     
    Sub USFPleinEcran(Optional dummy As Byte)
    '--- Fenêtre du UserForm en plein écran ---
    ShowWindow USFhwnd&, SW_MAXIMIZE
    End Sub
    '########################
     
     
    '/// votre code ///
    Sub saisieclient()
    UserForm1.Show
    End Sub
    3) Copiez le code suivant dans la fenêtre de code du UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    '--- Variables (portée niveau module) ---
    Dim OldWidth As Single
    Dim OldHeight As Single
    '----------------------------------------
     
    Private Sub CommandButton1_Click()
    Dim der_ligne&, j%
    der_ligne = Range("A65536").End(xlUp).Row + 1
    For j = 1 To 4
      Cells(der_ligne, j).Value = Controls("TextBox" & j).Value
    Next j
    For j = 2 To 4
      Me.Controls("TextBox" & j).Value = ""
    Next j
    Call IncrementeNumero
    End Sub
     
    Private Sub CommandButton2_Click()    'effacer
    Dim VarReponse As String
    Dim SupprLigne As Long
    SupprLigne = Range("A65536").End(xlUp).Row
    If SupprLigne = 3 Then Exit Sub   'si ligne de titres, on sort et on n'efface rien
    VarReponse = MsgBox("Effacer les données du N° " & Range("A" & SupprLigne) & "", vbYesNo, "Alerte")
    If VarReponse = vbNo Then Exit Sub
    Range("A" & SupprLigne & ":D" & SupprLigne).ClearContents
    Call IncrementeNumero
    End Sub
     
    Private Sub IncrementeNumero()
    If IsEmpty(Range("A4").Value) Then
      Me.TextBox1.Value = 1
    Else
      Me.TextBox1.Value = Range("A65536").End(xlUp).Value + 1
    End If
    End Sub
     
    '##################################
    Private Sub UserForm_Activate()
    '--- Fenêtre du UserForm en plein écran ---
    Call USFPleinEcran
    End Sub
     
    Private Sub UserForm_Initialize()
    '--- Handle du UserForm ---
    GetHwndUSF (Me.Caption)
    '--- Boutons Réduire et Agrandir du UserForm ---
    Call BoutonsMiniMaxi
    '--- Mémorisations de hauteur et largeur du UserForm ---
    OldHeight = Me.Height
    OldWidth = Me.Width
     
    '/// votre traitement ///
    Call IncrementeNumero
    End Sub
     
    Private Sub UserForm_Resize()
    Dim NewWidth As Single
    Dim NewHeight As Single
    '--- Limitation du minimum ---
    If Me.Width < 300 Or Me.Height < 200 Then Exit Sub
    '--- Redimensionnement du UserForm ---
    NewWidth = Me.Width / OldWidth
    NewHeight = Me.Height / OldHeight
    On Error Resume Next
    Me.Zoom = IIf(NewWidth < NewHeight, NewWidth, NewHeight) * 100
    If Err <> 0 Then
      Me.Zoom = 40
      Err.Clear
    End If
    End Sub
     
    Private Sub UserForm_Terminate()
    USFhwnd& = 0
    End Sub
    Je mets un classeur exemple en pièce jointe pour faciliter.
    Bon courage.

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut heu
    bonjour
    pour un débutant on peut faire autrement

    mettre un bouton dans le userform" cacher" et dans sa macro mettre me.hide

    et mettre un bouton dans le sheets" montrer le userform" et mettre dans sa macro userform1.show 0

    sachant que hide ne vide pas la mémoire au réaffichage les données sont pas perdues

    tout bêtement

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/01/2012, 14h37
  2. [Mail] Problème avec mon script d'envoi de mail
    Par leroivert dans le forum Langage
    Réponses: 18
    Dernier message: 02/12/2005, 00h26
  3. Problème avec mon service mysql et PhpMyAdmin
    Par Fixazo dans le forum Outils
    Réponses: 1
    Dernier message: 28/08/2005, 18h02
  4. problème avec mon lecteur CD
    Par leo13 dans le forum Périphériques
    Réponses: 3
    Dernier message: 16/08/2005, 11h21
  5. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 08h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo