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 :

Fonction FIND avec nom worksheet en variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Par défaut Fonction FIND avec nom worksheet en variable
    Bonjour,

    J'ai pas mal cherché avant de faire ce post, mais je n'ai pas trouvé la réponse à ma question.
    Je tente d'utiliser la fonction FIND avec le nom du worksheet en paramètre et cela ne fonctionne pas. Si je le met "en dure", pas de souci.

    Voici le code que j'utilise :

    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
    Sub Test()
     
    Dim Ws As Worksheet
    Dim i As Integer
    Dim LigneManagers As Range
    Dim DernLigne As Long
     
    Application.ScreenUpdating = False
    i = 1
    For Each Ws In ThisWorkbook.Worksheets
     
        DernLigne = Ws.Range("C" & Rows.Count).End(xlUp).Row
     
            ' Ligne qui fonctionne
        Set LigneManagers = Worksheets("Feuill1").Range("C2:C30").Find("Managers", LookIn:=xlValues)
     
            ' Ligne qui ne fonctionne pas
        Set LigneManagers = Ws.Range("C2:C30").Find("Managers", LookIn:=xlValues)
     
        Worksheets("Global").Cells(i, 1).Value = Ws.Name
        Worksheets("Global").Cells(i, 5).Value = DernLigne
        Worksheets("Global").Cells(i, 2).Value = LigneManagers.Address
    i = i + 1
    Next Ws
    End Sub
    Avec le Ws.Range("C2:C30").Find("Managers", LookIn:=xlValues), je récupère un
    Erreur d'execution '91' ; Variable objet ou variable de bloc With non définie
    et je ne vois pas d'où cela peut venir.

    Je suis très loin d'être un expert en VBA alors merci d'être indulgent !
    Et merci d'avance pour les retours permettant de corriger le pb.

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour

    Le code me parait correct à première vue.


    Celui ci testé sur un classeur 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
    Sub Test()
    Dim LigneManagers As Range
    Dim DernLigne As Long
    Dim Ws As Worksheet
    Dim i As Integer
     
    Application.ScreenUpdating = False
    For Each Ws In ThisWorkbook.Worksheets
        With Ws
            DernLigne = .Range("C" & .Rows.Count).End(xlUp).Row
            Set LigneManagers = .Range("C2:C30").Find("Managers", LookIn:=xlValues)
            If Not LigneManagers Is Nothing Then
                i = i + 1
                Worksheets("Global").Cells(i, 1).Value = .Name
                Worksheets("Global").Cells(i, 5).Value = DernLigne
                Worksheets("Global").Cells(i, 2).Value = LigneManagers.Address
            End If
        End With
    Next Ws
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Par défaut
    Merci bcp pour vos retours.

    Effectivement avec le With Ws / End With, cela fonctionne parfaitement. J'ai du mal à comprendre pourquoi il le faut forcément mais pas grave, ça répond au besoin et c'est le principal.

    Il me reste un autre point que je vais traiter en dehors de ce post .... la procédure prend tous mes ongets .... sauf un ! J'ai beau le renommer ou le déplacer, rien n'y fait. Je n'ai le retour que de 20 onglets sur 21 .... la magie de l'informatique !!

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Peut être le dernier ne contient pas de manager dans la plage C2:C30

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2019
    Messages : 3
    Par défaut
    C'était effectivement ce genre d'erreur .... même au départ!
    Mon premier onglet ne contient pas "Managers" ce qui renvoyait l'erreur '91'.
    Ce n'est pas le With qui a résolu le problème (même si c'est plus propre) mais surtout le "If Not LigneManagers" si j'ai bien tout compris!!

    Du coup .... plus d'erreur nul part.... MERCI ENCORE!

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un petit exemple de l'utilisation d'un argument typé comme un objet Worksheet. Cette procédure Affiche ou Masque la feuille définit par l'argument sht
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub HideUnhideSheet(sht As Worksheet)
      With sht
       If .Visible = 2 Then .Visible = 0
      .Visible = Not .Visible
      End With
    End Sub
    La procédure pour le test. Il suffit de changer la valeur de la constante pour masquer ou afficher la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub TestHideHunhideSheet()
      Const FileName As String = "Feuil1"
      Dim objSheet As Worksheet
      Set objSheet = ThisWorkbook.Worksheets(FileName)
      HideUnhideSheet objSheet
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. fonction find avec une variable
    Par tamtam64 dans le forum Excel
    Réponses: 1
    Dernier message: 12/03/2016, 13h14
  2. [XL-2003] Fonction RECHERCHEV avec nom de variable en source
    Par brunop3165 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/06/2011, 00h19
  3. Requête avec nom de champ "variable"
    Par Pgs dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/07/2007, 10h25
  4. Réponses: 4
    Dernier message: 18/01/2007, 05h46
  5. Appel d'une fonction C avec nom de fichier en paramètre
    Par vince3320 dans le forum Fortran
    Réponses: 4
    Dernier message: 21/11/2006, 14h58

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