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 :

Incompatibilité de type


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 245
    Par défaut Incompatibilité de type
    Code vba : 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
    Private Sub Txtrecherche_Change()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim K As Integer 'déclare la variable K (incrément)
     
    Me.ListBox1.Clear 'vide la ListBox1
    If Me.Txtrecherche.Value = "" Then Exit Sub 'si la TextBox1 est effacée, sort de la procédure
    K = 1 'initialise la variable K
    For Each O In Worksheets 'boucle 1 sur tous les onglets O du classeur
        If Len(O.Name) < 4 Then  'condition 1 : si le nom contient 3 caractères maximum
            DL = O.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet O
            TV = O.Range("A16:H" & DL) 'définit le tableau des valeurs TV
     
            '*************************************************************
            'Filtrer par classe = taper la classe (accepte les minuscules)
            '*************************************************************
            If UCase(Me.Txtrecherche.Value) = UCase(O.Name) Then 'si la TextBox1 est égale au non de l'onglet (les 2 convertis en MAJUSCULES)
                For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
                    ReDim Preserve TL(1 To 8, 1 To K) 'redimentionne le tableau des lignes TL (8 lignes, K colonnes)
                    TL(1, K) = I + 15 'récupère dans la ligne 1 de TL la ligne I + 14 de la boucle (le tableau commence à la ligne 15)
                    TL(2, K) = O.Name 'récupère dans la ligne 2 de TL la classe (= le nom de l'onglet O)
                    TL(3, K) = TV(I, 2) 'récupère le code dans la ligne 3 de TL
                    TL(4, K) = TV(I, 3) 'récupère le Prénom dans la ligne 4 de TL
                    TL(5, K) = TV(I, 4) 'récupère le Nom dans la ligne 5 de TL
                    TL(6, K) = TV(I, 6) 'récupère le Lieu de naissance dans la ligne 6 de TL
                    TL(7, K) = TV(I, 7) 'récupère l'âge dans la ligne 7 de TL
                    TL(8, K) = TV(I, 8) 'récupère le sexe dans la ligne 8 de TL
                    K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
                Next I 'prochaine ligne de la boucle 2
                If K > 1 Then Me.ListBox1.Column = TL 'si K est supérieure à 1, alimente la Listbox1 avec le tableau TL
                Me.Txtnbel.Value = Me.ListBox1.ListCount 'renvoie le nombre d'éléments dans la Textbox2
                Exit Sub 'sort de la procédure
            End If 'fin de la condition
     
            '******************************************************
            'filtrer par sexe taper F ou M (accepte les minuscules)
            '******************************************************
            If Len(Me.Txtrecherche.Value) = 1 Then 'condition 2 : si la Textbox1 ne contient qu'un seul caractère
                For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
                    'condition 3 : si la Textbox1 est égale au sexe de la donnée ligne I colonne 8 de TV (les 2 convertis en MAJUSCULES)
                    If UCase(TV(I, 8)) = UCase(Me.Txtrecherche.Value) Then
                        ReDim Preserve TL(1 To 8, 1 To K) 'redimentionne le tableau des lignes TL (8 lignes, K colonnes)
                        TL(1, K) = I + 15 'récupère dans la ligne 1 de TL la ligne I+14 de la boucle (le tableau commence à la ligne 15)
                        TL(2, K) = O.Name 'récupère dans la ligne 2 de TL la classe (= le nom de l'onglet O)
                        TL(3, K) = TV(I, 2) 'récupère le code dans la ligne 3 de TL
                        TL(4, K) = TV(I, 3) 'récupère le Prénom dans la ligne 4 de TL
                        TL(5, K) = TV(I, 4) 'récupère le Nom dans la ligne 5 de TL
                        TL(6, K) = TV(I, 6) 'récupère le Lieu de naissance dans la ligne 6 de TL
                        TL(7, K) = TV(I, 7) 'récupère l'âge dans la ligne 7 de TL
                        TL(8, K) = TV(I, 8) 'récupère le sexe dans la ligne 8 de TL
                        K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
                    End If 'fin de la condition 3
                Next I 'prochaine ligne de la boucle
     
            Else 'sinon (condition2 : si la TextBox1 contient plus d'un seul caractère)
     
            '*************************************************************************
            'Tout autre filtre taper au moins deux caractères (accepte les minuscules)
            '*************************************************************************
                For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
                    For J = 1 To UBound(TV, 2) 'boucle 3 sur toutes les colonnes J du tableau des valeurs TV
                        Select Case J 'agit en fonction de J
                            Case 2, 3, 4, 6, 7, 8 'cas correspondant au Code, Prénom, Nom,Lieu de naissance, Âge et Sexe
                                'condition 3 : si la Textbox1 est égale a une de ces colonne de TV (les 2 en MAJUSCULES)
                             If UCase(Left(TV(I, J), Len(Me.Txtrecherche))) = UCase(Me.Txtrecherche.Value) Then
                                    ReDim Preserve TL(1 To 8, 1 To K) 'redimentionne le tableau des lignes TL (8 lignes, K colonnes)
                                    TL(1, K) = I + 15 'récupère dans la ligne 1 de TL la ligne I+14 de la boucle (le tableau commence à la ligne 15)
                                    TL(2, K) = O.Name 'récupère dans la ligne 2 de TL la classe (= le nom de l'onglet O)
                                    TL(3, K) = TV(I, 2) 'récupère le code dans la ligne 3 de TL
                                    TL(4, K) = TV(I, 3) 'récupère le Prénom dans la ligne 4 de TL
                                    TL(5, K) = TV(I, 4) 'récupère le Nom dans la ligne 5 de TL
                                    TL(6, K) = TV(I, 6) 'récupère le Lieu de naissance dans la ligne 6 de TL
                                    TL(7, K) = TV(I, 7) 'récupère l'âge dans la ligne 7 de TL
                                    TL(8, K) = TV(I, 8) 'récupère le sexe dans la ligne 8 de TL
                                    K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
                                    Exit For 'sort de la boucle 3
                                End If 'fin de la condition 3
                        End Select 'fin de l'action en fonction de la colonne J
                    Next J 'prochaine colonne de la boucle 3
                Next I 'prochaine ligne de la boucle 2
            End If 'fin de la condition 2
        End If 'fin de la condition 1
    Next O 'prochaine onglet de la boucle 1
    If K > 1 Then Me.ListBox1.Column = TL 'si K est supérieure à 1, alimente la Listbox1 avec le tableau TL
    Me.Txtnbel.Value = Me.ListBox1.ListCount 'renvoie le nombre d'éléments dans la Textbox2
    End Sub

    La ligne 69 est colorée jaune au débogage et le message d'erreur est "Incompatibilité de type". J'ai essayé de trouver le problème en vain.
    Il s'agit d'un formulaire de recherche avec tri.
    Merci d'avance pour votre soutien
    djibysadji

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,
    et comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If UCase(Left(TV(I, J), Len(Me.Txtrecherche.value))) = UCase(Me.Txtrecherche.Value) Then
    Cdlt

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par djibysadji Voir le message
    J'ai essayé de trouver le problème en vain.
    Quand on a une erreur sur une ligne composée de nombreux éléments, il faut commencer par localiser l'erreur plus précisément en décomposant cette ligne en unités élémentaires.
    Par exemple, dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Debug.Print I, J
    Debug.Print TV(I, J)
    Debug.Print Me.Txtrecherche
    Debug.Print Len(Me.Txtrecherche)
    Debug.Print Left(TV(I, J), Len(Me.Txtrecherche))
    Debug.Print UCase(Me.Txtrecherche.Value)
    Debug.Print UCase(Left(TV(I, J), Len(Me.Txtrecherche))) = UCase(Me.Txtrecherche.Value)

  4. #4
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 245
    Par défaut Incompatibilité de type
    Bonsoir
    Nous avons essayé vos suggestions mais elles ne fonction pas.
    Merci d'avoir essayé de m'aider.
    djibysadji

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par djibysadji Voir le message
    Nous avons essayé vos suggestions mais elles ne fonction pas.
    Ce que j'ai proposé n'avait pas pour but de faire fonctionner le code mais de détecter où se trouve le problème.
    Mais si tu n'es pas plus explicite sur ce qui se produit, ça ne risque pas d'avancer...

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 245
    Par défaut Incompatibilité de type
    Bonjour le forum
    Comme vous l'avez suggéré je vous apporte plus de détails sur l'erreur qui m'empêche d'avancer. Pour cela j'ai juger nécessaire de joindre fichier.
    Merci
    djibysadji
    Fichiers attachés Fichiers attachés

  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,
    Citation Envoyé par djibysadji Voir le message
    Comme vous l'avez suggéré je vous apporte plus de détails sur l'erreur qui m'empêche d'avancer. Pour cela j'ai juger nécessaire de joindre fichier.
    Ici, peu de personnes ouvrent les pièces jointes notamment lorsqu'elles comportent des macro !
    Ce qui est demandé, c'est les détails sur l'erreur.
    Le code de Menhir édite des informations pour détecter l'erreur, quelles sont-elles ?

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par djibysadji Voir le message
    Comme vous l'avez suggéré je vous apporte plus de détails sur l'erreur qui m'empêche d'avancer. Pour cela j'ai juger nécessaire de joindre fichier.
    Même réponse que Patrice740 ( ).
    Les raisons du refus d'ouvrir ton fichier sont, entre autres, celles expliquées ici : https://www.developpez.net/forums/d8...s-discussions/

    Si tu ne veux pas faire l'effort de faire les tests qui te sont proposé ou de prendre le temps d'écrire des explications claires et détaillées, je ne vois pas pourquoi d'autres en feraient.
    Après tout, c'est ton problème.

  9. #9
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Il manque le début du code, celui où TV est affecté !

    En supposant que TV représente les valeurs des cellules d'un onglet, tu connais I et J et le nom de l'onglet, il suffit de regarder ce que la cellule contient !
    Il s'agit très probablement d'une formule qui renvoi une valeur d'erreur, donc pas un texte d’où incompatibilité de type avec Left()
    Il faut tester la valeur de TV(I,J) avant la ligne If UCase(Left(TV(I, J), Len(Me.Txtrecherche))) = UCase(Me.Txtrecherche.Value) Then

  10. #10
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Essaye de mettre ça dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print I; J, UBound(TV, 1);UBound(TV, 2)
    Qu'est-ce que tu obtiens comme affichage lorsque le bug se produit ?

  11. #11
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Mai 2019
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2019
    Messages : 245
    Par défaut Incompatibilité de type
    Bonjour le Menhir, le Forum

    Citation Envoyé par Menhir Voir le message
    Essaye de mettre ça dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print I; J, UBound(TV, 1);UBound(TV, 2)
    Qu'est-ce que tu obtiens comme affichage lorsque le bug se produit ?
    J'ai appliqué ton code et je parviens à parcourir tous les onglets maintenant. Cela veut dire que je peux d'ors et déjà connaitre les effectifs des classes en tapant le nom de la classe dans le textbox1: C'est un progrès! Mais jusqu'ici je ne parviens pas à faire une recherche sur l'age. Or je voudrais connaître le nombre d'élèves qui ont18 ans, par exemple. J'aimerais aussi pouvoir faire une recherche sur un élève en saisissant son code ou son prénom. J'ai essayé en tapant ces valeurs dans la textbox1 mais la listbox1 n'affiche rien et il n'y pas de message d'erreur.

    Pour plus de détails j'affiche le code dès le début:
    Le code que tu as proposé est en bleu et j'ai mis commentaire les ligne en vert.
    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
    Private Sub Txtrecherche_Change()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim K As Integer 'déclare la variable K (incrément)
    
    
    
    Me.ListBox1.Clear 'vide la ListBox1
    If Me.Txtrecherche.Value = "" Then Exit Sub 'si la TextBox1 est effacée, sort de la procédure
    K = 1 'initialise la variable K
    For Each O In Worksheets 'boucle 1 sur tous les onglets O du classeur
        If Len(O.Name) < 4 Then  'condition 1 : si le nom contient 3 caractères maximum
            DL = O.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet O
            TV = O.Range("A16:H" & DL) 'définit le tableau des valeurs TV
            
            '*************************************************************
            'Filtrer par classe = taper la classe (accepte les minuscules)
            '*************************************************************
            If UCase(Me.Txtrecherche.Value) = UCase(O.Name) Then 'si la TextBox1 est égale au non de l'onglet (les 2 convertis en MAJUSCULES)
                For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
                    ReDim Preserve TL(1 To 8, 1 To K) 'redimentionne le tableau des lignes TL (8 lignes, K colonnes)
                    TL(1, K) = I + 15 'récupère dans la ligne 1 de TL la ligne I + 14 de la boucle (le tableau commence à la ligne 15)
                    TL(2, K) = O.Name 'récupère dans la ligne 2 de TL la classe (= le nom de l'onglet O)
                    TL(3, K) = TV(I, 2) 'récupère le code dans la ligne 3 de TL
                    TL(4, K) = TV(I, 3) 'récupère le Prénom dans la ligne 4 de TL
                    TL(5, K) = TV(I, 4) 'récupère le Nom dans la ligne 5 de TL
                    TL(6, K) = TV(I, 6) 'récupère le Lieu de naissance dans la ligne 6 de TL
                    TL(7, K) = TV(I, 7) 'récupère l'âge dans la ligne 7 de TL
                    TL(8, K) = TV(I, 8) 'récupère le sexe dans la ligne 8 de TL
                    K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
                Next I 'prochaine ligne de la boucle 2
                If K > 1 Then Me.ListBox1.Column = TL 'si K est supérieure à 1, alimente la Listbox1 avec le tableau TL
                Me.Txtnbel.Value = Me.ListBox1.ListCount 'renvoie le nombre d'éléments dans la Textbox2
                Exit Sub 'sort de la procédure
            End If 'fin de la condition
            
            '******************************************************
            'filtrer par sexe taper F ou M (accepte les minuscules)
            '******************************************************
            If Len(Me.Txtrecherche.Value) = 1 Then 'condition 2 : si la Textbox1 ne contient qu'un seul caractère
                For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
                    'condition 3 : si la Textbox1 est égale au sexe de la donnée ligne I colonne 8 de TV (les 2 convertis en MAJUSCULES)
                    If UCase(TV(I, 8)) = UCase(Me.Txtrecherche.Value) Then
                        ReDim Preserve TL(1 To 8, 1 To K) 'redimentionne le tableau des lignes TL (8 lignes, K colonnes)
                        TL(1, K) = I + 15 'récupère dans la ligne 1 de TL la ligne I+14 de la boucle (le tableau commence à la ligne 15)
                        TL(2, K) = O.Name 'récupère dans la ligne 2 de TL la classe (= le nom de l'onglet O)
                        TL(3, K) = TV(I, 2) 'récupère le code dans la ligne 3 de TL
                        TL(4, K) = TV(I, 3) 'récupère le Prénom dans la ligne 4 de TL
                        TL(5, K) = TV(I, 4) 'récupère le Nom dans la ligne 5 de TL
                        TL(6, K) = TV(I, 6) 'récupère le Lieu de naissance dans la ligne 6 de TL
                        TL(7, K) = TV(I, 7) 'récupère l'âge dans la ligne 7 de TL
                        TL(8, K) = TV(I, 8) 'récupère le sexe dans la ligne 8 de TL
                        K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
                    End If 'fin de la condition 3
                Next I 'prochaine ligne de la boucle
            
            Else 'sinon (condition2 : si la TextBox1 contient plus d'un seul caractère)
            
            '*************************************************************************
            'Tout autre filtre taper au moins deux caractères (accepte les minuscules)
            '*************************************************************************
    Debug.Print I; J, UBound(TV, 1); UBound(TV, 2)
                'For I = 1 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV
                   ' For J = 1 To UBound(TV, 2) 'boucle 3 sur toutes les colonnes J du tableau des valeurs TV
                        Select Case J 'agit en fonction de J
                            Case 2, 3, 4, 6, 7, 8   'cas correspondant au Code, Prénom, Nom,Lieu de naissance, Âge et Sexe
                                'condition 3 : si la Textbox1 est égale a une de ces colonne de TV (les 2 en MAJUSCULES)                   
      If UCase(Left(TV(I, J), Len(Me.Txtrecherche.Value))) = UCase(Me.Txtrecherche.Value) Then
                                
                                   ReDim Preserve TL(1 To 8, 1 To K) 'redimentionne le tableau des lignes TL (8 lignes, K colonnes)
                                    TL(1, K) = I + 15 'récupère dans la ligne 1 de TL la ligne I+14 de la boucle (le tableau commence à la ligne 15)
                                    TL(2, K) = O.Name 'récupère dans la ligne 2 de TL la classe (= le nom de l'onglet O)
                                    TL(3, K) = TV(I, 2) 'récupère le code dans la ligne 3 de TL
                                    TL(4, K) = TV(I, 3) 'récupère le Prénom dans la ligne 4 de TL
                                    TL(5, K) = TV(I, 4) 'récupère le Nom dans la ligne 5 de TL
                                    TL(6, K) = TV(I, 6) 'récupère le Lieu de naissance dans la ligne 6 de TL
                                    TL(7, K) = TV(I, 7) 'récupère l'âge dans la ligne 7 de TL
                                    TL(8, K) = TV(I, 8) 'récupère le sexe dans la ligne 8 de TL
                                    K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
                                    Exit For 'sort de la boucle 3
                                End If 'fin de la condition 3
                        End Select 'fin de l'action en fonction de la colonne J
                    'Next J 'prochaine colonne de la boucle 3
               ' Next I 'prochaine ligne de la boucle 2
            End If 'fin de la condition 2
        End If 'fin de la condition 1
    Next O 'prochaine onglet de la boucle 1
    If K > 1 Then Me.ListBox1.Column = TL 'si K est supérieure à 1, alimente la Listbox1 avec le tableau TL
    Me.Txtnbel.Value = Me.ListBox1.ListCount 'renvoie le nombre d'éléments dans la Textbox2
    End Sub
    Merci pour l'aide que vous tous essayez de m'apporter
    Djibysadji

  12. #12
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par djibysadji Voir le message
    J'ai appliqué ton code et je parviens à parcourir tous les onglets maintenant.
    Mon code n'est pas la cause de cette amélioration étant donné qu'il avait pour seule fonction de trouver l'erreur et non pas de la corriger.

    je ne parviens pas à faire une recherche sur l'age. Or je voudrais connaître le nombre d'élèves qui ont18 ans, par exemple.
    Ceci peut se faire sans VBA avec une simple fonction NB.SI.ENS().
    https://support.office.com/fr-FR/art...c-aa8c2a866842

  13. #13
    barpasc
    Invité(e)
    Par défaut
    Citation Envoyé par djibysadji Voir le message

    La ligne 69 est colorée jaune au débogage et le message d'erreur est "Incompatibilité de type". J'ai essayé de trouver le problème en vain.
    Il s'agit d'un formulaire de recherche avec tri.
    Merci d'avance pour votre soutien
    djibysadji
    Le code s'arrête, tu survoles "I" avec la souris et auras le numéros de ligne de là où s'est arrêté le code. Les fonctions "LEFT", "LEN", "UCASE" sont destinées principalement à des formats de type texte. Si c'est un format différent, ca peut générer une erreur.

    D'abord, il faut voir sur la ligne concernée ce qui s'y trouve.

Discussions similaires

  1. Incompatibilité de type ListBox
    Par priest69 dans le forum Access
    Réponses: 1
    Dernier message: 16/11/2005, 11h19
  2. Message incompatibilité de type
    Par Daniel MOREAU dans le forum Access
    Réponses: 5
    Dernier message: 10/10/2005, 20h57
  3. incompatibilité de type
    Par zooffy dans le forum Access
    Réponses: 2
    Dernier message: 13/06/2005, 15h12
  4. Incompatibilité de types dans un formulaire
    Par ahage4x4 dans le forum ASP
    Réponses: 3
    Dernier message: 03/05/2005, 15h39
  5. [XSD] Incompatibilité des types xs:ID et xs:IDREF ?
    Par Cpt.FLAM dans le forum Valider
    Réponses: 6
    Dernier message: 08/04/2005, 14h54

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