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 :

Fonctions Set & Find


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 3
    Par défaut Fonctions Set & Find
    Bonjour à tous,

    Mon but est de trouver les différents noms utilisés dans la plage B12 à B18 de la feuille 1 (ESSAI) puis de rechercher ce mot dans la feuille 3 (TEXTE) et de copier les commentaires (cellule à droite du nom) puis de les coller dans la feuille2 (BDC - LES ATELIERS REUNIS).
    Le code ci - dessous fait bien cela, mais en revanche lors de la 2ème itération, l'erreur 91 [Variable objet ou variable de bloc With non définie] apparait sur la ligne "Set CellCherCher = CherCher.Offset(rowOffset:=0, columnOffset:=1)" et je ne vois pas d'où vient le problème.
    Pouvez - vous m'aider ?
    Je vous joins un exemple.
    Merci beaucoup.

    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
       Sub TEST()
        Dim i, Cell As String
        Dim CherCher, CellCherCher As Object
     
        For i = 12 To 18
            Cell = "B" & i
                If IsEmpty(Range(Cell)) Then
     
                Else
                    Set CherCher = Sheets("TEXTE").Cells.Find(What:=Range(Cell), LookAt:=xlWhole)
                    'Worksheets("TEXTE").Activate
                   Set CellCherCher = CherCher.Offset(rowOffset:=0, columnOffset:=1)
                    CellCherCher.Select
                    Set Acopier = ActiveSheet.Range(Selection, Selection.End(xlDown))
                    Acopier.Copy  'Attention à la dernière phrase
                   Sheets("BDC - ATELIERS REUNIS").Activate
                    ActiveSheet.Range("C39").End(xlUp).Offset(2, 0).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False
     
                End If
     
        Next i
     
        End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    bonjour,
    https://www.developpez.net/forums/d1...f/#post8959731

    intéresses toi à la fonction SerchXls!

  3. #3
    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,

    Find renvoit un Objet Range

    Donc si ton premier Find ne trouve rien, ta variable CherCher vaut "Nothing"

    Si elle vaut nothing, tu ne peux pas la manipuler, et à fortiori en définir une nouvelle variable Objet Range (CellCherCher) basée sur CherCher

    Quand on utilises find, derrière on test TOUJOURS si le retour est bien un objet différent de Nothing


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Cell As Range, CellBis As Range
    Set Cell = ActiveSheet.Usedrange.Find("toto") ' pour l'exemple ... mais normalement on renseigne tous les paramètres !
    If Not Cell Is Nothing Then
        Msgbox "On a trouvé quelque chose"
        Set CellBis = Cell.Offset(0,1)
    Else
        Msgbox "On a rien trouvé !"
        ' Set CellBis = Cell.Offset(0,1)   ' ça ça va planter car Cell vaut Nothing donc il n'est "rien" et on ne peut rien en tirer en terme d'enfant ou de parent

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 3
    Par défaut
    Bonjour,

    Merci pour cette réponse, je vais essayer.
    En revanche, je sais que le mot existe dans ma première feuille, pourquoi cela me renvoie "nothing" alors que le mot existe bien ?
    Merci.

    Pierre.

  5. #5
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Même si ton mot existe, il suffit qu'il ne soit écrit de la même manière pour faire chou blanc.
    Si dans ton code tu écris le mot normalement mais que dans ta feuille il y est des espaces devant où derrière ton mot, alors là il ne trouve rien.
    Soit tu n'etoie tes cellules si il y a des espaces devant où derrière (voir utilisation de Trim dans l'aide), sinon tu utilises les astérisques lors de ta recherche sur le mot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cell = ActiveSheet.Usedrange.Find("*toto*")
    Edit : les lettres en capital et bas de casse peuvent jouer : voir Ucase dans l'aide
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  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,

    à noter également que tu joues dangereusement avec les feuilles actives, avec des .Activate et des Range() sans feuille préfixée ... dans une boucle où tu remet jamais les conditions initiales de ces objets actifs en place.

    ça ne génère pas un conflit où tu lis des cellules d'une feuille non souhaitée ?


    rajoute bien le nom des feuilles devant chaque range

Discussions similaires

  1. Fonction set ImagePath
    Par Ludy07 dans le forum IHM
    Réponses: 1
    Dernier message: 06/08/2007, 21h06
  2. [STL] set::find !
    Par ZaaN dans le forum SL & STL
    Réponses: 5
    Dernier message: 21/06/2007, 09h31
  3. Fonction set
    Par cococococococo dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 20/06/2007, 08h39
  4. Réponses: 1
    Dernier message: 19/04/2007, 09h08
  5. Aide sur fonction set et handles
    Par occor dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 23/03/2007, 19h17

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