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 :

Analyse de code partie par partie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut Analyse de code partie par partie
    Bonjour,
    je voulais vous demander vos avis sur différentes partie d'un code concernant un userfom (4 combobox et un bouton de commande) et me dire si chaque partie est rédigée correctement. J'ai découpé dans mon message les différentes partie du code de l'userform.
    Voici donc ces parties :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Initialize()
    Feuil1.unprotect Password:="toto"
    Feuil1.ListObjects("Tableau1").AutoFilter.ShowAllData
    End Sub
    Ici, je lui demande de filtrer par rapport à la colonne 3. J'avais remarqué que lorsque je me trompais de choix dans la combobox et que j'en choisissais un autre dans la foulée il ne "défiltrait" pas le précédent choix. Du coup, je lui demande de défiltrer puis de filtre. Je ne sais pas si c'est la bonne méthode. J'ai eu cette idée. C'est la première fois que je fais cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ComboBox1_Change()
    lieu = ComboBox1.Value
    Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=3
     Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=3, Criteria1:=lieu
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ComboBox2_Change()
    couleurs = ComboBox2.Value
    Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=5
     Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=5, Criteria1:=couleurs
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ComboBox3_Change()
    competences = ComboBox3.Value
    Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=6
    Feuil1.ListObjects("Tableau1").Range.AutoFilter Field:=6, Criteria1:=competences
    End Sub
    Là c'est le code que THEZE m'a adapté. J'ai modifié juste un poil pour l'adapter à mon cas mais bon normalement c'est nickel.
    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
     
    Private Sub CommandButton1_Click()
     
        Dim Commentaire As String
        Dim Cel As Range
     
         nom = ComboBox4.Value  'là il ne filtre pas mais se sert de cette donnée pour la chercher dans le tableau
     
        Set Cel = Feuil1.Range("7:7").Find(nom, , xlValues, xlWhole, , , False)
     
        'il faut contrôler si un Range est bien retournée !
        If Not Cel Is Nothing Then
     
            colonne = Cel.Column
            ligne = Cel.Row '<-- ici, c'est forcément 7 !
     
            Commentaire = "" 'facultatif, mais au cas où tu relances la macro, ça va d'abord vider la variable
     
            With Sheets("saisie")
     
                For Each Cel In .Range(.Cells(ligne + 3, colonne + 2), .Cells(ligne + 1949, colonne + 2))
     
                    'si visible (suite au filtrage)
                    If Cel.EntireRow.Hidden = False Then
     
                        If Cel.Text <> "" Then Commentaire = Commentaire & "- " & Cel.Text & vbNewLine
     
                    End If
     
                Next Cel
     
            End With
     
            Sheets(ComboBox4.Value).Select
     
            'charge le formulaire en mémoire
            Load UserForm14
     
            With UserForm14
                'paramètre pour le label
                .Label1.Caption = "Voici les commentaires obtenus par " & ComboBox4.Value & " dans la période " & ComboBox1.Value & " avec le niveau " & ComboBox2.Value & " pour la compétence " & ComboBox3.Value
     
     
                'paramètre le TextBox
                .TextBox1.MultiLine = True
                .TextBox1.WordWrap = True
                .TextBox1.Text = Commentaire 'affectation de texte
     
                'affichage visuel du formulaire
                .Show
     
            End With
     
        Else
     
            MsgBox "La valeur '" & nom & "' n'a pas été trouvée !"
     
        End If
     
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Terminate()
    Feuil1.protect Password:="toto"
    End Sub

  2. #2
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2015
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2015
    Messages : 77
    Par défaut
    Bonjour,

    je me permets de remonter mon post. En effet, ce code provoque une fermeture d'excel et windows recherche une solution au pb qu'il ne trouve pas. Je peux relancer le fichier sans pb mais j'ai peur qu'un jour je ne puisse plus et cela serait embêtant même si j'ai fait d'autres sauvegardes au cas où.... Ce qui est le plus "drôle", c'est que ce code fonctionne parfaitement quand je clique sur le bouton de commande et que je suis situé en haut de la feuille et plante quand je clique sur ce bouton et que je suis en bas de la feuille (bouton que je peux encore voir car il est sur une zone figée).
    Voilà, et je me demandais si je n'ai pas eu de réponse car personne n'a vu un truc qui puisse provoquer cela ?
    Merci

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/04/2011, 11h55
  2. Lire une table partie par partie
    Par hoccha dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/01/2010, 11h06
  3. Analyse XML impossible sur une partie de code
    Par manuso dans le forum Langage
    Réponses: 10
    Dernier message: 09/11/2009, 18h43
  4. Réponses: 13
    Dernier message: 11/05/2006, 14h15

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