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 :

Liste de recherche VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien de Laboratoire
    Inscrit en
    Mai 2019
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien de Laboratoire
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 70
    Par défaut Liste de recherche VBA
    Bonjour,

    Novice en macro et code VBA, je souhaiterais un peu d'aide sur ce forum.
    Dans la feuille de calcul en PJ, la colonne A représente la valeur a rechercher.
    La colonne B est la valeur attitrée a la valeur recherchée.
    En dessous les affections de chaque valeur attitrée.
    Exemple eck = box 1 si valeur recherchée aaaaa

    Est il possible avec un code VBA de créer une fenêtre où l'on viendrai flasher un code barre. Celui ci serait reconnu a sa même valeur de la colonne A. Puis en fonction de la valeur attitrée en B, renverra un message box "box numéro..."

    Merci de votre aide,
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour vincent, la forum
    flasher un code dépasse mes connaissance
    mais un simple recherche avec VBA tu peux procéder ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
     Dim Code As Range, magasin As Range, y As Range, F1 As Worksheet
     Dim CodeArechercher As String
       Set F1 = Sheets("Feuille 1")
       Set Code = F1.Range("A2:A" & F1.Range("A" & Rows.Count).End(xlUp).Row)
       Set magasin = F1.Range("D2:D" & F1.Range("D" & Rows.Count).End(xlUp).Row)
       CodeArechercher = InputBox("Indiquez le code de l'article à rechercher", "saisir un Code", "saisir un code svp") '
       Set c = Code.Find(CodeArechercher, LookIn:=xlValues, lookat:=xlWhole)
    If Not c Is Nothing Then
    Article = F1.Cells(c.Row, 2)
    Set CodeMagasin = magasin.Find(Article, LookIn:=xlValues, lookat:=xlWhole)
    MsgBox F1.Cells(CodeMagasin.Row, 5)
    End If
    End Sub
    j'espère que ça t'aide à avancer dans ton projet
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Homme Profil pro
    Technicien de Laboratoire
    Inscrit en
    Mai 2019
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien de Laboratoire
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 70
    Par défaut
    Merci pour cette réponse rapide et efficace.
    Après réflexion et test, serait il possible de s'acquitter des validations en appuyant sur Entrée.
    Exemple :
    Après avoir appuyé sur GO, nous saisissons un code. Pouvons nous supprimons le OK avec une TAB. Puis à l'apparition du message box n°, ne pas appuyer sur OK mais une temporisation du message 3s par exemple ?

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 236
    Par défaut
    Hello,
    Citation Envoyé par VincentCA Voir le message
    Est il possible avec un code VBA de créer une fenêtre où l'on viendrai flasher un code barre.
    Avec une "douchette" ?
    Pour réaliser ce que tu veux faire, un formulaire serait plus adéquat :
    voici ce que je te propose :
    Un formulaire qui :

    • Reçoit le code barre dans un champ texte
    • Quand dans ce champ on reçoit un caractère de fin (ex 13 = Return, ce qu'une douchette doit pouvoir faire) la recherche est effectuée dans le classeur.
    • Le résultat est affiché dans le champ de Box. Si la recherche est infructueuse c'est aussi indiqué dans le champ Box
    • Une temporisation réglable permet de maintenir le contenu des champs pendant un certain nombre de secondes. Ensuite les champs sont effacés et le focus est mis sur le champ de code barre pour permettre la saisie suivante.
    • Un bouton permet d'effacer le contenu des champs.

    Voici le code du formulaire qui reprend une partie du code de BENNASR :
    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 CodeBarre_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
       If KeyCode = vbKeyReturn Then
               If CodeBarre.Text <> "" Then
                  Recherche (CodeBarre.Text)
               End If
        End If
    End Sub
    Sub Recherche(CodeARechercher As String)
     Dim Code As Range, Magasin As Range, F1 As Worksheet, c As Range, m As Range
       Set F1 = Sheets("Feuille 1")
       Set Code = F1.Range("A2:A" & F1.Range("A" & Rows.Count).End(xlUp).Row)
       Set Magasin = F1.Range("D2:D" & F1.Range("D" & Rows.Count).End(xlUp).Row)
       Set c = Code.Find(CodeARechercher, LookIn:=xlValues, lookat:=xlWhole)
       If Not c Is Nothing Then
            Article = c.Cells.Offset(0, 1)
            Set m = Magasin.Find(Article, LookIn:=xlValues, lookat:=xlWhole)
            If Not m Is Nothing Then
                Box.Text = m.Cells.Offset(0, 1)
                Delai CInt(Tempo.Text)
                Box.Text = ""
                CodeBarre.Text = ""
                CodeBarre.SetFocus
            Else
                Box.Text = "Magasin non trouvé"
            End If
       Else
            Box.Text = "Code non trouvé"
       End If
    End Sub
    Private Sub CmdRAZ_Click()
    CodeBarre.Text = ""
    Box.Text = ""
    End Sub
    L'utilisation de plages nommées serait préférable pour éviter d'être obligé de modifier le code en cas de changement d'implantation des données dans le classeur.

    Voici le code du module Basic où il y a la macro d'ouverture du formulaire et une procédure de temporisation.
    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
    #If VBA7 Then
        Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    #Else
        Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    #End If
    Sub test()
     UserForm1.Show
    End Sub
     
    Sub Delai(s As Integer)
        Dim TimeOut As Single
        TimeOut = Timer + s
        Do While Timer < TimeOut
            DoEvents
            Sleep 10 ' tempo de 10 ms pour éviter charge CPU excessive
        Loop
    End Sub
    Nom : CodeMagasin.gif
Affichages : 307
Taille : 13,9 Ko

    En pièce jointe le classeur de test.


    Ami calmant, J.P
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Homme Profil pro
    Technicien de Laboratoire
    Inscrit en
    Mai 2019
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien de Laboratoire
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 70
    Par défaut
    Rhooo merci beaucoup pour cette superbe avancée.
    J'ai testé aujourd'hui et ça fonctionne plutôt bien.

    "Le résultat est affiché dans le champ de Box. Si la recherche est infructueuse c'est aussi indiqué dans le champ Box" =>serait il possible que tout comme un résultat conforme, ça renvoie automatiquement à la lecture d'un nouveau code après temporisation (dans les cas magasin ou code non trouvé).

    En colonne C, est il possible de mentionner le résultat de la box trouvée après chaque recherche ?

    Merci encore énormément

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 236
    Par défaut
    Hello,
    Citation Envoyé par VincentCA Voir le message
    "Le résultat est affiché dans le champ de Box. Si la recherche est infructueuse c'est aussi indiqué dans le champ Box" =>serait il possible que tout comme un résultat conforme, ça renvoie automatiquement à la lecture d'un nouveau code après temporisation (dans les cas magasin ou code non trouvé).
    En colonne C, est il possible de mentionner le résultat de la box trouvée après chaque recherche ?
    ce code devrait faire l'affaire :
    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
    Sub Recherche(CodeARechercher As String)
     Dim Code As Range, Magasin As Range, F1 As Worksheet, c As Range, m As Range
       Set F1 = Sheets("Feuille 1")
       Set Code = F1.Range("A2:A" & F1.Range("A" & Rows.Count).End(xlUp).Row)
       Set Magasin = F1.Range("D2:D" & F1.Range("D" & Rows.Count).End(xlUp).Row)
       Set c = Code.Find(CodeARechercher, LookIn:=xlValues, lookat:=xlWhole)
       If Not c Is Nothing Then
            Article = c.Cells.Offset(0, 1)
            Set m = Magasin.Find(Article, LookIn:=xlValues, lookat:=xlWhole)
            If Not m Is Nothing Then
                Box.Text = m.Cells.Offset(0, 1)
                c.Cells.Offset(0, 2) = m.Cells.Offset(0, 1)
            Else
                Box.Text = "Magasin non trouvé"
            End If
       Else
            Box.Text = "Code non trouvé"
       End If
       Delai CInt(Tempo.Text)
       Box.Text = ""
       CodeBarre.Text = ""
       CodeBarre.SetFocus
    End Sub
    Ami calmant, J.P

  7. #7
    Membre averti
    Homme Profil pro
    Technicien de Laboratoire
    Inscrit en
    Mai 2019
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien de Laboratoire
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 70
    Par défaut
    Bonsoir,
    Une fois de plus, merci pour cette précieuse aide.
    Serait il possible de faire évoluer le code afin que le numéro de la box s'affiche en grand (j'entends par là, la quasi totalité de l'écran) laissant juste un peu de place pour le réglage de la temporisation et la lecture du code barre.
    En utilisant le mode zoom du code formulaire, j'ai pu agrandir la fenêtre mais je n'arrive pas à modifier la taille du texte à l'intérieur de la box.
    Sinon, tout marche vraiment nikel.

    Autre question, serait il possible sur une deuxième feuille de charger un fichier txt (qui s'ouvre sur bloc note) à partir d'une macro pour charger direct le fichier ? Puis la feuille 1 récupérerait les données nécessaire sur les colonne A et B pour faire fonctionner la macro go

    Merci, merci
    Bonne soirée.

  8. #8
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 236
    Par défaut
    Hello,
    Citation Envoyé par VincentCA Voir le message
    Serait il possible de faire évoluer le code afin que le numéro de la box s'affiche en grand (j'entends par là, la quasi totalité de l'écran) laissant juste un peu de place pour le réglage de la temporisation et la lecture du code barre.
    Le mieux c'est d'afficher le contenu du champ Box dans une autre fenêtre de dialogue (en mode non modal). Pourquoi sur la quasi totalité de l'écran, ça fait très gros ? . C'est pour lire à distance ? Le périphérique est une tablette ?
    Dans le cas où l'on utilise une deuxième fenêtre de dialogue : où placer la première (en haut en bas à droite à gauche en dessous ? ou fenêtre semi transparente ? )

    Citation Envoyé par VincentCA Voir le message
    Autre question, serait il possible sur une deuxième feuille de charger un fichier txt (qui s'ouvre sur bloc note) à partir d'une macro pour charger direct le fichier ? Puis la feuille 1 récupérerait les données nécessaire sur les colonne A et B pour faire fonctionner la macro go
    Je ne comprends pas trop -> qu'y a t il dans le fichier texte ?


    Ami calmant, J.P

  9. #9
    Membre averti
    Homme Profil pro
    Technicien de Laboratoire
    Inscrit en
    Mai 2019
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien de Laboratoire
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 70
    Par défaut
    Bonjour tout le monde,
    Je me permet de relancer mon post pour bénéficier d'une aide pour faire évoluer le fichier.

    Serait il possible que la box qui s'affiche dans la fenêtre soit de la police (couleur) que la cellule magasin correspondante.
    Ex si la cellule a une police en bleu, que box s'écrive en bleue. Si rouge, en rouge ?

    Merci de votre aide,
    Bonne journée

  10. #10
    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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Serait il possible que la box qui s'affiche dans la fenêtre soit de la police (couleur) que la cellule magasin correspondante.
    Ex si la cellule a une police en bleu, que box s'écrive en bleue. Si rouge, en rouge ?
    Rien de plus simple.
    La propriété ForeColor d'un TextBox gère la couleur de la police de celui-ci et la propriété Font.Color fait de même pour un objet Range

    Petit exemple à adapter à votre situation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Activate()
      Me.TextBox1.ForeColor = ActiveCell.Font.Color
    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

  11. #11
    Membre averti
    Homme Profil pro
    Technicien de Laboratoire
    Inscrit en
    Mai 2019
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien de Laboratoire
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 70
    Par défaut
    Bonjour,

    Merci. Je vais essayer de l'adapter a la situation.
    J'espère que je vais y arriver car je suis nul en VBA...
    Faudra sans doute que je l'appelle box.text

  12. #12
    Membre averti
    Homme Profil pro
    Technicien de Laboratoire
    Inscrit en
    Mai 2019
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien de Laboratoire
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 70
    Par défaut
    Private Sub UserForm_Activate()
    Me.TextBox1.ForeColor = ActiveCell.Font.Color
    End Sub

    Bonjour,

    Pourriez vous m'aider à placer ces lignes de code au bon endroit dans mon code svp.
    J'ai essayé avec box.text mais ca ne fonctionne pas.
    Merci d'avance,
    Vincent
    Fichiers attachés Fichiers attachés

  13. #13
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 508
    Par défaut
    Salut,
    J'ai pas trop suivi le post mais je pense que tu dois coller le code après avoir trouvé la cellule m
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    '...
    '...
    If Not m Is Nothing Then
    Box.Text = m.Cells.Offset(0,1).Value
    Box.ForeColor = m.Cells.Offset(0,1).ForeColor
    c.Cells.Offset(0,2).Value = m.Cells.Offset(0,1).Value
    Else
    Box.Forecolor = vbBlack ' // A adapter ...
    '...
    '...
    PS. Tu as les balises # pour inclure du code dans ton post utilises-les à la place d'un document Word.

Discussions similaires

  1. [XL-2007] Recherche VBA de valeurs dans 261 listes
    Par adxadn dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/04/2013, 15h28
  2. Problème pour rechercher dans une liste excel avec vba
    Par hop51 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/03/2013, 19h00
  3. Liste de recherche d'un sous formulaire
    Par armagued dans le forum Access
    Réponses: 5
    Dernier message: 29/10/2005, 22h00
  4. Réponses: 4
    Dernier message: 16/06/2005, 15h37
  5. Réponses: 10
    Dernier message: 13/06/2005, 16h02

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