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 :

Améliorer les performances générales de la macro [XL-2010]


Sujet :

Macros et VBA Excel

  1. #61
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re
    Re,

    Tu es le meilleur !! tout fonctionne parfaitement ! plus cas intégrer ça dans mon fichier principale.
    Pour information j'ai laisser les actions à la perte du focus des textboxs dates car si on reste dans le cadre on ne perd pas le focus du cadre.

    Je te remercie grandement, je t'envoi un MP privé prochainement.

    Je marquerais le sujet comme résolut après l'intégration à mon fichier principale.

    Je te remercie pour ton implication titanesque dans mes problèmes de code.

    Cordialement,
    Passepartout007

  2. #62
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    A tout hasard une proposition d'organisation un peu différente, avec un tri en temps réel.

    Je ne connaissais pas trop les listView, du coup j'ai regardé et j'ai adapté le code du bouble-click sur le listview


    Bonne continuation dans ton projet.

    ++
    Qwaz
    Fichiers attachés Fichiers attachés

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #63
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re
    Bonjour,
    Merci pour cette proposition,
    Je te donne un retour demain.
    Cordialement,
    Passepartout007

  4. #64
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re
    Bonjour,

    Ton dernier fichier semble correct, je n'ais pas fais tout les testes mais cela pourra probablement être la prochaine évolution du formulaire.
    Je vais rester dans le style actuel et rendre déjà fonctionnel tout le formulaire comme cela.

    Cordialement,
    Passepartout007

    PS : Je garde ce fichier pour plus tard.

  5. #65
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    J'ai une petite question, je fais appel a une fonction. Comment faire pour que celle-ci me renvoi le résultat et non pas un vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TxtDateFin.Text = Insertslach(TxtDateFin.Text)
    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
    Function Insertslach(strDate As String) As String
    Dim YearValue As Long
      Dim MonthValue As Long
      Dim DayValue As Long
     
    If Len(strDate) = 8 Then
        DayValue = Left(strDate, 2) * 1
        MonthValue = Mid(strDate, 3, 2) * 1
        YearValue = Right(strDate, 4) * 1
     
    strDate = DateSerial(YearValue, MonthValue, DayValue)
    Else
    strDate = strDate
    End If
    End Function
    Cordialement,
    Passepartout007

  6. #66
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re
    Re,

    J'ai trouvé !!
    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
    Function Insertslach(strDate As String) As String
    Dim YearValue As Long
      Dim MonthValue As Long
      Dim DayValue As Long
     
    If Len(strDate) = 8 Then
        DayValue = Left(strDate, 2) * 1
        MonthValue = Mid(strDate, 3, 2) * 1
        YearValue = Right(strDate, 4) * 1
     
    Insertslach = DateSerial(YearValue, MonthValue, DayValue)
    Else
    Insertslach = strDate
    End If
    End Function

  7. #67
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re : Poste de contrôle des dates version final
    Bonjour,

    Je poste ici le contrôle des dates que j'effectue, N'hésite pas Qwazerty si tu as des remarques.

    A la sortie des éléments date :
    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
    Private Sub TxtDateDeb_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    'Lorsque le focus quitte la zone de texte on regarde si la date saisie est valide
        'On corrige le séparateur
        TxtDateDeb.Text = Replace(TxtDateDeb.Text, "-", "/")
        TxtDateDeb.Text = Insertslach(TxtDateDeb.Text)
        TxtDateColoration
    End Sub
     
     
    Private Sub TxtDateFin_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    'Lorsque le focus quitte la zone de texte on regarde si la date saisie est valide
        TxtDateFin.Text = Replace(TxtDateFin.Text, "-", "/")
        TxtDateFin.Text = Insertslach(TxtDateFin.Text)
        TxtDateColoration
     
    End Sub
     
    Private Sub FrValide_Exit(ByVal Cancel As MSForms.ReturnBoolean)
     
        TxtDateDeb.Text = Replace(TxtDateDeb.Text, "-", "/")
        TxtDateDeb.Text = Insertslach(TxtDateDeb.Text)
     
        TxtDateFin.Text = Replace(TxtDateFin.Text, "-", "/")
        TxtDateFin.Text = Insertslach(TxtDateFin.Text)
        'Les controles présents sur la frame ne perdent pas le focus si on clique sur un autre composant en dehors du frame... mais la frame elle perd le focus
        TxtDateColoration
    End Sub
    Fonction qui permet de modifier la saisie si on rentre 01021993 pas exemple (sans séparateur) :

    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
    Function Insertslach(strDate As String) As String
    Dim YearValue As String
      Dim MonthValue As String
      Dim DayValue As String
     
    If Len(strDate) = 8 Then
        DayValue = Left(strDate, 2)
        MonthValue = Mid(strDate, 3, 2)
        YearValue = Right(strDate, 4)
     
    Insertslach = DayValue & "/" & MonthValue & "/" & YearValue
    Else
        Insertslach = strDate
    End If
    End Function

    La macro qui permet de colorer les textbox :
    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
    Private Sub TxtDateColoration()
    Dim ValidDeb As Boolean, ValidFin As Boolean
    Dim CorrectDate As Boolean
        'On définie la couleur du fond en fonction du texte tapé
        'Le fond sera blanc si
        'Le texte est vide
        'La date est valide
        'le checkBox option date est décoché
        'Attention par contre avec IsDate, il reconnait 11/15/2018 comme une date valide à cause de l'écriture anglosaxonne Mois/Jour/Année
        'Je te laise implémenter ta solution à la place si tu le souhaites
        ValidDeb = DateValide(TxtDateDeb.Text) Or TxtDateDeb.Text = "" Or Not CkBDeltaDate.Value 'IsDate(TxtDateDeb.Text) Or TxtDateDeb.Text = "" Or Not CkBDeltaDate.Value
        ValidFin = DateValide(TxtDateFin.Text) Or TxtDateFin.Text = "" Or Not CkBDeltaDate.Value 'IsDate(TxtDateFin.Text) Or TxtDateFin.Text = "" Or Not CkBDeltaDate.Value
     
        'On met en place la coloration
        TxtDateDeb.BackColor = IIf(ValidDeb, &HFFFFFF, &HFF&)
        TxtDateFin.BackColor = IIf(ValidFin, &HFFFFFF, &HFF&)
     
     
        'On masque/affiche la label d'avertissement
        LblInvalid.Visible = Not (ValidDeb And ValidFin)
     
        'On détermine l'activation du bouton Rechercher
        EnableFindBt
     
    End Sub
    Et enfin la macro qui permet de vérifier si la date est valide ou non :

    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
    Dim MonthValue As Long
    Dim DayValue As Long
    DateValide = True
     
    If Not strDate Like "##/##/####" And Not strDate Like "##-##-####" Then
     
        DateValide = False
    Else
        'On extrait les 3 parties
        TabDate = Split(strDate, "/")
        YearValue = TabDate(2)
        MonthValue = TabDate(1)
        DayValue = TabDate(0)
        'On vérifie le retour de isdate()
            If YearValue < 1900 Then
                DateValide = False
            Else
                Select Case MonthValue
                    Case 1, 3, 5, 7, 8, 10, 12
                        If DayValue > 31 Then DateValide = False
                    Case 4, 6, 9, 11
                        If DayValue > 30 Then DateValide = False
                    Case 2
                        If YearValue Mod 400 = 0 Or (YearValue Mod 100 <> 0 And YearValue Mod 4 = 0) Then
                            If DayValue > 29 Then DateValide = False
                        Else
                        If DayValue > 28 Then DateValide = False
                        End If
                    Case Else
                        If strDate <> "" Then
                            DateValide = False
                        Else
                            DateValide = True
                        End If
                End Select
            End If
    End If
    End Function
    Cordialement,
    Passepartout007

  8. #68
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re
    Bonjour Qwazerty

    J'ai des questions !

    sur le code
    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
    Sub FillList(Destination As ComboBox, Tab_Source As ListObject, Optional ConditionFTx As Boolean = False)
    Dim StrSource As String
    Dim isource As Long
    Dim iList As Integer
    Dim MemoMatchRequired As Boolean
    Dim MemoStyle As fmStyle
    Dim FTtest As Boolean
    Dim NomColonne As String
    Dim Tab_Colonne As Variant
    Dim Tab_TypeFT As Variant
     
        'On vide la destination
        Destination.Clear
     
        'On mémorise la politique utilisée avec ce combo
        MemoMatchRequired = Destination.MatchRequired
        MemoStyle = Destination.Style
     
        'On désactive le matchRequired
        Destination.MatchRequired = False
        'On utilise le combo en downcombo, ça permet de pouvoir faire des saisies
        Destination.Style = fmStyleDropDownCombo
     
        'On élimine un éventuelle ";*" dans le tag (cas des champs permttant une recherche partielle
        NomColonne = Replace(Destination.Tag, ";*", "")
     
        'On Place les données de la colonne pointée par le tag du composant Destination dans un tableau interne
        Tab_Colonne = Tab_Source.ListColumns(NomColonne).DataBodyRange.Cells.Value
        'On fait la même chose pour la colonne Type
        Tab_TypeFT = Tab_Source.ListColumns("Type").DataBodyRange.Cells.Value
     
        'On boucle sur le contenu de la colonne  (Tag est renseigné en mode design)
        For isource = 1 To UBound(Tab_Colonne)
            'On récupère le contenu de la valeur pointée
            StrSource = Tab_Colonne(isource, 1)
     
            'On ne tient pas compte des lignes vides
            If StrSource <> "" Then
                'On regarde la condition FT
                ConditionFTx = Tab_TypeFT(isource, 1) = "FTS" Or Tab_TypeFT(isource, 1) = "FTA"
     
                If Not ConditionFTx Or (ConditionFTx And FTtest) Then
                    'On place le contenu de la cellule dans le Combo pour le forcer à séléctionner cette entrée si elle est déjà dans sa list
                    Destination.Value = StrSource
                    'Si acune entrée n'est séléctionnée, c'est que ce mot n'existe pas dans la list
                    If Destination.ListIndex = -1 Then
                        'On en profite pour trier par liste alpha en plaçant ce nouvel item juste avant l'item contenant un texte "supérieur"
                        For iList = 0 To Destination.ListCount - 1
                            If Destination.List(iList) > StrSource Then
                                'On insert le nouvel item à cette place
                                Destination.AddItem StrSource, iList
                                'On quitte la boucle
                                Exit For
                            End If
                        Next
                        'On controle que l'item a été ajouté, si ça n'est pas le cas, on le place au bout de la list
                        'Ce sera vrai dans deux cas
                        'La liste est vide Destination.ListCount et iList vallent 0
                        'Le nouvelle item est "supérieur" à tous ceux déjà présent dans la liste
                        'On est donc arrivé au bout de la boucle For, iList vaut donc (Destination.ListCount - 1) + 1  car il s'appréter à faire une boucle en plus
                        '   mais puisque sa valeur dépasse la borne haute qu'on lui a fixé (Destination.ListCount - 1), il ne retourne pas au début du For
                        '   Donc iList = Destination.ListCount - 1 + 1 = Destination.ListCount
                        If iList = Destination.ListCount Then Destination.AddItem StrSource
                    End If
                End If
            End If
        Next
     
        'On ajoute une entrée vide si elle n'existe pas
        'Destination.Value = ""
        'If Destination.ListIndex = -1 Then
        Destination.AddItem "", 0
     
        'On remet en place la politique
        Destination.MatchRequired = MemoMatchRequired
        Destination.Style = MemoStyle
     
    End Sub
    Ce code permet grâce à la base de mettre dans la liste les de chaque combobox à jours, mais également de créer la base de données tab_Base.
    est t'il possible de ne pas incrémenter les comboboxs (vu que je le fais autrement) et juste de créer la base ?

    Cordialement,
    Passepartout007

  9. #69
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re
    J'ai effectuer les modifications en supprimant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If iList = Destination.ListCount Then Destination.AddItem StrSource
    Cela ne pausera t'il pas de problème par la suite ?

    Il faut également supprimer les autre add, mais jais peur de faire une bêtise dans le code. Enlever le ADD de la base de données et non le Add des comboboxs



    Cordialement,
    Passepartout007

  10. #70
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re
    Bonjour,

    Apres avoir travaillé dessus j'ai compris ou était tout l'incrémentation dans les combobox.

    Voici donc le nouveau code retravailler
    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
     
    Sub FillList(Destination As ComboBox, Tab_Source As ListObject, Optional ConditionFTx As Boolean = False)
     
    Dim MemoMatchRequired As Boolean
    Dim MemoStyle As fmStyle
    Dim NomColonne As String
    Dim Tab_Colonne As Variant
    Dim Tab_TypeFT As Variant
     
        'On vide la destination
        Destination.Clear
     
        'On mémorise la politique utilisée avec ce combo
        MemoMatchRequired = Destination.MatchRequired
        MemoStyle = Destination.Style
     
        'On désactive le matchRequired
        Destination.MatchRequired = False
        'On utilise le combo en downcombo, ça permet de pouvoir faire des saisies
        Destination.Style = fmStyleDropDownCombo
     
        'On élimine un éventuelle ";*" dans le tag (cas des champs permttant une recherche partielle
        NomColonne = Replace(Destination.Tag, ";*", "")
     
        'On Place les données de la colonne pointée par le tag du composant Destination dans un tableau interne
        Tab_Colonne = Tab_Source.ListColumns(NomColonne).DataBodyRange.Cells.Value
        'On fait la même chose pour la colonne Type
        Tab_TypeFT = Tab_Source.ListColumns("Type").DataBodyRange.Cells.Value
     
     
        'On remet en place la politique
        Destination.MatchRequired = MemoMatchRequired
        Destination.Style = MemoStyle
     
    End Sub
    Dites moi si vous voyer des incohérences

  11. #71
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Citation Envoyé par Passepartout007 Voir le message
    Bonjour,

    J'ai une petite question, je fais appel a une fonction. Comment faire pour que celle-ci me renvoi le résultat et non pas un vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TxtDateFin.Text = Insertslach(TxtDateFin.Text)
    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
    Function Insertslach(strDate As String) As String
    Dim YearValue As Long
      Dim MonthValue As Long
      Dim DayValue As Long
     
    If Len(strDate) = 8 Then
        DayValue = Left(strDate, 2) * 1
        MonthValue = Mid(strDate, 3, 2) * 1
        YearValue = Right(strDate, 4) * 1
     
    strDate = DateSerial(YearValue, MonthValue, DayValue)
    Else
    strDate = strDate
    End If
    End Function
    Cordialement,
    Passepartout007

    Simplement en lui disant

    D'ailleurs, il vaut mieux éviter de travailler sur une variable passée en paramètre, soit tu crées une variables dans la procédure que tu utilise pour stocker ton résultat provisoire.
    Soit tu utilises Insertslach

    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
    Function Insertslach(strDate As String) As String
    Dim YearValue As Long
      Dim MonthValue As Long
      Dim DayValue As Long
     
    If Len(strDate) = 8 Then
        DayValue = Clng(Left(strDate, 2))
        MonthValue = Mid(strDate, 3, 2) * 1
        YearValue = Right(strDate, 4) * 1
     
    Insertslach = DateSerial(YearValue, MonthValue, DayValue)
    Else
    Insertslach = strDate
    End If
    End Function
    Tu devrais regarder du coté des expressions rationnelles pour faire ce que tu souhaites. Ainsi tu pourrais aussi garder comme valides des dates notées 1/12/18 ou 01/12/2018.
    De plus en ne vérifiant que si la date comporte 8 caractères, ton code va planter si l'utilisateur inscrit 1/5/2018, ça fait bien 8 caractères... mais je te laisse deviner la suite

    Pour la conversion texte vers numérique regarde CLng, CInt, C... tu les trouveras dans l'aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DayValue = Clng(Left(strDate, 2))
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #72
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Citation Envoyé par Passepartout007 Voir le message
    Il faut également supprimer les autre add, mais jais peur de faire une bêtise dans le code. Enlever le ADD de la base de données et non le Add des comboboxs
    Aucun risque, ce code ne crée pas de base de donnée, il rempli juste le contenu de la liste du combo Destination

    Citation Envoyé par Passepartout007 Voir le message
    Bonjour,

    Apres avoir travaillé dessus j'ai compris ou était tout l'incrémentation dans les combobox.

    Voici donc le nouveau code retravailler
    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
     
    Sub FillList(Destination As ComboBox, Tab_Source As ListObject, Optional ConditionFTx As Boolean = False)
     
    Dim MemoMatchRequired As Boolean
    Dim MemoStyle As fmStyle
    Dim NomColonne As String
    Dim Tab_Colonne As Variant
    Dim Tab_TypeFT As Variant
     
        'On vide la destination
        Destination.Clear
     
        'On mémorise la politique utilisée avec ce combo
        MemoMatchRequired = Destination.MatchRequired
        MemoStyle = Destination.Style
     
        'On désactive le matchRequired
        Destination.MatchRequired = False
        'On utilise le combo en downcombo, ça permet de pouvoir faire des saisies
        Destination.Style = fmStyleDropDownCombo
     
        'On élimine un éventuelle ";*" dans le tag (cas des champs permttant une recherche partielle
        NomColonne = Replace(Destination.Tag, ";*", "")
     
        'On Place les données de la colonne pointée par le tag du composant Destination dans un tableau interne
        Tab_Colonne = Tab_Source.ListColumns(NomColonne).DataBodyRange.Cells.Value
        'On fait la même chose pour la colonne Type
        Tab_TypeFT = Tab_Source.ListColumns("Type").DataBodyRange.Cells.Value
     
     
        'On remet en place la politique
        Destination.MatchRequired = MemoMatchRequired
        Destination.Style = MemoStyle
     
    End Sub
    Dites moi si vous voyer des incohérences
    Dans ce code modifié, les tableaux internes à la procédure sont renseignés mais tu n'en fais rien, ils sont simplement détruits arrivé au End Sub

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  13. #73
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Peux-tu poster ton fichier avec les tableaux contenant les valeurs qui seront placées dans les combobox stp.

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  14. #74
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re
    Salut Qwazerty,

    J'ai fais quelque mise à jours depuis mes demandes. Je te fais un retour demain matin, je n'ai pas accès au fichier actuellement.
    Je te pauserais mes questions demain matin. Mais dans l'ensemble le fichier fonctionne parfaitement bien.
    Merci pour tes conseils, je vais voir les possibilités de bug que tu m'a évoquer.
    Cordialement,
    Passepartout007

  15. #75
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    J'ai oublié de te poster le lien vers le tuto de Cafeine sur les expressions régulières.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  16. #76
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Qwazerty Voir le message
    Salut



    Simplement en lui disant


    D'ailleurs, il vaut mieux éviter de travailler sur une variable passée en paramètre, soit tu crées une variables dans la procédure que tu utilise pour stocker ton résultat provisoire.
    Soit tu utilises Insertslach


    Tu devrais regarder du coté des expressions rationnelles pour faire ce que tu souhaites. Ainsi tu pourrais aussi garder comme valides des dates notées 1/12/18 ou 01/12/2018.
    De plus en ne vérifiant que si la date comporte 8 caractères, ton code va planter si l'utilisateur inscrit 1/5/2018, ça fait bien 8 caractères... mais je te laisse deviner la suite

    ++
    Qwaz
    Bonjour Qwaz, j'ai complètement changer ma manière de travailler, je te montre ce que j'ai fais dis moi si cela te semble correct. Pour moi à l'utilisation tout fonctionne bien.
    J'ai voulu généraliser notre manière de renseigner les textboxs ou je rentrais une date j'ai donc ajouter des petite fonction.

    les variable sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public UserformActif As Object
    Public TextBoxActif As Object
    Public BTValidation As Object
    Tout d'abord quand l'on quitte Le texbox on n'as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBoxArriv1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Set UserformActif = FTSSaisie ' déclare que l'userform actif est RECHMOD
    Set TextBoxActif = TextBoxArriv1
    TxtDateColoration TextBoxArriv1
    Set BTValidation = CommandButtonValider
    Call EnabeldBtValid
    End Sub
    Dans ses appel je set l'userform que j'utilise (la page de l'userform) ici FTSSaisie ainsi que Le textbox que j'utilise.

    Après je fais appel TxtDateColoration :

    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
    Public Function TxtDateColoration(Date1 As String)
    Dim ValidDate As Boolean
        'On définie la couleur du fond en fonction du texte tapé
        'Le fond sera blanc si
        'Le texte est vide
        'La date est valide
        'le checkBox option date est décoché
     If Date1 Like "##-##-####" Then
     With ThisWorkbook
       With UserformActif
            With TextBoxActif
                .Value = Replace(Date1, "-", "/")
                Date1 = Replace(Date1, "-", "/")
            End With
        End With
     End With
    End If
     
        ValidDate = DateValide(Date1)
     
    With ThisWorkbook
       With UserformActif
            With TextBoxActif
                'On met en place la coloration
                .BackColor = IIf(ValidDate, &HFFFFFF, &HFF&)
            End With
        End With
     End With
    End Function
    Cette macro coloration fais appel à la macro DateValide pour savoir si la date est valide ou non :
    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
    If Not strDate Like "##/##/####" Then
     
        DateValide = False
    Else
     
        'On extrait les 3 parties
        TabDate = Split(strDate, "/")
        YearValue = TabDate(2)
        MonthValue = TabDate(1)
        DayValue = TabDate(0)
        'On vérifie le retour de isdate()
            If YearValue < 1900 Then
                DateValide = False
            Else
                Select Case MonthValue
                    Case 1, 3, 5, 7, 8, 10, 12
                        If DayValue > 31 Then DateValide = False
                    Case 4, 6, 9, 11
                        If DayValue > 30 Then DateValide = False
                    Case 2
                        If YearValue Mod 400 = 0 Or (YearValue Mod 100 <> 0 And YearValue Mod 4 = 0) Then
                            If DayValue > 29 Then DateValide = False
                        Else
                        If DayValue > 28 Then DateValide = False
                        End If
                    Case Else
                        If strDate <> "" Then
                            DateValide = False
                        Else
                            DateValide = True
                        End If
                End Select
            End If
    End If
    If strDate Like "" Then DateValide = True
    End Function
    Donc si la date est valide alors le backcolor reste blanc sinon elle se colore en rouge.

    il y à ensuite ses lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set BTValidation = CommandButtonValider
    Call EnabeldBtValid
    Elle font appel à la macro EnabeldBtValid :
    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
    Public Function EnabeldBtValid()
    Dim Ctrl As Control
    Dim R As String
    R = 0
    With UserformActif
     
        For Each Ctrl In UserformActif.Controls
     
            With Ctrl
                If Ctrl.Tag = "Rouge" Then
                    If .BackColor = &HFF& Then
     
                        R = R + 1
                    End If
                End If
            End With
        Next Ctrl
            If R > 0 Then
                BTValidation.Enabled = False
            Else
                BTValidation.Enabled = True
            End If
     
    End With
     
    End Function
    Cette macro permet de rendre le Bouton Validée disponible ou indisponible. Voila ce qui se passe à la perte de focus de la textbox.

    Pendant la saisie de la textbox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBoxArriv1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    TextBoxArriv1.Text = Insertslach(TextBoxArriv1.Text)
    End Sub
    A chaque appuis sur une touche cela fais appel à la macro Insertslach

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Function Insertslach(strDate As String) As String
     
    Select Case Len(strDate)
     
            Case 2, 5
            strDate = strDate & "/"
            Insertslach = strDate
    Case Else
        Insertslach = strDate
    End Select
     
    Suppr2 = Len(strDate)
     
    End Function
    Celle macro insert un slash à la saisie du 3eme et du 6eme caractère entre le deuxième caractère et le 3ème : on écris 12 puis on écris 3 automatiquement on n'auras 12/3. A la sortie de la textbox il y aura la vérification de la date pour vérifier que cela soit correct. Quand on supprime les caractère cela n'insert pas de slash car le nombre diminue et quand len = 2 on passe a len = 1 après.

    Voila pour la formalisation de saisie des textboxs.

    Dis moi ce que tu en pense et si tu vois de potentiel bug.

    Je te remercie pour tes retours.
    Bien à toi,
    Passepartout007

  17. #77
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Bonjour Qwazerty,
    Citation Envoyé par Qwazerty Voir le message
    Aucun risque, ce code ne crée pas de base de donnée, il rempli juste le contenu de la liste du combo Destination

    Dans ce code modifié, les tableaux internes à la procédure sont renseignés mais tu n'en fais rien, ils sont simplement détruits arrivé au End Sub
    ++
    Qwaz
    Dans la macro validation de la page RechMOD cette ligne fais appel à Tab_Base:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabParam(cstParam_Col, byParam) = Tab_Base.ListColumns(Tab_Tag(0)).Index
    Ici tab_Base va être initialiser quand cette ligne va faire appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RECHMOD.Tableau_Base = F_BD.ListObjects("Tab_Base_Excel")

    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
    'On ajoute une propriété au userform
    Property Let Tableau_Base(Value As ListObject)
        Set Tab_Base = Value
     
        'On renseigne les listes des combos liées au tableau base
        FillList CBoxUM, Tab_Base
        FillList CBoxType, Tab_Base
        FillList CBoxMateriel, Tab_Base, True
        FillList CBoxTache, Tab_Base, True
        FillList CBoxVersion, Tab_Base, True
        FillList ComboBoxRelecteur1, Tab_Base
        FillList ComboBoxRelecteur2, Tab_Base
        FillList ComboBoxRelecteur3, Tab_Base
        FillList ComboBoxRelecteur4, Tab_Base
        FillList ComboBoxRelecteur5, Tab_Base
        FillList CBoxNOrgane, Tab_Base
     
        'On vide leur contenu
        ClearControle
     
    End Property
    Cette macro fais donc appel a FillList :
    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
    Sub FillList(Destination As ComboBox, Tab_Source As ListObject, Optional ConditionFTx As Boolean = False)
     
    Dim MemoMatchRequired As Boolean
    Dim MemoStyle As fmStyle
    Dim NomColonne As String
    Dim Tab_Colonne As Variant
    Dim Tab_TypeFT As Variant
     
        'On vide la destination
        Destination.Clear
     
        'On mémorise la politique utilisée avec ce combo
        MemoMatchRequired = Destination.MatchRequired
        MemoStyle = Destination.Style
     
        'On désactive le matchRequired
        Destination.MatchRequired = False
        'On utilise le combo en downcombo, ça permet de pouvoir faire des saisies
        Destination.Style = fmStyleDropDownCombo
     
        'On élimine un éventuelle ";*" dans le tag (cas des champs permttant une recherche partielle
        NomColonne = Replace(Destination.Tag, ";*", "")
     
        'On Place les données de la colonne pointée par le tag du composant Destination dans un tableau interne
        Tab_Colonne = Tab_Source.ListColumns(NomColonne).DataBodyRange.Cells.Value
     
        'On remet en place la politique
        Destination.MatchRequired = MemoMatchRequired
        Destination.Style = MemoStyle
     
    End Sub
    Qui me semble utile dans ce cas.

    Et à la fin cela fais appel à :

    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
    Sub ClearControle()
        CBoxUM.Value = ""
        CBoxType.Value = ""
        CBoxMateriel.Value = ""
        CBoxNOrgane.Value = ""
        CBoxTache.Value = ""
        CBoxVersion.Value = ""
        CBoxDocValide.Value = ""
        CkBDeltaDate.Value = False
        TextBoxObserv.Value = ""
        ComboBoxRelecteur1.Value = ""
        ComboBoxRelecteur2.Value = ""
        ComboBoxRelecteur3.Value = ""
        ComboBoxRelecteur4.Value = ""
        ComboBoxRelecteur5.Value = ""
        TxtDateFin.Value = ""
        TxtDateDeb.Value = ""
     
    End Sub
    Si tu a le temps n'hésite pas à me faire un retour par rapport à cela. Actuellement cela fonctionne parfaitement.

    Cordialement,
    Passepartout007

  18. #78
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re
    Bonjour,

    Actuellement je travail sur le double-clik sur la listview :
    Bonjour,

    J'ai un problème d'index dans une listview et je ne comprend pas pourquoi .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub LVResult_DblClick()
    Dim ColumnHeader As MSComctlLib.ColumnHeader
    Dim Var As String
    Var = LVResult.SelectedItem.ListSubItems(0).Text
    MsgBox Var
    End Sub
    Ici on pointe à la ligne sélectionnée la colonne en index (0) cela me met donc le message d'erreur 35600 Index out of bounds sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var = LVResult.SelectedItem.ListSubItems(0).Text
    Je me suis donc dis que l'index de ma première colonne ne devais pas correspondre.
    J'ai donc tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub LVResult_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    Indice As String
     
        LVResult.Sorted = False
        LVResult.SortKey = ColumnHeader.Index - 1
     Indice = ColumnHeader.Index - 1
     MsgBox Indice
    Le message box m'indique bien un index de 0
    J'ai donc tester autre chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub LVResult_DblClick()
    Dim ColumnHeader As MSComctlLib.ColumnHeader
    Dim Var As String
    Var = LVResult.SelectedItem.ListSubItems(1).Text
    MsgBox Var
    End Sub
    Cela a fonctionné à merveille...
    je ne comprend donc pas pourquoi cela ne fonctionne pas avec l'indice 0 ....

    Sur un autre fils de discutions on ma proposer de passer de passer en VBA.net mais je ne sais pas trop ce que c'est j'ai vu que "Les Expressions Rationnelles appliquées en VBA Access" en parle. Faut que j'approfondie cela, si tu as une autre proposition n'hésite pas.

    Cordialement,
    Passepartout007

  19. #79
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Re : Travail sur lincrémentation des lists.
    Bonjour,

    Je travail sur l'incrémentation des lists de manière automatique, je défini des paramètres avant de faire appel à la macro :

    Voici mes variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Feuillebase As String
    Public FeuilleList As String
    Public PlageBase As Range
    Public Plagetype As Range
    Public PlageList As Range
    Public Nomcol As String
    Public MonTableautmp As String
    Public Montableau As String
    Public NumColList As String
    Public NumColBase As String
    Public Types As String
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub listTypeFTS()
    Feuillebase = "Base de données"
    FeuilleList = "ListesFTS"
    Set Plagetype = ThisWorkbook.Sheets(Feuillebase).Range("C2:C" & Sheets(Feuillebase).[C1048576].End(xlUp).Row)
    Set PlageBase = ThisWorkbook.Sheets(Feuillebase).Range("C2:C" & Sheets(Feuillebase).[C1048576].End(xlUp).Row)
    Set PlageList = ThisWorkbook.Sheets(FeuilleList).Range("A2:A" & Sheets(FeuilleList).[A1048576].End(xlUp).Row) 'PlageList est la colonne A de la base de données
    Types = "FT"
    Nomcol = "Type"
    Montableau = F_LFTS.ListObjects("List_TypeFTS")
     
    NumColList = 1
    NumColBase = 3
    Call Incementationlist
    End Sub
    Après avoir défini les paramettre voici la macro concerner :

    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
    Sub Incementationlist()
    Dim LList As Object
    Dim x As String
    Dim Cel As Range
    Dim V1 As String
    Dim V2 As String
    Dim D As String
    Dim c As Range
     
    Set LList = CreateObject("Scripting.Dictionary")   'Crée le répertoire
    LList.CompareMode = TextCompare 'On rend le dictionnaire insensible aux majuscules minuscules
     
        With ThisWorkbook.Sheets(FeuilleList)
            With .ListObjects(Montableau)
     
     
                For Each Cel In PlageList
                     x = Cel.Row 'X est égale au numéro de ligne
                    If Not LList.Exists(.Cells(x, NumColList).Value) And (.Cells(x, NumColList).Value <> "") Then LList.Add .Cells(x, NumColList).Value, .Cells(x, NumColList).Value
     
                Next Cel 'Cellule suivant
     
        End With 'din d'avec
        End With
     
     
        For Each Cel In Plagetype  'Pour tout les cellules de la colonne indiqué
        x = Cel.Row 'Prend le numéro de ligne de la cellule en cours de traitement
        V1 = ThisWorkbook.Sheets(Feuillebase).Cells(x, 2).Value ' V prend la valeur de la cellules indiqué
        If InStr(1, V, Types) <> 0 Then
            V2 = ThisWorkbook.Sheets(Feuillebase).Cells(x, NumColBase).Value
            Set c = PlageList.Find(V2, LookIn:=xlValues, lookat:=xlWhole) ' C prend la valeur Nothing si il ne trouve rien sinon la valeur de la case
     
                    'Si la valeur de la celulle n'existe pas dans le disctionnaire et qu'elle est différente de vide alors la copier dans le dictionnaire
                    If c Is Nothing And Not LList.Exists(V2) Then ' Si C est rien et qu'il n'existe pas V dans la list LList alors
                        D = Sheets(FeuilleList).Cells(Rows.Count, NumColList).End(xlUp).Row + 1 ' D prend la valeur de la dernier ligne disponible dans la plage
                        ThisWorkbook.Sheets("FeuilleList").Cells(D, NumColList).Value = V 'La cellule indique en D prend la valeur de V
                        LList.Add V2, V2 'ajoue de V dans la liste LList
                    End If 'fin de si
        End If
            Next Cel 'cellule suivante
     
    End Sub 'fin de macro
    actuellement je bloc sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not LList.Exists(.Cells(x, NumColList).Value) And (.Cells(x, NumColList).Value <> "") Then LList.Add .Cells(x, NumColList).Value, .Cells(x, NumColList).Value
    J'ai un message d'erreur qui dis "Propriété ou méthode non gérée par cet objet". plus précisément : me renvois "Expression non définie dans le contexte".

    Si quelqu'un peux me dire ou est mon erreur ...

    Cordialement,
    Passepartout007

  20. #80
    Membre régulier
    Homme Profil pro
    Ingénieur maintenance industriel
    Inscrit en
    Juin 2018
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur maintenance industriel
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2018
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Passepartout007 Voir le message
    Bonjour,

    Je travail sur l'incrémentation des lists de manière automatique, je défini des paramètres avant de faire appel à la macro :

    Voici mes variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Feuillebase As String
    Public FeuilleList As String
    Public PlageBase As Range
    Public Plagetype As Range
    Public PlageList As Range
    Public Nomcol As String
    Public MonTableautmp As String
    Public Montableau As String
    Public NumColList As String
    Public NumColBase As String
    Public Types As String
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub listTypeFTS()
    Feuillebase = "Base de données"
    FeuilleList = "ListesFTS"
    Set Plagetype = ThisWorkbook.Sheets(Feuillebase).Range("C2:C" & Sheets(Feuillebase).[C1048576].End(xlUp).Row)
    Set PlageBase = ThisWorkbook.Sheets(Feuillebase).Range("C2:C" & Sheets(Feuillebase).[C1048576].End(xlUp).Row)
    Set PlageList = ThisWorkbook.Sheets(FeuilleList).Range("A2:A" & Sheets(FeuilleList).[A1048576].End(xlUp).Row) 'PlageList est la colonne A de la base de données
    Types = "FT"
    Nomcol = "Type"
    Montableau = F_LFTS.ListObjects("List_TypeFTS")
     
    NumColList = 1
    NumColBase = 3
    Call Incementationlist
    End Sub
    Après avoir défini les paramettre voici la macro concerner :

    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
    Sub Incementationlist()
    Dim LList As Object
    Dim x As String
    Dim Cel As Range
    Dim V1 As String
    Dim V2 As String
    Dim D As String
    Dim c As Range
     
    Set LList = CreateObject("Scripting.Dictionary")   'Crée le répertoire
    LList.CompareMode = TextCompare 'On rend le dictionnaire insensible aux majuscules minuscules
     
        With ThisWorkbook.Sheets(FeuilleList)
            With .ListObjects(Montableau)
     
     
                For Each Cel In PlageList
                     x = Cel.Row 'X est égale au numéro de ligne
                    If Not LList.Exists(.Cells(x, NumColList).Value) And (.Cells(x, NumColList).Value <> "") Then LList.Add .Cells(x, NumColList).Value, .Cells(x, NumColList).Value
     
                Next Cel 'Cellule suivant
     
        End With 'din d'avec
        End With
     
     
        For Each Cel In Plagetype  'Pour tout les cellules de la colonne indiqué
        x = Cel.Row 'Prend le numéro de ligne de la cellule en cours de traitement
        V1 = ThisWorkbook.Sheets(Feuillebase).Cells(x, 2).Value ' V prend la valeur de la cellules indiqué
        If InStr(1, V, Types) <> 0 Then
            V2 = ThisWorkbook.Sheets(Feuillebase).Cells(x, NumColBase).Value
            Set c = PlageList.Find(V2, LookIn:=xlValues, lookat:=xlWhole) ' C prend la valeur Nothing si il ne trouve rien sinon la valeur de la case
     
                    'Si la valeur de la celulle n'existe pas dans le disctionnaire et qu'elle est différente de vide alors la copier dans le dictionnaire
                    If c Is Nothing And Not LList.Exists(V2) Then ' Si C est rien et qu'il n'existe pas V dans la list LList alors
                        D = Sheets(FeuilleList).Cells(Rows.Count, NumColList).End(xlUp).Row + 1 ' D prend la valeur de la dernier ligne disponible dans la plage
                        ThisWorkbook.Sheets("FeuilleList").Cells(D, NumColList).Value = V 'La cellule indique en D prend la valeur de V
                        LList.Add V2, V2 'ajoue de V dans la liste LList
                    End If 'fin de si
        End If
            Next Cel 'cellule suivante
     
    End Sub 'fin de macro
    actuellement je bloc sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not LList.Exists(.Cells(x, NumColList).Value) And (.Cells(x, NumColList).Value <> "") Then LList.Add .Cells(x, NumColList).Value, .Cells(x, NumColList).Value
    J'ai un message d'erreur qui dis "Propriété ou méthode non gérée par cet objet". plus précisément : me renvois "Expression non définie dans le contexte".

    Si quelqu'un peux me dire ou est mon erreur ...

    Cordialement,
    Passepartout007


    Bonjour j'ai résolu mon problème tout fonctionne bien voici le code:
    j'ai mis NumColList ET NumColBase en integer en string cela fonctionne pas.

    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    Public Feuillebase As String
    Public FeuilleList As String
    Public PlageBase As Range
    Public Plagetype As Range
    Public PlageList As Range
    Public NumColList As Long
    Public NumColBase As Long
    Public Types As String
     
     
    Sub actualisationlist()
    Call listTypeFTS
    Call listMaterielFTS
    Call listTacheFTS
    Call listVersionFTS
    Call listObservationFTS
    End Sub
    Sub listTypeFTS()
    Feuillebase = "Base de données"
    FeuilleList = "ListesFTS"
    Set Plagetype = ThisWorkbook.Sheets(Feuillebase).Range("C2:C" & Sheets(Feuillebase).[C1048576].End(xlUp).Row)
    Set PlageBase = ThisWorkbook.Sheets(Feuillebase).Range("C2:C" & Sheets(Feuillebase).[C1048576].End(xlUp).Row)
    Set PlageList = ThisWorkbook.Sheets(FeuilleList).Range("A2:A" & Sheets(FeuilleList).[A1048576].End(xlUp).Row)
    Types = "FT"
     
    Set MonTablo = ThisWorkbook.Sheets(FeuilleList).ListObjects("List_TypeFTS")
     
    NumColList = 1
    NumColBase = 3
    Call Incementationlist
    End Sub
    Sub listMaterielFTS()
    Feuillebase = "Base de données"
    FeuilleList = "ListesFTS"
    Set Plagetype = ThisWorkbook.Sheets(Feuillebase).Range("C2:C" & Sheets(Feuillebase).[C1048576].End(xlUp).Row)
    Set PlageBase = ThisWorkbook.Sheets(Feuillebase).Range("D2:D" & Sheets(Feuillebase).[D1048576].End(xlUp).Row)
    Set PlageList = ThisWorkbook.Sheets(FeuilleList).Range("B2:B" & Sheets(FeuilleList).[B1048576].End(xlUp).Row)
    Types = "FT"
     
    Set MonTablo = ThisWorkbook.Sheets(FeuilleList).ListObjects("List_MaterielFTS")
     
    NumColList = 2
    NumColBase = 4
    Call Incementationlist
    End Sub
    Sub listTacheFTS()
    Feuillebase = "Base de données"
    FeuilleList = "ListesFTS"
    Set Plagetype = ThisWorkbook.Sheets(Feuillebase).Range("C2:C" & Sheets(Feuillebase).[C1048576].End(xlUp).Row)
    Set PlageBase = ThisWorkbook.Sheets(Feuillebase).Range("F2:F" & Sheets(Feuillebase).[F1048576].End(xlUp).Row)
    Set PlageList = ThisWorkbook.Sheets(FeuilleList).Range("C2:C" & Sheets(FeuilleList).[C1048576].End(xlUp).Row)
    Types = "FT"
    Set MonTablo = ThisWorkbook.Sheets(FeuilleList).ListObjects("List_TacheFTS")
    NumColList = 3
    NumColBase = 6
    Call Incementationlist
    End Sub
    Sub listVersionFTS()
    Feuillebase = "Base de données"
    FeuilleList = "ListesFTS"
    Set Plagetype = ThisWorkbook.Sheets(Feuillebase).Range("C2:C" & Sheets(Feuillebase).[C1048576].End(xlUp).Row)
    Set PlageBase = ThisWorkbook.Sheets(Feuillebase).Range("G2:G" & Sheets(Feuillebase).[G1048576].End(xlUp).Row)
    Set PlageList = ThisWorkbook.Sheets(FeuilleList).Range("D2:D" & Sheets(FeuilleList).[D1048576].End(xlUp).Row)
    Types = "FT"
    Set MonTablo = ThisWorkbook.Sheets(FeuilleList).ListObjects("List_VersionFTS")
    NumColList = 4
    NumColBase = 7
    Call Incementationlist
    End Sub
     
    Sub listObservationFTS()
    Feuillebase = "Base de données"
    FeuilleList = "ListesFTS"
    Set Plagetype = ThisWorkbook.Sheets(Feuillebase).Range("C2:C" & Sheets(Feuillebase).[C1048576].End(xlUp).Row)
    Set PlageBase = ThisWorkbook.Sheets(Feuillebase).Range("H2:H" & Sheets(Feuillebase).[H1048576].End(xlUp).Row)
    Set PlageList = ThisWorkbook.Sheets(FeuilleList).Range("E2:E" & Sheets(FeuilleList).[E1048576].End(xlUp).Row)
    Types = "FT"
    Set MonTablo = ThisWorkbook.Sheets(FeuilleList).ListObjects("List_ObservationFTS")
    NumColList = 5
    NumColBase = 8
    Call Incementationlist
    End Sub
     
    Sub Incementationlist()
    Dim LList As Object
    Dim X As String
    Dim Cel As Range
    Dim V1 As String
    Dim V2 As String
    Dim D As String
    Dim c As Range
    Dim Clear As String
    Dim num As Long
    Dim i As Long
    Set LList = CreateObject("Scripting.Dictionary")   'Crée le répertoire
    LList.CompareMode = TextCompare 'On rend le dictionnaire insensible aux majuscules minuscules
    Clear = ThisWorkbook.Sheets(FeuilleList).Cells(Rows.Count, NumColList).End(xlUp).Row - 1
     
    If ThisWorkbook.Sheets(FeuilleList).Cells(2, NumColList).Value <> "" Then
    For i = Clear To 1 Step -1
    MonTablo.ListRows(i).Delete
    Next i
    End If
        For Each Cel In Plagetype  'Pour tout les cellules de la colonne indiqué
        X = Cel.Row 'Prend le numéro de ligne de la cellule en cours de traitement
        V1 = ThisWorkbook.Sheets(Feuillebase).Cells(X, 3).Value ' V prend la valeur de la cellules indiqué
        If InStr(1, V1, Types) <> 0 Then
            V2 = ThisWorkbook.Sheets(Feuillebase).Cells(X, NumColBase).Value
            Set c = PlageList.Find(V2, LookIn:=xlValues, lookat:=xlWhole) ' C prend la valeur Nothing si il ne trouve rien sinon la valeur de la case
     
                    'Si la valeur de la celulle n'existe pas dans le disctionnaire et qu'elle est différente de vide alors la copier dans le dictionnaire
                    If c Is Nothing And Not LList.Exists(V2) Then ' Si C est rien et qu'il n'existe pas V dans la list LList alors
                        D = ThisWorkbook.Sheets(FeuilleList).Cells(Rows.Count, NumColList).End(xlUp).Row + 1 ' D prend la valeur de la dernier ligne disponible dans la plage
                        'ThisWorkbook.Sheets(FeuilleList).Cells(D, NumColList).Value = V2 'La cellule indique en D prend la valeur de V
                        LList.Add V2, V2 'ajoue de V dans la liste LList
                    End If 'fin de si
        End If
            Next Cel 'cellule suivante
            i = 2
            For Each Item In LList
                ThisWorkbook.Sheets(FeuilleList).Cells(i, NumColList).Value = Item
                i = i + 1
                Next Item
    'Début tris alphabétique de la list
    Feuille = FeuilleList 'défini que feuille est "Toutes les Listes"
    MaColonne = Sheets(Feuille).Cells(1, NumColList).Value  'Défini que la colonne est en B1
    Call TriAlpha 'appel la macro TriAlpha
    'Fin tris alphabétique de la list
     
    End Sub 'fin de macro
    Cependant avec cette macro j'ai un problème de lenteur ... Il y a t'il un moyen d'amélioré ses performance ?
    Cordialement,
    Passepartout007

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

Discussions similaires

  1. Améliorer les performances d'Hibernate
    Par minimarch76 dans le forum Persistance des données
    Réponses: 4
    Dernier message: 22/08/2007, 10h01
  2. Optimisation de jsp pour améliorer les performances
    Par djuddju dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 01/12/2006, 05h50
  3. Réponses: 2
    Dernier message: 01/08/2006, 10h20
  4. [IW][D7] améliorer les performances
    Par Magnus dans le forum Bases de données
    Réponses: 19
    Dernier message: 11/10/2005, 20h46

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