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 :

Problème recherche vba


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Points : 100
    Points
    100
    Par défaut Problème recherche vba
    Bonjour,


    Je voudrais que lorsque l'utilisateur rentre un n° dans une zone de texte
    excel recherche dans une plage donnée ce n°, copie la cellule avant(même ligne) et la recopie dans une cellule d'une autre feuille

    J'ai essayé ce code mais ma valeur de ma cellule est nulle


    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
    29
    30
    31
    32
    33
     
     
    Private Sub cmdRecherche_Click()
    Dim reponse, recherche As String
    Dim plage As Range
    Dim cell As Range
    Dim fiche As String
     
     
    recherche = txtRecherche
    'Si txtrecherche est vide
    If recherche = "" Then
    reponse = MsgBox("Veuillez rentrer un N° Ats: Merci", vbOKCancel + vbExclamation, "Pas de N° Ats")
     If reponse = vbYes Then
         txtRecherche.SetFocus
        Exit Sub
     End If
    End If
    Feuil1.Select
    Set plage = Feuil1.Range("C14:C238")
    'Boucle sur la plage
    For Each cell In plage
    If cell.Value = recherche Then
    cell.Select
     
    fiche = Range(cell.Address).Offset(0, -1).Value
     
    Feuil2.Range("A1").Value = fiche & Chr(10) & recherche
    End If
    Next cell
     
     
    End Sub
    une idée merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    petite chose qui me parait bizarre déjà
    à moins que Feuil1 et Feuil2 ne soient des variables de type worksheet

    essaye en remplaçant
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Worksheets("Feuil1"). 
    ou
    Worksheets("Feuil2").
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  3. #3
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fiche = Range(cell.Address).Offset(0, -1).Value
    tu peux l'écrire comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fiche = cell.Offset(0, -1).Value
    A mon avis ta cellule reste vide parcequ'il ne trouve rien
    A tout hazard fais ce petit test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For Each cell In plage
    If cell.Value = recherche Then
      fiche = Range(cell.Address).Offset(0, -1).Value
      MsgBox "trouvé !"
      Exit For
    End If
    Next cell
    MsgBox "fiche = " & fiche
    EDIT : re zyhack, je vois que tu commences à taper plus vite au clavier
    Tu peux utiliser Feuil1.Range("A1"), Feuil1 étant le CodeName de la feuille
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  4. #4
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Bonsoir à tous

    Sans la boucle, qui risque de prendre du "temps", je propose ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Feuil1.Select
    With Feuil1.Range("C14:C238")
        Set c = .Find(recherche, LookIn:=xlValues, Lookat:=xlWhole) '
    End With
    Feuil2.Range("A1").Value = Feuil1.Range("B" & c.Row).Value & Chr(10) & recherche
    Eric

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ou encore ( presque idem solution edelweisseric, mais avec traitement du cas "non trouvé")

    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
    29
    30
    Private Sub cmdRecherche_Click()
    Dim reponse$, recherche$, fiche$, ad$
    Dim c as Range
     
     
    recherche = txtRecherche
     
    'Si txtrecherche est vide
    If recherche = "" Then
    reponse = MsgBox("Veuillez rentrer un N° Ats: Merci", vbOKCancel + vbExclamation, "Pas de N° Ats")
     If reponse = vbYes Then
         txtRecherche.SetFocus
        Exit Sub
     End If
    End If
     
    Sheets("Feuil1").Select
    With Worksheets("Feuil1").Range("C14:C238")
    Set c = .Find(recherche, LookIn:=xlValues, LookAt:=xlWhole)
    End With
        If Not c Is Nothing Then
        ad = c.Address
        fiche = Range(ad).Offset(0, -1).Value
        Sheets("Feuil2").Range("A1").Value = fiche & Chr(10) & recherche
        Else
        MsgBox "La recherche a échoué : " & recherche & " non trouvé !"
        End If
    Set c = Nothing
     
    End Sub

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Points : 100
    Points
    100
    Par défaut
    merci por vos réponses


    pour fring
    j'ai essayé ton code , la cellule est bien vide(pas de valeur)
    j'avais le même résultat en deboguant.

    pour edelweisseric
    je supose que c tu le déclare en object
    mais j'ai une erreur variable objet ou variable de bloc with non définie

  7. #7
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Re

    Désolé, mais il faut le déclarer :
    Il y avait la réponse dans le code de jacques_jean

    Eric

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Points : 100
    Points
    100
    Par défaut
    pour jacques jean et edelweisseric

    on est sur le bon chemin mais fiche reste vide alors elle devrait me donner
    "Ac mod Elit "

    il doit avoir un problème dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    fiche = Range(ad).Offset(0, -1).Value
    en deboguant ad donne la bonne adresse mais fiche = ""

    merci à vous

  9. #9
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    A tout hazard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fiche = Range(ad).Offset(0, -1).Text
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  10. #10
    Invité
    Invité(e)
    Par défaut
    C'est en effet bizarre, j'ai bien fait l'essai avec dans la colonne "B" et sur la ligne correspondant à l'adresse : une fois une valeur, une fois du texte.

    Si la solution proposée par Fring ne fonctionne pas êtes-vous sur du : 0, -1

    A vérifier aussi, les données ne seraient-elles pas dans des cellules fusionnées ?
    Dernière modification par AlainTech ; 18/05/2008 à 11h45. Motif: Fusion de 2 messages

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Points : 100
    Points
    100
    Par défaut
    En essayant .text pas de changement

    la plage à parcourir est(c14,c238)
    l'adresse que doit renvoyé fiche est la colonne b =>(0,-1)

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Points : 100
    Points
    100
    Par défaut
    non la colonne b n'est fusionnée

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Regardez avec ce fichier exemple. Chez moi cela fonctionne et pour vous ?
    http://sd-1.archive-host.com/membres...sai_cherch.xls

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Je viens de tester et, aussi curieux que celà puisse paraître, avec feuil1, ça ne fonctionne pas.
    Je reprends le code d'edelweisseric qui me paraît le plus sioux sinon le plus fleuri pour ce genre de recherche
    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
    Private Sub cmdRecherche_Click()
    Dim reponse, recherche As String
    Dim plage As Range
    Dim cell As Range
    Dim fiche As String
    Dim c As Range
     
        recherche = txtRecherche
        'Si txtrecherche est vide
        If recherche = "" Then
        reponse = MsgBox("Veuillez rentrer un N° Ats: Merci", vbOKCancel + vbExclamation, "Pas de N° Ats")
         If reponse = vbYes Then
             txtRecherche.SetFocus
            Exit Sub
         End If
        End If
        With Worksheets("feuil1").Range("C14:E238")
            Set c = .Find(recherche, LookIn:=xlValues, Lookat:=xlWhole)
            If Not c Is Nothing Then _
            Worksheets("feuil1").Range("A1") = c.Offset(0, -1) & Chr(10) & recherche
        End With
    End Sub
    Avec feuil1 à la place de Worksheets("feuil1") pas de salut
    Je suis aussi étonné que vous.
    Bon week-end à tous.

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Points : 100
    Points
    100
    Par défaut
    oui une petite question dans ma plage(c14,c238) j'ai des cellules vides

    ca peut jouer un role????

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    En recherche, aucune. Avec ta boucle non plus car tu parcours toute ta plage même si la donnée a été trouvée, à plus forte raison si elle n'existe pas.
    Je te conseille fortement d'utiliser Find.

    Edit
    Si recherche peut n'être qu'un bout de la donnée à trouver, remplace xlwhole par xlpart

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 175
    Points : 100
    Points
    100
    Par défaut
    ok voilà l'erreur les feuil1

    attention dans ton code ouskel'n'or

    tu as mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Worksheets("feuil1").Range("A1") = c.Offset(0, -1) & Chr(10) & recherche
    il faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Worksheets("feuil2").Range("A1") = c.Offset(0, -1) & Chr(10) & recherche

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

Discussions similaires

  1. problème recherche photos
    Par jeck dans le forum Access
    Réponses: 3
    Dernier message: 18/08/2006, 10h37
  2. Problème de VBA de passage de 2000 à 2002
    Par Oberown dans le forum Access
    Réponses: 9
    Dernier message: 10/05/2006, 14h51
  3. Problème recherche sur critère
    Par Sendo dans le forum Access
    Réponses: 1
    Dernier message: 08/03/2006, 00h51
  4. problème recherche d'un champ sous paradox
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 2
    Dernier message: 26/04/2005, 15h04
  5. problème avec VBA
    Par Delph dans le forum Langage
    Réponses: 2
    Dernier message: 19/08/2002, 13h15

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