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 :

Erreur d'execution '91' [XL-2019]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    etudiante
    Inscrit en
    Mai 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Mai 2022
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Erreur d'execution '91'
    Bonjour j'ai une erreur dans mon programme mais je n'arrive pas a trouver ce que c'est, ce n'est pas moi qui ai écrit le programme mais j'essaie de le faire fonctionner donc ca rend la tache compliqué
    L'UserForm permet de mettre une ref dans une ligne du tableau choisis et donc quand elle est mise (sélection puis flèche vers la droite) elle est enlevé temporairement de la "base de données" et mise dans la liste 2 sauf que je souhaite quand je resélectionne le projet pouvoir remettre la ref dans la base de données (liste 1). C'est la que l'erreur apparait sur cette ligne précisément
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.liste2.Column(1, Me.liste2.ListCount - 1) = TRf.ListColumns(1).Range.Find(TP.DataBodyRange(LI, COL), , xlValues, xlWhole).Row - TRf.HeaderRowRange.Row - 1
    Je mets le fichier en pièce jointe ça sera plus clair

    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    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

    Cette ligne fait une recherche dans le tableau "numéro unique". Celui-ci est constitué des valeurs qui n'apparaissent pas dans le tableau de l'onglet "Projet".

    Hors la ligne que tu indiques, recherche une Ref présente dans le tableau Projet à l'intérieur de la liste de "numéro unique". Find renvoi donc aucun résultat, d'où le message d'erreur.
    Il faut faire ta recherche dans le tableau "Numero"

    Essai avec le code suivant
    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
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    Option Explicit 'oblige à déclarer toutes les variables
    Private OP As Worksheet 'déclare la variable OP (Onglet Projet)
    Private ORf As Worksheet 'déclare la variable ORf (Onglet Reférence)
    Private TP As ListObject 'déclare la variable TP (tableau structuré Projet)
    Private TRf As ListObject 'déclare la variable TRf (Tableau structuré Référence)
    Private Tab_Numero As ListObject
    Private LI As Integer 'déclare la variable LI (Ligne)
     
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Dim I As Integer 'déclare la variable I (Incrément)
     
        Set OP = Worksheets("Projet") 'définit l'onglet OP
        Set ORf = Worksheets("Référence") 'définit le'onglet ORf
        Set TP = OP.ListObjects("Tableau2") 'définit le tableau structuré TP
        Set TRf = ORf.ListObjects("NumeroUnique") 'définit le tableau structuré TRf
        Set Tab_Numero = ORf.ListObjects("Numero")
        Liste1.ColumnCount = 2 'définit le nombre de colonne de 
    [liste1]
        Liste2.ColumnCount = 2 'définit le nombre de colonne de 
    [liste2]
        Liste1.ColumnWidths = ";0" 'masque la seconde colonne 
    [liste1]
        Liste2.ColumnWidths = ";0" 'masque la seconde colonne 
    [liste2]
        'On alimente les listes/combobox avec les données du classeur
        Nom.List = TP.DataBodyRange.Columns(1).Value 'alimente [Nom]
        For I = 1 To 100 'boucle sur toutes des donnée du tableau structuré Trf
            Liste1.AddItem 'ajoute un élément à 
    [liste1]
            Liste1.Column(0, Liste1.ListCount - 1) = TRf.DataBodyRange(I, 1) 'recupere numero serie de TRf pour mettre dans 
    [liste 1]
            Liste1.Column(1, Liste1.ListCount - 1) = I - 1 'récupère la position dans la colonne 1 (cachée)
        Next I 'prochaine donnée de la boucle
    End Sub
     
    Private Sub Nom_Change() 'au changement dans [Nom]
    Dim R As Range 'déclare la variable R (Recherche)
    Dim COL As Integer 'déclare la variable COL (Colonne)
    Dim I As Integer 'déclare la variable I (Incrément)
     
        'définit la recherche R (recherche le projet dans la première colonne du tableau structuré TP)
        Set R = TP.ListColumns(1).Range.Find(Nom.Value, , xlValues, xlWhole)
     
        If Not R Is Nothing Then 'si aucune occurrence n'est trouvée, sort de la procédure
            LI = R.Row - TP.HeaderRowRange.Row 'définit la ligne LI de la première occurrence trouvée on enleve la premiere ligne qui est l'entête
            Debut.Caption = TP.DataBodyRange(LI, 2).Value 'renvoie la date de début dans [Debut]
            Fin.Caption = TP.DataBodyRange(LI, 3).Value 'renvoie la date de fin dans [Fin]
            For COL = 4 To TP.ListColumns.Count 'boucle 1 : des colonnes 4 à la dernière colonne de TP
               If TP.DataBodyRange(LI, COL) <> "" Then 'si la donnée de TP ligne LI colonne COL n'est pas vide
                   Liste2.AddItem 'ajoute un élément à 
    [liste2]
                   'récupère la référence dans la colonne 0
                   Liste2.Column(0, Liste2.ListCount - 1) = TP.DataBodyRange(LI, COL)
                   'récupère la position dans la colonne1 (cachée)
                   Liste2.Column(1, Liste2.ListCount - 1) = Tab_Numero.ListColumns(1).Range.Find(TP.DataBodyRange(LI, COL), , xlValues, xlWhole).Row - TRf.HeaderRowRange.Row - 1
               End If 'fin de la condition
               For I = Liste1.ListCount - 1 To 0 Step -1 'boucle 2 : inversée du dernier au premier élément de 
    [liste1]
                    'si l'élément est égal à la donnée ligne LI, colonne COL de TP, supprime l'élément, sort de la boucle
                    If Liste1.List(I) = TP.DataBodyRange(LI, COL) Then
                        Liste1.RemoveItem (I)
                        Exit For
                    End If
               Next I 'prochaine élément de la boucle 2
            Next COL 'prochaine colonne de la boucle 1
        End If
    End Sub
     
    Private Sub Droite_Click() 'bouton "Flèche vers la droite"
    Dim I As Integer 'déclare la variable I (Incrément)
     
        For I = Liste1.ListCount - 1 To 0 Step -1 'boucle 2 : inversée du dernier au premier élément de 
    [liste1]
            If Liste1.Selected(I) = True Then 'condition : si l'élément de la liste 1 est sélectionné
                Liste2.AddItem 'ajoute un élément à 
    [liste2]
                'récupère la référence dans la colonne 0 de 
    [liste2]
                Liste2.Column(0, Liste2.ListCount - 1) = Liste1.List(I)
                'récupère la position dans la colonne 1 (cachée) de 
    [liste2]
                Liste2.Column(1, Liste2.ListCount - 1) = I
                Liste1.RemoveItem (I) 'supprime l'élément de 
    [liste1]
            End If 'fin de la condition
        Next I 'prochain élément de la boucle 1
     
        'tri de la liste2
        TriListe Liste2
    End Sub
     
    Private Sub Gauche_Click() 'bouton "Flèche vers la gauche"
    Dim I As Integer 'déclare la variable I (Incrément)
     
        For I = Liste2.ListCount - 1 To 0 Step -1 'boucle 2 : inversée du dernier au premier élément de 
    [liste2]
            If Liste2.Selected(I) = True Then 'condition : si l'élément est sélectionné
                Liste1.AddItem 'ajoute un élément à 
    [liste1]
                 'récupère la référence dans la colonne 0 de 
    [liste1]
                Liste1.Column(0, Liste1.ListCount - 1) = Liste2.Column(0, I)
                'récupère la position dans la colonne 1 (cachée) de 
    [liste1]
                Liste1.Column(1, Liste1.ListCount - 1) = Liste2.Column(1, I)
                Liste2.RemoveItem (I) 'supprime l'élément de 
    [liste2]
            End If 'fin de la condition
        Next I 'prochain élément de la boucle
     
        'tri de la liste1
        TriListe Liste1
    End Sub
     
    Private Sub TriListe(aListe As MsForms.ListBox)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim T1 As Variant 'déclare la variable T1 (Temporaire1)
    Dim T2 As Variant 'déclare la variable T2 (Temporaire2)
     
        'tri de la liste2
        With aListe 'prend en compte [aListe]
            For I = 0 To .ListCount - 1 'boucle 1 : sur tous les éléments I de la [aListe]
                For J = 0 To .ListCount - 1 'boucle 2 : sur tous les éléments J de la [aListe]
                    'condition si I est différent de J est si la position de I est infrérieure à la position de J
                    If I <> J And CInt(.Column(1, I)) < CInt(.Column(1, J)) Then
                        T1 = .Column(0, J): T2 = .Column(1, J) 'récupère dans T1 la référence de J, récupère dans T2 la position de J
                        'redéfinit la référence de J comme celle de I, redéfinit la position de J comme celle de I
                        .Column(0, J) = .Column(0, I): .Column(1, J) = .Column(1, I)
                        'redéfinit la référence de I comme T1, redéfinit la position de I comme T2
                        .Column(0, I) = T1: .Column(1, I) = T2
                    End If 'fin de la condition
                Next J 'prochain élément de la boucle 2
            Next I 'prochain élément de la boucle 1
        End With 'fin de la prise en compte de [aListe]
    End Sub
     
    Private Sub Ajouterelement_Click() 'bouton "Valider
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim R As Range 'déclare la variable R (Recherche)
    Dim LN As Integer 'déclare la variable LN (Ligne du Numéro)
     
        If Nom = "" Then 'condition : si [Nom] est vide
            MsgBox "Vous devez désigner un projet !" 'message
            Nom.SetFocus 'place le curseur
            'Exit Sub 'sort de la procédure
        Else
            Range(TP.DataBodyRange(LI, 4), TP.DataBodyRange(LI, TP.ListColumns.Count)).ClearContents 'efface les références de la ligne LI
            For I = 0 To Liste2.ListCount - 1 'boucle sur tous les éléments de 
    [liste2]
                TP.ListColumns.Add 'ajoute une colonne à TP
                OP.Columns(TP.ListColumns.Count).ColumnWidth = TP.ListColumns(4).Range.ColumnWidth 'largeir de la colonne identique à celle de "Référence1"
                TP.HeaderRowRange(1, TP.ListColumns.Count) = "Référence" & I + 1 'ajoute 'en-tête
                TP.DataBodyRange(LI, 4 + I).Value = Liste2.List(I) 'renvoie l'élément de la boucle dans la donnée ligne LI colonne 4 + I de TP
                Set R = TRf.DataBodyRange.Find(Liste2.List(I), , xlValues, xlWhole) 'définit la rechercghe R (recherche le numéro dans TRF)
                If Not R Is Nothing Then 'condition : si il existe au moins une occurrence de R trouvée
                    LN = R.Row - TRf.HeaderRowRange.Row 'définit la ligne LN de la première occurrence trouvée
                    TRf.DataBodyRange(LN, 1).Delete 'supprime le numéro dans TRf
                End If 'fin de la condition
            Next I 'prochain élément de la boucle
     
            'en cas de suppression de référence mise à jour de la taille de TP
            For I = TP.ListColumns.Count To 4 Step -1 'boucle inversée sur les dernières colonne de TP jusqu'à la 4ème
                If Application.WorksheetFunction.CountA(TP.ListColumns(I).Range) = 1 Then 'su le nombre de valeur de la colonne est égal à 1 (le titre)
                    TP.Resize TP.Range.Resize(TP.ListRows.Count + 1, TP.ListColumns.Count - 1) 'redimensionne le tableau en enlevant la colonne
                End If 'fin de la condition
            Next I 'prochaine colonne de la boucle
            Unload Me 'vide et ferme l'Userorm
     
        End If 'fin de la condition
    End Sub
     
    Private Sub CommandButton3_Click()
        Unload Me 'vide et ferme l'Userorm
    End Sub
    Je trouve le code plutôt bien écrit et commenté mais les choix de déclaration de variables globales et de certaines logiques ne me semble pas très efficientes.
    Je me suis permis 2/3 modifications, n'hésite pas à bien tester le fichier (au pire tu n'auras que les modification lié à Tab_Numero à reprendre à ton compte.

    ++
    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

  3. #3
    Futur Membre du Club
    Femme Profil pro
    etudiante
    Inscrit en
    Mai 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Mai 2022
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci c'est super ca a l'air de mieux marché mais maintenant le problème c'est que si je met une ref dans un projet puis je la retire quand je relance l'userform elle n'est plus dans ma liste car elle s'est retiré du tableau NumeroUnique, je ne sais pas comment faire.
    En faite je ne vois pas qu'elle ligne de code permet d'enlever l'Item sélectionner du tableau NumeroUnique et non de la liste1 ?

  4. #4
    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

    Bon le code est plutôt alambiqué, je ne sais pas si j'aurais pas mieux fait de tout réécrire ^^

    Essai comme ça
    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
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    Option Explicit 'oblige à déclarer toutes les variables
    Private OP As Worksheet 'déclare la variable OP (Onglet Projet)
    Private ORf As Worksheet 'déclare la variable ORf (Onglet Reférence)
    Private TP As ListObject 'déclare la variable TP (tableau structuré Projet)
    Private TRf As ListObject 'déclare la variable TRf (Tableau structuré Référence)
    Private Tab_Numero As ListObject
    Private LI As Integer 'déclare la variable LI (Ligne)
     
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim CellFind As Range
        Set OP = Worksheets("Projet") 'définit l'onglet OP
        Set ORf = Worksheets("Référence") 'définit le'onglet ORf
        Set TP = OP.ListObjects("Tableau2") 'définit le tableau structuré TP
        Set TRf = ORf.ListObjects("NumeroUnique") 'définit le tableau structuré TRf
        Set Tab_Numero = ORf.ListObjects("Numero")
    '    Liste1.ColumnCount = 2 'définit le nombre de colonne de"Liste1"
    '    Liste2.ColumnCount = 2 'définit le nombre de colonne de"Liste2"
    '    Liste1.ColumnWidths = ";0" 'masque la seconde colonne"Liste1"
    '    Liste2.ColumnWidths = ";0" 'masque la seconde colonne"Liste2"
        'On alimente les listes/combobox avec les données du classeur
        Nom.List = TP.DataBodyRange.Columns(1).Value 'alimente "Nom"
        For I = 1 To Tab_Numero.ListRows.Count 'boucle sur toutes des donnée du tableau structuré Trf
            'On regarde si la valeur est dans Trf
            On Error Resume Next
                Set CellFind = Nothing
                Set CellFind = TRf.DataBodyRange.Find(Tab_Numero.DataBodyRange(I, 1).Value, , xlValues, xlWhole)
            On Error GoTo 0
            If Not CellFind Is Nothing Then
                Liste1.AddItem 'ajoute un élément à "Liste1"
                Liste1.Column(0, Liste1.ListCount - 1) = Tab_Numero.DataBodyRange(I, 1).Value 'recupere numero serie de TRf pour mettre dans"liste 1"
                Liste1.Column(1, Liste1.ListCount - 1) = I - 1 'récupère la position dans la colonne 1 (cachée)
            End If
        Next I 'prochaine donnée de la boucle
    End Sub
     
    Private Sub Nom_Change() 'au changement dans [Nom]
    Dim R As Range 'déclare la variable R (Recherche)
    Dim COL As Integer 'déclare la variable COL (Colonne)
    Dim I As Integer 'déclare la variable I (Incrément)
     
        'définit la recherche R (recherche le projet dans la première colonne du tableau structuré TP)
        Set R = TP.ListColumns(1).Range.Find(Nom.Value, , xlValues, xlWhole)
     
        If Not R Is Nothing Then 'si aucune occurrence n'est trouvée, sort de la procédure
            LI = R.Row - TP.HeaderRowRange.Row 'définit la ligne LI de la première occurrence trouvée on enleve la premiere ligne qui est l'entête
            Debut.Caption = TP.DataBodyRange(LI, 2).Value 'renvoie la date de début dans [Debut]
            Fin.Caption = TP.DataBodyRange(LI, 3).Value 'renvoie la date de fin dans [Fin]
            For COL = 4 To TP.ListColumns.Count 'boucle 1 : des colonnes 4 à la dernière colonne de TP
               If TP.DataBodyRange(LI, COL) <> "" Then 'si la donnée de TP ligne LI colonne COL n'est pas vide
                   Liste2.AddItem 'ajoute un élément à"Liste2"
                   'récupère la référence dans la colonne 0
                   Liste2.Column(0, Liste2.ListCount - 1) = TP.DataBodyRange(LI, COL)
                   'récupère la position dans la colonne1 (cachée)
                   Liste2.Column(1, Liste2.ListCount - 1) = Tab_Numero.ListColumns(1).Range.Find(TP.DataBodyRange(LI, COL), , xlValues, xlWhole).Row - TRf.HeaderRowRange.Row - 1
               End If 'fin de la condition
               For I = Liste1.ListCount - 1 To 0 Step -1 'boucle 2 : inversée du dernier au premier élément de"Liste1"
                    'si l'élément est égal à la donnée ligne LI, colonne COL de TP, supprime l'élément, sort de la boucle
                    If Liste1.List(I) = TP.DataBodyRange(LI, COL) Then
                        Liste1.RemoveItem (I)
                        Exit For
                    End If
               Next I 'prochaine élément de la boucle 2
            Next COL 'prochaine colonne de la boucle 1
        End If
    End Sub
     
    Private Sub Droite_Click() 'bouton "Flèche vers la droite"
    Dim I As Integer 'déclare la variable I (Incrément)
     
        For I = Liste1.ListCount - 1 To 0 Step -1 'boucle 2 : inversée du dernier au premier élément de"Liste1"
            If Liste1.Selected(I) = True Then 'condition : si l'élément de la liste 1 est sélectionné
                Liste2.AddItem 'ajoute un élément à"Liste2"
                'récupère la référence dans la colonne 0 de"Liste2"
                Liste2.Column(0, Liste2.ListCount - 1) = Liste1.Column(0, I)
                'récupère la position dans la colonne 1 (cachée) de"Liste2"
                Liste2.Column(1, Liste2.ListCount - 1) = Liste1.Column(1, I)
                Liste1.RemoveItem (I) 'supprime l'élément de "Liste1"
            End If 'fin de la condition
        Next I 'prochain élément de la boucle 1
     
        'tri de la liste2
        TriListe Liste2
    End Sub
     
    Private Sub Gauche_Click() 'bouton "Flèche vers la gauche"
    Dim I As Integer 'déclare la variable I (Incrément)
     
        For I = Liste2.ListCount - 1 To 0 Step -1 'boucle 2 : inversée du dernier au premier élément de"Liste2"
            If Liste2.Selected(I) = True Then 'condition : si l'élément est sélectionné
                Liste1.AddItem 'ajoute un élément à"Liste1"
                 'récupère la référence dans la colonne 0 de"Liste1"
                Liste1.Column(0, Liste1.ListCount - 1) = Liste2.Column(0, I)
                'récupère la position dans la colonne 1 (cachée) de"Liste1"
                Liste1.Column(1, Liste1.ListCount - 1) = Liste2.Column(1, I)
                Liste2.RemoveItem (I) 'supprime l'élément de"Liste2"
            End If 'fin de la condition
        Next I 'prochain élément de la boucle
     
        'tri de la liste1
        TriListe Liste1
    End Sub
     
    Private Sub TriListe(aListe As MsForms.ListBox)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim T1 As Variant 'déclare la variable T1 (Temporaire1)
    Dim T2 As Variant 'déclare la variable T2 (Temporaire2)
     
        'tri de la liste
        With aListe 'prend en compte "aListe"
            For I = 0 To .ListCount - 1 'boucle 1 : sur tous les éléments I de la [aListe]
                For J = I + 1 To .ListCount - 1 'boucle 2 : sur tous les éléments J de la [aListe]
                    'condition si I est différent de J est si la position de I est infrérieure à la position de J
                    If I <> J And CInt(.Column(1, I)) > CInt(.Column(1, J)) Then
                        'récupère dans T1 la référence de J, récupère dans T2 la position de J
                        T1 = .Column(0, J)
                        T2 = .Column(1, J)
                        'redéfinit la référence de J comme celle de I, redéfinit la position de J comme celle de I
                        .Column(0, J) = .Column(0, I)
                        .Column(1, J) = .Column(1, I)
                        'redéfinit la référence de I comme T1, redéfinit la position de I comme T2
                        .Column(0, I) = T1
                        .Column(1, I) = T2
                    End If 'fin de la condition
                Next J 'prochain élément de la boucle 2
            Next I 'prochain élément de la boucle 1
        End With 'fin de la prise en compte de "aListe"
    End Sub
     
    Private Sub Ajouterelement_Click() 'bouton "Valider
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim R As Range 'déclare la variable R (Recherche)
    Dim LN As Integer 'déclare la variable LN (Ligne du Numéro)
    Dim NewCol As ListRow
     
        If Nom = "" Then 'condition : si [Nom] est vide
            MsgBox "Vous devez désigner un projet !" 'message
            Nom.SetFocus 'place le curseur
            'Exit Sub 'sort de la procédure
        Else
            TP.Parent.Range(TP.DataBodyRange(LI, 4), TP.DataBodyRange(LI, TP.ListColumns.Count)).ClearContents 'efface les références de la ligne LI
     
            For I = 0 To Liste2.ListCount - 1 'boucle sur tous les éléments de"Liste2"
                'On vérifie que la colonne existe dans le tableau structuré
                If TP.ListColumns.Count < 4 + I Then
                    'Pas assez de colonne, on en ajoute une
                    TP.ListColumns.Add 'ajoute une colonne à TP
                    OP.Columns(TP.ListColumns.Count).ColumnWidth = TP.ListColumns(4).Range.ColumnWidth 'largeir de la colonne identique à celle de "Référence1"
                    TP.HeaderRowRange(1, TP.ListColumns.Count) = "Référence" & I + 1 'ajoute 'en-tête
        '            Set R = TRf.DataBodyRange.Find(Liste2.List(I), , xlValues, xlWhole) 'définit la rechercghe R (recherche le numéro dans TRF)
        '            If Not R Is Nothing Then 'condition : s'il existe au moins une occurrence de R trouvée
        '                LN = R.Row - TRf.HeaderRowRange.Row 'définit la ligne LN de la première occurrence trouvée
        '                TRf.DataBodyRange(LN, 1).Delete 'supprime le numéro dans TRf
        '            End If 'fin de la condition
                End If
                TP.DataBodyRange(LI, 4 + I).Value = Liste2.List(I) 'renvoie l'élément de la boucle dans la donnée ligne LI colonne 4 + I de TP
            Next I 'prochain élément de la boucle
     
            'On met à jour le tableau NumeroUnique (qui doit correspondre au contenu de Liste2
            TRf.DataBodyRange.Columns(1).ClearContents
            TRf.DataBodyRange.Columns(1).Resize(Liste1.ListCount, 1).Value = Liste1.List
            TRf.Resize TRf.Range.Resize(Liste1.ListCount + 1, 1)
     
            'en cas de suppression de référence mise à jour de la taille de TP
            For I = TP.ListColumns.Count To 4 Step -1 'boucle inversée sur les dernières colonne de TP jusqu'à la 4ème
                If Application.WorksheetFunction.CountA(TP.ListColumns(I).Range) = 1 Then 'su le nombre de valeur de la colonne est égal à 1 (le titre)
                    TP.Resize TP.Range.Resize(TP.ListRows.Count + 1, TP.ListColumns.Count - 1) 'redimensionne le tableau en enlevant la colonne
                End If 'fin de la condition
            Next I 'prochaine colonne de la boucle
            Unload Me 'vide et ferme l'Userorm
     
        End If 'fin de la condition
    End Sub
     
    Private Sub CommandButton3_Click()
        Unload Me 'vide et ferme l'Userorm
    End Sub
    En fait le contenu de ton tableau NumeroUnique doit correspondre au contenu de la liste2 lors de l'appui sur le bouton "Ajout Elements".

    ++
    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

  5. #5
    Futur Membre du Club
    Femme Profil pro
    etudiante
    Inscrit en
    Mai 2022
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : etudiante

    Informations forums :
    Inscription : Mai 2022
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    C'est bon ca marche avec ton second code. Merci beaucoup tu me sauves !!!

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

Discussions similaires

  1. erreur d'execution 3704, ...:objet n'est pas ouvert
    Par cari dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/11/2005, 15h44
  2. [ERREUR D'EXECUTION] Segmentation Fault
    Par CestPasMoi dans le forum C++
    Réponses: 3
    Dernier message: 26/11/2005, 17h38
  3. Réponses: 3
    Dernier message: 03/11/2005, 18h41
  4. [LDAP][Interface Winldap.h] Erreur d'execution
    Par -=Spoon=- dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 10/03/2005, 17h10
  5. [javamail] erreur d'execution
    Par bibx dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 05/12/2003, 11h04

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