Problème de fonctionnement de VBA

Anonyme
2022-05-03T08:33:51+00:00

Bonjour,

Je suis utilisateur d'office 2016. J'effectue de la programmation avec VBA /Excel. Dans VBA, J'utilise fréquemment l'OBJET "Dictionary" et en particulier la METHODE "Exists" qui permet de vérifier si un élément (Clé) fait partie du Dictionary.

Je viens de constater que cette Méthode n'est plus Opérationnelle. Que l'élément/Clé fasse ou NON partie du Dictionary, la Méthode Exists indique VRAIE. Est-ce un problème générique ou spécifique à la version VBA installée sur mon PC ?

Merci de votre réponse.

Cordialement.

Guy PELLETIER

Microsoft 365 et Office | Excel | Pour la maison | Autres

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

46 réponses

  1. Anonyme
    2022-05-04T07:02:49+00:00

    Bonjour Arnaud,

    Merci pour ta réponse.

    Je viens de joindre un fichier Excel intitulé "M Essai 3 03-05-22.xlsm" à l'adresse indiquée.

    Je ne suis pas certain que l'envoi ai fonctionné.

    J'ai déjà été confronté au problème des dates.

    Le dysfonctionnement ne vient pas de là.

    Il est le même avec une liste de NOMBRES.

    Un nombre n'appartenant pas à l'ensemble du DICTIONARY.

    EXISTS est toujours TRUE alors qu'elle devrait être FALSE.

    Ce qui est confirmé par la Méthode "Not IsEmpty".

    Comme je l'ai dis plus haut, ce Dysfonctionnement est apparu récemment.

    Jusqu'à la semaine dernière , j'ai utilisé maintes et maintes fois EXISTS qui à toujours fonctionné correctement.

    J'aimerais bien comprendre ce qui se passe.

    Merci encore un fois t'intéresser à ce sujet.

    Cordialement.

    Guy

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Hecatonchire 54,030 Points de réputation Modérateur bénévole
    2022-05-03T23:49:51+00:00

    Bonjour

    Publies ton fichier en utilisant un service de cloud ou cette adresse par exemple : http://www.cjoint.com (tu nous communiques dans une réponse l'adresse de téléchargement obtenue).

    Pas de données confidentielles.

    Je viens de tester EXISTS par rapport à une saisie de date dans une Msgbox, il n'y a pas de problème.

    Vérifie que tes dates dans DtX et Dico2 on le même format (pas une en Fr ->15/02/2022, l'autre Us->02/15/2022 = inversion Mois et jour)

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2022-05-03T20:07:04+00:00

    Bonsoir ,

    A toute fin utile voici le code de la Macro montrant le dysfonctionnement de la Méthode Exists.

    Cordialement.

    Option Compare Text
    Option Base 1

    Sub A2100_Essai_METHODE_Exists()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim rg As Range
    Dim L0 As Long 'N° de la dernière Ligne avec des données dans la Fle/XL "VALEURS"
    Dim C0 As Long 'N) de Colonne testée
    Dim TbVBA() As Variant
    Dim Nb_1 As Long
    Dim Nb_2 As Long
    Dim NbDi1 As Long
    Dim NbDi2 As Long
    Dim i As Long
    '1/- Listes de données à traiter (5 listes possible) - Feuille/Excel "VALEURS"
    Set wb = Workbooks("M Essai 3 03-05-22.xlsm")
    Set ws = wb.Worksheets("VALEURS")
    '-----------------------------------------------------------------------------------
    wb.Activate: ws.Select
    '-----------------------------------------------------------------------------------
    L0 = ws.Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
    If L0 >= 2 Then
    Set rg = ws.Range(ws.Cells(2, 1), ws.Cells(L0, 1))
    '-----------------------------------------------------------------------------------
    wb.Activate: ws.Select: rg.Select '-
    '-----------------------------------------------------------------------------------
    TbVBA = rg.Value
    Nb_1 = UBound(TbVBA, 1): Nb_2 = UBound(TbVBA, 2)
    x = 1
    '2/- Elaboration des Dictionaries Dico1 et Dico2 associés à une liste
    Set Dico2 = CreateObject("Scripting.Dictionary") 'Dico2 (CLE: Valeur-Donnée /ITEM: indice-donnée-TbVBA )
    For i = 1 To Nb_1
    Dico2(TbVBA(i, 1)) = i
    Next i
    NbDi2 = Dico2.Count
    '3/- Données à TESTER par la Méthode Exists
    Date1 = InputBox("ENTRER une DATE")
    x = 1
    DtX = CDate(Date1)
    If IsDate(DtX) Then
    x = 1
    Nb_Dt1 = Dico2(DtX)
    x = 1
    '4/- Contrôle de l'appartenance de la Donnée à tester par la METHODE "Exists"
    If Dico2.Exists(DtX) = True Then '>>>>> CONDITION N°1 VRAIE: DtX appartient à Dico2
    x = 1
    A1 = "VRAIE"
    Else '>>>>> CONDITION N°1 FAUSSE: DtX appartient à Dico2
    x = 1
    A1 = "FAUSSE"
    End If
    '5/- Contrôle de l'appartenance de la Donnée à tester par la METHODE équivalente "Not IsEmpty"
    If Not IsEmpty(Dico2(DtX)) = True Then '>>>>> CONDITION N°2 VRAIE: Dico2(DtX) PAS VIDE
    x = 1
    B1 = "EXISTE"
    Else '>>>>> CONDITION N°2 FAUSSE: Dico2(DtX) VIDE
    x = 1
    B1 = "Vide"
    End If
    End If
    '6/- Résultat du test
    If (Dico2.Exists(DtX) = True And Not IsEmpty(Dico2(DtX)) = True) And (Dico2.Exists(DtX) = True And Not IsEmpty(Dico2(DtX)) = True) Then
    x = 1
    MsgBox " VALEUR Elément/Clé Spécifié : " & DtX & Chr(10) & Chr(10) & _
    " METHODE Exists : " & A1 & Chr(10) & Chr(10) & _
    " la Date appartient à Dico2" & Chr(10) & Chr(10) & _
    " VERIFICATION" & Chr(10) & _
    " Dico2(" & DtX & ") : " & B1
    Else
    x = 1
    MsgBox " VALEUR Elément/Clé Spécifié : " & DtX & Chr(10) & Chr(10) & _
    " METHODE Exists : " & A1 & Chr(10) & Chr(10) & _
    " Alors qu'elle derait être FAUSSE" & Chr(10) & _
    " la Date N'appartient pas à Dico2" & Chr(10) & Chr(10) & _
    " VERIFICATION" & Chr(10) & _
    " Dico2(" & DtX & ") : " & B1
    End If
    End If
    End Sub

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2022-05-03T19:51:01+00:00

    Bonsoir,

    et merci pour votre réponse.

    Pas de problème , je peux vous envoyer un fichier Excel xlsm avec la Macro montrant le dysfonctionnement.

    Mais, je ne vois pas comment le joindre à ce message.

    Si cela vous convient, je peux vous envoyer un autre message uniquement du code de la macro mais ça risque d'être difficilement utilisable.

    Cordialement.

    Guy

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  5. Anonyme
    2022-05-03T15:17:34+00:00

    Nous utilisons un service de traduction pour assister nos utilisateurs. Veuillez nous excuser pour les éventuelles erreurs grammaticales.

    D’accord, vous pouvez partager cet exemple de programme dans OneDrive et le partager ici.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire