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 :

VBA Selection et copie d'une ligne suite à une fonction .find


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Expert Règlementaire
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert Règlementaire

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut VBA Selection et copie d'une ligne suite à une fonction .find
    Bonjour,

    Je me présente, je suis Morgane. Je débute dans VBA et j’atteins donc vite mes limites... J'ai fouillé sur plusieurs forums dont celui-ci mais je n'ai pas réussi à adapter sans bug à mon propre fichier...

    J'ai créé un formulaire permettant de recueillir des critères de recherche pour ainsi aller rechercher dans une feuille toutes les lignes correspondants a ce(s) critère(s).

    J'ai du mal trouver ce qui bug dans mon code. J'aimerais qu'après la fonction .find une fois que j'ai trouvé la cellule qui contient ma recherche, je puisse sélectionner toute la ligne correspondante à cette cellule et qu'elle se copie dans une feuille du même classeur.

    Ici c'est un exemple avec le Critère Année, mais je devrais l'adapté à tous les critères prévus.

    Je ne sais pas si je suis claire mais voici mon code.

    Je vous remercie infiniment pour votre aide, indulgence et bienveillance face à ma question simpliste de débutante

    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
     
    Public Sub CmdLancerRecherche_Click()
     
    Dim MaBase As Range '= tableau dans lequel on fait la recherche ==> Onglet Inspection&Questionnement
    Dim Annee As String '=TextBox Annee du formulaire de recherche
    Dim Autorite As String '=TextBox Autorite du formulaire de recherche
    Dim Pays As String '=TextBox Pays du formulaire de recherche
    Dim MarqueProduit As String '=TextBox MarqueProduit du formulaire de recherche
    Dim Thematique As String '=TextBox Thematique du formulaire de recherche
    Dim Ecart As String '=TextBox Ecart du formulaire de recherche
    Dim Cell As Range 'chaque cellule passée au crible pour la recherche
    Dim Recherche As Range 'résultat de la recherche sur chaque cellule
     
    Annee = TextAnnee
    Autorite = TextAutorite
    Pays = TextPays
    MarqueProduit = TextMarqueProduit
    Thematique = TextThematique
    Ecart = TextEcart
     
    For Each Cell In Worksheets("Inspections & Questionnements").Range("B2:B100") 'je ne souhaite chercher Annee que dans la colonne B dont les cases sont non vides
        Recherche = Worksheets("Inspections & Questionnements").Range("B2:B100").Find(Annee).Select 'je stock dans la variable Recherche la cellule qui match avec ma recherche
        Recherche.EntireRow.Copy Worksheets("Résultat").Range("A1").End(xlUp) 'ici je souhaiterais copier la ligne entière correspondante à ma cellule trouvée et selectionnée à la ligne au dessus
     
    Next Cell

  2. #2
    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
    Lorsqu'on utilise Find, la bonne pratique est de commencer par vérifier le résultat avant de l'exploiter.

    Mais je pense que le truc qui cloche vraiment dans ton code c'est Range("A1").End(xlUp).
    En gros, tu te places sur le PREMIERE ligne et tu demandes de rechercher la première ligne occupée.... au dessus.

    Ceci devrait mieux fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Recherche = Worksheets("Inspections & Questionnements").Range("B2:B100").Find(Annee)
        If Not Recherche Is Nothing Then
            Recherche.EntireRow.Copy Worksheets("Résultat").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        Else
            MsgBox "Année " & Annee & " non trouvée"
        End If
    Dernier conseil : les Select/Selection, évite autant que tu peux (c'est-à-dire presque tout le temps).

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Expert Règlementaire
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert Règlementaire

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut Merci !
    Bonjour Menhir,

    Un énorme merci pour votre aide rapide !

    Effectivement une fois que mon code est traduit en français ça parait un peu débile ! ^^

    Par contre j'ai toujours une erreur lorsque j'exécute la macro... il est écrit "Erreur d'exécution '91' : Variable objet ou variable de bloc with non définie" et ca surligne en jaune la ligne de code "Recherche = Worksheets("Inspections & Questionnements").Range("B2:B100").Find(Annee)" sans que je sache pourquoi....

    Help svp

  4. #4
    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 Morgane22 Voir le message
    Par contre j'ai toujours une erreur lorsque j'exécute la macro... il est écrit "Erreur d'exécution '91' : Variable objet ou variable de bloc with non définie" et ca surligne en jaune la ligne de code "Recherche = Worksheets("Inspections & Questionnements").Range("B2:B100").Find(Annee)" sans que je sache pourquoi....
    Je miserais sur une erreur dans le nom de la Worksheet.
    Au passage, mettre un "&" dans un nom d'onglet, c'est vraiment vouloir se tirer une balle dans le pied.

    Tes renseignements de variables aussi sont très étrange.
    C'est quoi "TextAnnee" ?
    Si ce sont des champs de UserForm, il faudrait indiquer quel est leur papa.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Expert Règlementaire
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert Règlementaire

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Je miserais sur une erreur dans le nom de la Worksheet.
    Au passage, mettre un "&" dans un nom d'onglet, c'est vraiment vouloir se tirer une balle dans le pied.

    Tes renseignements de variables aussi sont très étrange.
    C'est quoi "TextAnnee" ?
    Si ce sont des champs de UserForm, il faudrait indiquer quel est leur papa.
    Alors oui, j'ai changé la déno de ma feuille pour éviter des problèmes par la suite.
    Par contre ca ne change rien, malgré le nom identique sans erreur j'ai toujours ce bug de macro.

    Effectivement "TextAnnee" est le champs de mon formulaire. Qu'appelez-vous Papa? en quoi consiste "indiquer quel est leur papa"?

    Je vous remercie !

  6. #6
    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 Morgane22 Voir le message
    Qu'appelez-vous Papa? en quoi consiste "indiquer quel est leur papa"?
    La référence au UserForm dans lequel le champ est implanté.
    Mets un point d'arrêt à la fin des renseignements de variables et vérifie leur contenu dans la fenêtre des variables locales.
    Si les valeurs ont bien été transmises, c'est que j'ai tors (je ne suis pas spécialiste des UserForm, ayant beaucoup de réticence à utiliser ces éléments qui me semblent peu ergonomiques et inesthétiques).

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Expert Règlementaire
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Expert Règlementaire

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut
    Il me semble que c'est la variable Recherche qui pose problème... Car quand je mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox (Worksheets("Inspections-Questionnements").Range("B2:B100").Find(Annee))
    à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox (Worksheets("Inspections-Questionnements").Range("B2:B100").Find(Annee))
    Ca me renvoie bien dans un MsgBox le résultat de ma recherche... sans bug

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/01/2015, 18h30
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. copié une ligne d'une table dans une autre
    Par Invité dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/11/2009, 20h48
  4. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  5. Réponses: 2
    Dernier message: 17/04/2007, 23h35

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