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 :

VBA a but statistique (suite) [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Consultant E-Learning
    Inscrit en
    Avril 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant E-Learning
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 62
    Par défaut VBA a but statistique (suite)
    Bonjour

    Je pensais pouvoir m'en sortir pour la suite, mais non, c'est vraiment trop complexe !

    Alors, voilà.

    J'ai un formulaire pour faire des statistiques, mais pour faire mes formules, il me manque encore des données. Donc, j'ai voulu rajouter un bouton option (nouvelle opportunité) pour que j'ai un "un" dans une colonne qui me permette de faire mon total et ainsi faire ma formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Ligne15) = Me.OptionButton1.Value = Vrai
    Mais ça ne marche pas !

    Help !!!

    Et le bouton rouge de ma feuille ne marche pas non plus (annuler la dernière saisie) en cas d'erreur , c'est toujours pratique.

    Merci

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Ligne, 15) = IIf(Me.OptionButton1.Value, "Vrai", "")

    2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Ligne = Cells(Rows.Count, 1).End(xlUp).Row
    If Ligne > 1 Then
        If MsgBox("Voulez-vous supprimer la dernière ligne de la feuille " & ActiveSheet.Name & "?", vbYesNo + vbDefaultButton2) = vbYes Then
            Rows(Ligne).ClearContents
            Ligne = Ligne - 1
        End If
    Else
        MsgBox "Aucune ligne à supprimer"
    End If
    Des remarques importantes pour la suite de ton projet.

    Essaies de mettre en début de chaque module Option Explicit qui devra t'obliger à déclarer toutes tes variables

    Essaies de nommer tes contrôles convenablement (pour après pouvoir se situer dans le code)

    TxtDate est mieux que TextBox1
    CboUnite mieux que ComboBox1
    BtnInfirm mieux que CommandButton1

    Pour les Chekbox, je propose un nom générique et un suffixe indiquant la colonne à laquelle il se rapporte.

    Je propose aussi, de simplifier la conception. par exemple, on aura un seul Userform qui permet l'ajout, la modification et la suppression des données.
    L'userform sera appelé par exemple par un double clique sur la colonne A, si elle est vide, on aura un ajout et si elle est pleine on aura soit une modification, soit une suppression.


    Bon, ce sont là des propositions non obligatoires mais seraient d'une utilité grande quand au développement du projet.

  3. #3
    Membre confirmé
    Femme Profil pro
    Consultant E-Learning
    Inscrit en
    Avril 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant E-Learning
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 62
    Par défaut Et pour effacer tous ?
    Merci (quoique j'ai pas tout compris dans les changements de nom de module ou de contrôle) Je débute et on m'aide beaucoup sur ce site !

    Donc, pourrais-tu me dire aussi comment on fait pour avoir le meme bouton que "supprimer la dernière saisie", mais pour supprimer tout le contenu du fichier (sauf les titres des colonnes). Moi, avec mon Cells.clear, je supprime vraiment tout...!

    Merci

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Dans la phase de développement, lorsque tu insère un textbox sur un formulaire, il a un nom par défaut TextBox1, TextBox2...
    Quand tu laisses ces nom tels, il seras plus tard plus difficile connaitre à quoi sert TextBox1

    Si tu renomme ton Textbox1 par TxtDate par exemple (clique droit sur le textbox, propriétés..), partout ailleurs tu sauras qu'il s'agit d'un textbox pour saisir ta date.

    Bon, je me suis amusé a retravailler ton fichier (j'ai rien en ce moment) en renommant tous les contrôles et en supprimant tes boutons sur les feuilles et sur l'userform.

    Ja'i prévu 3 boutons:
    BtnAjout: pour ajouter ou modifier une ligne
    BtnSupp: pour supprimer une ligne
    BtnAnnul: pour fermer l'userform sans rien enregistrer

    j'ai ajouté une module standrad avec ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
     
    Public Ligne As Long
    Dans le module ThisWorkbook
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
     
    If Target.Row > 1 Then
        Cancel = True
        Ligne = Target.Row
        UserForm1.Show
    End If
    End Sub
    Ce code permet d'ouvrir l'userform en double cliquant sur une cellule.

    Si la ligne est vide, l'userform sert à ajouter une ligne de donnée (le bouton BtnSupp est caché)

    Si la ligne est pleine, l'userform sert soit à modifier cette ligne ou la supprimer. Les données existantes sont reportées sur l'userform.


    Code de l'userform (peu commenté)
    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    Option Explicit
     
    Private Sub UserForm_Initialize()
     
    With Me.LblTitre
        .Caption = UCase(ActiveSheet.Name)
        .BackColor = ActiveSheet.Tab.Color
    End With
     
    'si la ligne est vide
    If Range("A" & Ligne) = "" Then
        Ligne = Cells(Rows.Count, 1).End(xlUp).Row + 1
        Me.BtnSupp.Visible = False
        With Me.BtnAjout
            .Caption = "Ajouter"
            .ForeColor = 13369344
        End With
        'si la ligne est pleine
    Else
        With Me.BtnSupp
            .Visible = True
            .ForeColor = 200
        End With
        With Me.BtnAjout
            .Caption = "Modifier"
            .ForeColor = 26112
        End With
        'ici on importe les données de la feuille vers l'userform
        Import
    End If
    End Sub
     
    Private Sub TxtNumForm_Change()
     
    Me.TxtNumForm = UCase(Me.TxtNumForm)
    End Sub
     
    Private Sub BtnAjout_Click()
    Dim Incomplet As Boolean
    Dim Ctrl As Control
     
    If TestValidite Then
        For Each Ctrl In Me.FrmGeneral.Controls
            If Ctrl = "" Then
                Incomplet = True
                MsgBox "Saisie incomplète"
                Exit For
            End If
        Next Ctrl
     
        If Not Incomplet Then
            Transfert
            Unload Me
        End If
    Else
        MsgBox "Erreur de saisie, Vérifier la validité des données saisies"
    End If
    End Sub
     
    Private Sub BtnSupp_Click()
     
    If MsgBox("Voulez-vous supprimer la ligne " & Ligne & " de la feuille " & ActiveSheet.Name & "?", vbYesNo + vbDefaultButton2) = vbYes Then
        Rows(Ligne).Delete
        Unload Me
    End If
    End Sub
     
    Private Sub BtnAnnul_Click()
     
    Unload Me
    End Sub
     
    'Fonction booléenne qui permet de vérifier la validité des données saisie par indication
    Private Function TestValidite() As Boolean
    Dim NotValid As Boolean
     
    NotValid = Me.Choix11 And (Me.Choix10 Or Me.Choix12 Or Me.Choix13)
    NotValid = NotValid Or (Me.Choix10 And (Me.Choix12 Or Me.Choix13))
    NotValid = NotValid Or (Me.Choix6 And Me.Choix9)
     
    TestValidite = Not NotValid
    End Function
     
    'Procédure qui permet d'envoyer les données à partir de l'userform vers la feuille concernée
    Private Sub Transfert()
    Dim k As Byte
     
    Range("A" & Ligne) = Me.TxtDate
    Range("B" & Ligne) = Me.TxtNumForm
    Range("C" & Ligne) = Me.CboDuree
    Range("D" & Ligne) = Me.CboUnite
     
    For k = 5 To 13
        Cells(Ligne, k) = IIf(Me.Controls("CHOIX" & k), 1, "")
    Next k
     
    Range("N" & Ligne) = Me.TxtGestAdd
    Range("O" & Ligne) = IIf(Me.NouvOpp, "VRAI", "")
    End Sub
     
    'Procédure qui permet d'envoyer les données à partir de la feuille concernée vers l'userform
    Private Sub Import()
    Dim k As Byte
     
    Me.TxtDate = Range("A" & Ligne)
    Me.TxtNumForm = Range("B" & Ligne)
    Me.CboDuree = Range("C" & Ligne)
    Me.CboUnite = Range("D" & Ligne)
     
    For k = 5 To 13
        Me.Controls("CHOIX" & k) = Cells(Ligne, k) <> ""
    Next k
     
    Me.TxtGestAdd = Range("N" & Ligne)
    Me.NouvOpp = Range("O" & Ligne) <> ""
    End Sub
    Ici exemple de ton fichier réadapté

  5. #5
    Membre confirmé
    Femme Profil pro
    Consultant E-Learning
    Inscrit en
    Avril 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant E-Learning
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2013
    Messages : 62
    Par défaut houlà...trop compliqué ça
    Merci pour tout ce travail, mais là, je ne comprends plus rien, je ne crois pas que je vaisme lancer dans le changement de ce qui fonctionne déjà, j'ai trop galéré à le faire ...c'est mon premier VBA) !

    Par contre, pour qu'il soit complet, il faudrait que je puisse rajouter :

    - un code pour que si une des deux ckeckbox (Fha ou lavage) est cochée, ça me note un "1" dans la colonne 16 (P). Grâce à ça, je pourrais faire mes comptes sur ma feuille résultat et faire revenir les résultats dans mon formulaire.

    - un code pour vider mon fichier excel complet (sauf les titres), une remise à zéro en somme! J'ai essayé le cells.clear, mais ça m'efface tout, mêmes les titres !

    Merci encore !

    Nat

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    ça se complique si on désire compliquer et sans se donner le temps pour bien analyser. Je m'attendais à des demandes d'explication mais comme tu n'as pas le temps de tout étudier en continuant à demander des bouts de code ici et là, c'est une autre approche.

    Je ne critique aucunement votre travail jusque là. Potable ou non c'est une autre question mais parfois s'entêter dans la complication engendrera facilement une usine à gaz, difficile à maintenir et à développer. Tu peux t'en sortir momentanément d'autant plus ce que tu veux réaliser ça reste très basique et abordable. N'aies pas peur.

    Dans ton cas de figure (ton fichier avec ton code); comment tu prévois la correction ou modification d'une ligne de donnée?

    Par ailleurs, pour répondre à ta question comment effacer toutes les données.

    Tu sais calculer la dernière ligne remplie, disons N. Fais un un simple test si N>9 alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows("9:" & N).ClearContents

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA - Perte de données suite enregistrement en CSV
    Par la_caisse dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 25/04/2014, 18h12
  2. [XL-2010] VBA à but statistique
    Par nattalia dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 21/11/2013, 09h27
  3. [EXCEL - VBA] Problème ouverture fichier suite Macro Userform
    Par Guidhy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/04/2007, 09h18
  4. [VBA-E] Probleme macro suite à fichier partagé
    Par wice33 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/06/2006, 09h13
  5. [VBA-E] Copier à la suite...
    Par keyser22 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/01/2006, 17h08

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