Rechercher des valeurs

hamzy Messages postés 17 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Merci les gars pours vos reponses mais j'ai un autre soucis.
j'ai un userform avec les champs matricule, nom, prenom, date d'embauche, fonction, service, responsable de service et une base de données (feuille excel) qui contient toutes les données saisies à partir du userfom.
les valeurs des champs sont rangés sur la feuille ligne par ligne.
j'aimerais pouvoir rechercher mes données saisies à partir du champ matricule ou nom.
à chaque matricule ou nom entrer, la macro va rechercher sur la feuille excel si le matricule ou le nom existe et renvoi les valeurs trouvées de la ligne correspondante dans les champs du userform nom, prenom, date d'embauche, fonction, service, responsable de service.
lorsque le nom ou le matricule entré n'est pas retrouvé, il affiche une message du genre "recherche infructueuse".

Merci de votre attention.

7 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Re-
    Alors pour chercher, dans la colonne A de la feuille "base", la valeur contenue dans le textbox1 (matricule) voici le code (et mes sources) :
    sources, merci une nouvelle fois à Michel_m : https://forums.commentcamarche.net/forum/affich-15642764-programme-parcourir-plusieurs-tableaux-ecel

    Private Sub CommandButton1_Click()
    Dim lignecherchee As Long
    Dim valeur
    valeur = TextBox1
    If Application.CountIf(Sheets("base").Columns(1), valeur) > 0 Then 'test si le matricule a déjà été saisi
    lignecherchee = Sheets("base").Columns(1).Find(valeur, Range("A2"), xlValues).Row 'renvoie la ligne correspondante au matricule
    TextBox2.Value = Range("D" & lignecherchee) 'renvoie dans le Textbox2 (nom) la valeur contenue dans la colonne D
    TextBox3.Value = Range("E" & lignecherchee)
    TextBox4.Value = Range("F" & lignecherchee)
    ComboBox1.Value = Range("G" & lignecherchee)
    Else
    MsgBox ("recherche infructueuse") 'si la valeur cherchée n'existe pas
    End If
    End Sub


    Bien sur à adapter (modifier les lignes en gras...)
    0
  2. hamzy Messages postés 17 Statut Membre
     
    Merci pijaku.
    Et en ce qui concerne la recherche à partir du Nom.
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut,
    Mais c'est qu'il réclame en plus?
    je plaisante car:
    Oups j'avais omis ce détail...
    Alors cette macro est à adapter bien sur...
    Descriptif en commentaires.

    Private Sub CommandButton1_Click()
    Dim lignecherchee As Long
    Dim valeur
    If TextBox1 <> "" Then 'si le matricule est entré dans le 1er TextBox on exécute la recherche du matricule
          valeur = TextBox1
          If Application.CountIf(Sheets("base").Columns(1), valeur) > 0 Then
                lignecherchee = Sheets("base").Columns(1).Find(valeur, Range("A2"), xlValues).Row
                TextBox2.Value = Range("D" & lignecherchee)
                ComboBox1.Value = Range("F" & lignecherchee)
          Else
                MsgBox ("l'entrée recherchée n'existe pas")
          End If
    Elseif TextBox2 <> "" Then 'sinon si le nom est entré et pas le N° de matricule, on cherche par le nom
          valeur = UCase(TextBox2)
          If Application.CountIf(Sheets("base").Columns(4), valeur) > 0 Then
                lignecherchee = Sheets("base").Columns(4).Find(valeur, Range("D2"), xlValues).Row
                TextBox1.Value = Range("A" & lignecherchee)
                ComboBox1.Value = Range("F" & lignecherchee)
          Else
                MsgBox ("l'entrée recherchée n'existe pas")
          End If
    End If
    End Sub


    dans cette macro :
    TextBox1 = textBox "matricule"
    TextBox2 = TextBox "nom"
    Combobox1 = rien du tout c'est juste pour te montrer que cela fonctionne identiquement pour tous les contrôles...
    Sheets("base") = feuille contenant ta base de données
    Columns(1) : le 1 représente le N° de la colonne ou sont "rangés" les N° de matricule
    Columns(4) : le 4 représente le N° de la colonne ou sont "rangés" les noms
    0
  4. hamzy Messages postés 17 Statut Membre
     
    j'ai testé la recherche par le nom (en adaptant le code) mais elle ne me donne aucun resultat même si le nom existe dans la base.
    je crois que c'est en rapport avec cette ligne de code :
    "If Application.CountIf(Sheets("base").Columns(4), valeur) > 0".
    En plus, j'ai un dossier contenant toutes les photos des agents contenus dans ma base de données excel, j'aimerais pouvoir afficher dans un contrôle image la photo de chaque agent trouvée.

    Merci d'avance t'es un mec bien.
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Je ne crois pas que cela vienne de cette ligne mais plutôt de celle ci :
      valeur = UCase(TextBox2)

      UCase mets le nom contenu dans le TextBox en majuscules. Si ta base est bien remplie, les noms devraient être en majuscule...
      Pour les images, tu peux toujours tenté de t'inspirer de cela : ici sources: https://silkyroad.developpez.com/VBA/XlOrganigramme/
      Mais accroche toi car là c'est de la haute voltige...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. hamzy Messages postés 17 Statut Membre
     
    concernant le code pour convertir le nom en majuscule j'ai pas de soucis avec.
    le probleme avec ce code c'est que la recherche ne me renvoi aucune valeur, il ne retrouve aucun nom saisie. pourtant ces noms existe vraiment dans ma base.
    0
  7. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    'Lut,
    Dans quelle colonne sont tes noms?
    Dans l'exemple je suppute qu'ils sont colonne D, à adapter à ton cas :
    Elseif TextBox2 <> "" Then 
          valeur = UCase(TextBox2)
          If Application.CountIf(Sheets("base").Columns(4), valeur) > 0 Then
                lignecherchee = Sheets("base").Columns(4).Find(valeur, Range("D2"), xlValues).Row
    0
  8. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour

    pijaku, concernant ton post 5 sur l'inclusion de photos
    c'est hard pour un organigramme mais pour inclure dans un usf c'est facile (il faut que toutes les photos soient du m^me format)
    tite demo
    https://www.cjoint.com/?mtlt6ANizY
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Salut michel,
      Effectivement c'est hard à mettre en place... J'ai "chipé" ton fichier et regarderait cela tout à l'heure.
      Bonne journée

      <EDIT> Effectivement, c'est tout simple d'insérer une photo dans un UserForm...
      A toi de jouer Hamzi!!<\EDIT>
      0