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 :

Union(range(Tb1),range(Tb2)).find => la méthode 'Union' a échoué


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut
    Bonjour,
    Je mets en place une sécurité assez complexe, basée sur 3 tables Id et un Id connecté.
    Je voudrais autoriser un accès à tous les Id des table 2 et 3 et à l'Id connecté (s'il fait parti de la table 1).
    Voici mon code (qui fonctionne pour autorisé un Id d'une seule table)
    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
    Dim NomChoisi As String
        Application.DisplayAlerts = False
    NomChoisi = "Car Cae"
    UsAbg = Sheets("Données").[B2]    'Id connecté
    With Sheets("Données")
    'Si NomChoisi appartient aux tables 2 ou 3 ou est égal à UsAbg --- la table 2 est en P5:P46, la table 3 est en V5:V22
    Set Cel = Union(Range("TbAT[At Abg]"), Range("TbAll[All Abg]"), UsAbg).Find(NomChoisi, Union(Range("B2"), Range("P5"), Range("V5")))
        If Not Cel Is Nothing Then
    '----------
    Procédure si Ok
            Set Cel = Nothing
    '------------Suite Sécurité si Ko
        Else
            Call MsgBox("SECURITE" ...)
    End With
        Application.DisplayAlerts = True
    Je dois avoir un pb avec find, mais je maitrise pas bien
    Est-ce que qq'1 peut m'aider svp.

    J'ai déjà trouvé une explication / erreur, car j'ai utilisé une variable (UsAbg) dans mon Union. Donc j'ai corrigé mon code par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cel= Union(Range("TbAT[At Abg]"), Range("TbAll[All Abg]"), Range("B2"))
    si je m'arrête là et que je fais Cel.Select, mes 3 zones sont bien sélectionnées, mais dès que j'ajoute le find, j'ai, le motif d'erreur est : "Incompatibilité de type".
    J'ai essayé avec Dim Cel as Variant, mais cela ne change rien.
    Merci de votre aide

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    C'est quoi ce 2nd paramètre de find passé en range ?
    Fais F1 sur find pour voir sa syntaxe et les paramètres attendus.
    .Find n'a rien à voir avec les fonctions feuille

    eric

  3. #3
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut
    Bonjour Eric,
    Merci de me répondre
    Le 2nd paramètre est le "After"
    Mais je viens de voir qu'il ne peut y avoir qu'une cellule unique, donc j'ai tout enlevé.
    J'en suis à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Cel = Union(Range("TbAT[At Abg]"), Range("TbAll[All Abg]"), Range("B2")).Find(NomChoisi)
    J'ai testé avec un NomChoisi en B2, en Table 2 (TbAT), c'est Ok, mais en Table 3 (TbAll) ça ne trouve pas mon Id, je reçois le message "Vous n'êtes pas autorisé".
    J'ai remplacé
    Range("TbAll[All Abg]") par Range("V5:V10"), c'est pareil, et comme je l'ai dit tout à l'heure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Cel = Union(Range("TbAT[At Abg]"), Range("TbAll[All Abg]"), Range("B2"))
    Cel.Select
    sélectionne bien mes 3 zones.

    Je ne vois pas le nouveau pb

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Sans doute qu'avec un fichier on pourra avancer.
    eric

  5. #5
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 637
    Par défaut
    Eric,
    Comme demandé, voici un exemple de mon fichier.
    Merci
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je comprend bien pour l'ID connecté : cet identifiant est dans une cellule et on doit chercher si cet identifiant est dans ton ListObject1

    mais pour les deux autres tableaux, où est stocké l'ID à tester ??


    EDIT : voici une proposition, avec l'ID secondaire codé en dur dans la macro, comme ton exemple

    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
    Sub Acces()
    Dim Autorisation As Boolean
    Dim NomChoisi As String
    Dim Plage As Range
    Dim Cel As Range
     
    NomChoisi = "Séb TAN"
     
    With Sheets("Données")
        ' recherche de l'ID connecté
        Set Cel = .ListObjects("TbStg").DataBodyRange.Find(.Range("B2").Value, , xlValues, xlWhole)
     
        If Not Cel Is Nothing Then
            Autorisation = True
        Else
            ' recherche de l'ID dans le tableau 2 et 3
            Set Plage = Union(.ListObjects("TbAT").DataBodyRange, .ListObjects("TbAll").DataBodyRange)
            Set Cel = Plage.Find(NomChoisi, , xlValues, xlWhole)
     
            If Not Cel Is Nothing Then
                Autorisation = True
            Else
                Call MsgBox("SECURITE")
            End If
        End If
    End With
     
    End Sub

Discussions similaires

  1. [XL-2000] Union de plage Range renvoie un Range à moitié vide ou #N/A
    Par aurelien.g dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 21/04/2011, 14h51
  2. Rang Conditionnel (Rang.si)
    Par berapard dans le forum Contribuez
    Réponses: 0
    Dernier message: 07/04/2010, 20h26
  3. Range de Range, pour un tableau [Facile]
    Par Tomme dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/07/2007, 16h33
  4. [VBA][Excel] Range & Union
    Par sat478 dans le forum Access
    Réponses: 4
    Dernier message: 16/12/2005, 10h59
  5. [VBA Excel] problème de range avec find
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/11/2005, 14h56

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