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 :

Bouton recherche d'un libellé


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
    Etudiant en Informatique
    Inscrit en
    Avril 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant en Informatique

    Informations forums :
    Inscription : Avril 2015
    Messages : 41
    Par défaut Bouton recherche d'un libellé
    Bonjour,

    Je possède un fichier excel avec des données.
    J'aimerais pouvoir crée un bouton "recherche" qui, quand l'on clique dessus nous demande le nom de la donnée.

    Exemple :

    Je clique sur le bouton recherche.
    Une boite de dialogue s'ouvre.
    Me demande le nom du robot.
    Je rentre "Robot15"
    Crée une nouvelle feuille avec toute les données de ce robot en question.

    Il faut savoir que dans mes données, avant le nom du robot il y a cette phrase : " DI : Défaut Robot Baie : NomDuRobot"

    Je suis débutant, je ne sais pas comment fonctionne les boutons, ni comment crée un système de recherche auto.

    Merci d'avance pour votre aide !

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

    Il vous faut regarder dans les différents tutoriels et FAQ consacrés au VBA Excel dans ce site. Un début dans ce lien.

    -Regardez d'abord comment utiliser l'éditeur de macro, on a tous commencé par là et on continue pour connaître la syntaxe d'un code à écrire.
    -Servez-vous aussi du "requêteur". En tapant des mots clés, vous trouverez des messages très proches de ce que vous cherchez. Ce site est une mine d'or.
    -Enfin, lorsque vous aurez tapé vos premières lignes de code, qu'elles auront foiré (comme pour nous au début) et que vous serez bloqué, vous créerez un message avec votre code et vous indiquerez l'endroit et le type de problème rencontré.

    Bon courage à vous.

    Cordialement.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Une piste. Tu pose un bouton ActiveX sur la feuille où doit être effectuée la recherche, tu double clique dessus, tu supprime les deux lignes créées que tu remplace par le code ci-dessous et tu quitte le mode "Création" (bouton avec le triangle, la règle et le crayon) puis tu teste :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Private Sub CommandButton1_Click()
     
        Dim Fe As Worksheet
        Dim PlageRecup As Range
        Dim Plage As Range
        Dim Cel As Range
        Dim Robot As String
     
        'demande le nom du robot à chercher
        Robot = InputBox("Veuillez indiquer le nom du robot !", "Recherche")
     
        'vérifie
        If Robot = "" Then Exit Sub
     
        'défini la plage de recherche sur la feuille active (celle qui a le bouton)
        'en colonne A depuis A1
        With ActiveSheet
     
            Set Plage = .Range(.Cells(1, 1), .Cells(.Rows.Count, 1).End(xlUp))
     
        End With
     
        'parcour la plage pour recherche partielle
        For Each Cel In Plage
     
            'si trouvé...
            If InStr(Cel, Robot) <> 0 Then
     
                'défini la plage de valeurs à récupérer ici, de la colonne A à la dernière
                'cellule non vide de la ligne où a été trouver le nom
                Set PlageRecup = Range(Cel, Cel.End(xlToRight))
     
                'ajoute une feuille en fin de collection
                Set Fe = Worksheets.Add(, Worksheets(Worksheets.Count))
     
                With Fe
     
                    'en défini le nom (ici, celui du robot)
                    .Name = Robot
     
                    'et inscrit les valeurs
                    .Range(.Cells(1, 1), .Cells(1, PlageRecup.Columns.Count)).Value = PlageRecup.Value
     
                End With
     
                'fin de boucle
                Exit For
     
            End If
     
        Next Cel
     
    End Sub
    Hervé.

  4. #4
    Membre averti
    Homme Profil pro
    Etudiant en Informatique
    Inscrit en
    Avril 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant en Informatique

    Informations forums :
    Inscription : Avril 2015
    Messages : 41
    Par défaut
    Bonjour,

    Eric je sais bien, mais je vous explique ma situation, je suis en stage dans une une grande entreprise, il m'est donc impossible de partager le code que j'écrit, a tel point que les pc ne sont pas branché sur un réseau internet ou bien même intranet. Je vous écrit donc de mon domicile.
    J'ai déjà a mon actif quelques lignes de code et quelques macro.

    Je viens juste chercher des pistes comme Theze me l'a très bien fait
    Theze je vais tester ça demain, mettre tout ça a ma sauce et je te dirais !
    En tout cas je te remercie d'avance

    En fait je vais vous expliquer un peu plus mon soucis en image.

    Voici ce que crée ma macro, un tableau récap avec tout les défauts de tout les robots.
    Ce que j'aimerais, c'est que le bouton de recherche se crée en même temps que la macro, mais je ne sais pas si c'est possible.

    Nom : Tab1.png
Affichages : 476
Taille : 134,0 Ko

    Ensuite si ce fameux bouton déjà pré-crée par la macro,on clique dessus, on entre le nom du robot dans une Inputbox et enfin cela crée une nouvelle feuille ayant ceci :
    Ici j'ai rentrer le nom de robot : 70MAQ_01
    La priorité est trié sur 16
    Et si possible trié aussi sur le nombre d'événement, du plus grand au plus petit, ici ce n'est pas le cas.

    Nom : Tab 2.png
Affichages : 479
Taille : 105,7 Ko

    Je suis coincé sur ça depuis un petit moment :/

    Merci d'avance pour votre aide !

  5. #5
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Je ne comprend pas pourquoi la réponse de Theze ne te satisfaisait pas...

    Sinon, créer un bouton à la volée par macro et lui attribuer le code qui va avec est tout à fait faisable mais... Je ne sais pas le faire.
    Je te propose une autre manière très similaire à la sienne mais qui utilise des variables tableau de type Variant au lieu de variables plage de type Range. Ça accélère le traitement. Les lignes correspondantes sont stockées dans le tableau TL en les transposant, puis le tableau TL est transposé à la fin pour restituer le tableau initial.
    Code non testé (j'ai eu la flemme de recréer ton fichier) :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Sub Macro1()
    Dim Ro As Worksheet 'déclare la variable RO (onglet RO)
    Dim BE As Variant 'déclare la variable BE (Boîte d'Entrée)
    Dim OD As Worksheet 'déclare la variable OD (Onglet de Destination)
    Dim TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Dim K As Integer 'déclare la variable K (incrément)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim TL() As Variant 'déclare la variable TL (Tableau de Lignes)
    Dim J As Integer 'déclare la variable J (incrément)
     
    Set Ro = Sheets("RO") 'définit l'onglet RO
    BE = Application.InputBox("Tapez le nom du robot !", "NOM DU ROBOT", Type:=2) 'définit la boîte d'entrée BE
    If BE = False Or BE = "" Then Exit Sub 'si bouton [Annuler] ou [OK} avec BE non renseignée, sort de la procédure
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    Set OD = Sheets(BE) 'définit l'onglet de destination OD (si c'est onglet n'existe pas génère une erreur)
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err.Clear 'supprime l'erreur
        Sheets.Add after:=Ro 'ajoute un onglet apres l'onglet RO
        ActiveSheet.Name = BE
        Set OD = ActiveSheet 'définit l'onglet de destination OD
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    OD.Cells.ClearContents 'efface d'enventuelles ancienne données de l'onglet OD
    Ro.Range("A1:K8").Copy OD.Range("A1") 'copie le haut du tableau et le colle dans l'onglet OD
    TC = Ro.Range("A8").CurrentRegion 'définit le tableau de cellules TC
    K = 1 'initialise la variabel K
    For I = 2 To UBound(TC, 1) 'boucle 1 : sur toutes les lignes I du tableau de cellules TC
        'condition : si la valuer ligne I colonne 10 (=> colonne J) de TC contient BE (sans tenir compte de la casse)
        If UCase(TC(I, 10)) Like "*" & UCase(BE) & "*" Then
            'redimensionne le tableau TL (autant de lignes de TC a de colonnes, K colonnes)
            ReDim Preserve TL(1 To UBound(TC, 2), 1 To K)
            For J = 1 To UBound(TC, 2) 'boucle 2 : sur toutes les colonnes de TC
                TL(J, K) = TC(I, J) 'récupère dans la ligne de TL la valeur de la colonne de TC (Transposition)
            Next J 'prochaine colonne de la boucle 2
            K = K + 1 'incrément K (ajoute une colonne à TC
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle 1
    'si K est égale à un (=> aucune occurrence trouvée), message, sort de la procédure
    If K = 1 Then MsgBox "Aucune occurrence trouvée !": Exit Sub
    'renvoie dans la cellule A9 (redimensionnées) de l'onglet OD le tableau TL transposé
    OD.Range("A9").Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
    'tri décroissant sur le nombre d'événements
    OD.Sort.SortFields.Clear
    OD.Sort.SortFields.Add Key:=OD.Range("G8"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With OD.Sort
        .SetRange OD.Range("A8").CurrentRegion
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    End Sub

  6. #6
    Membre averti
    Homme Profil pro
    Etudiant en Informatique
    Inscrit en
    Avril 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Etudiant en Informatique

    Informations forums :
    Inscription : Avril 2015
    Messages : 41
    Par défaut
    Bonjour,

    Le code que tu as donné doit être placé dans un bouton ?

    Pcq j'ai vu que tu avais modifié ton post et que auparavant tu parlais d'un moyen de double clic sur l'onglet RO pour lancer la macro, ça me parait une méthode bien plus simple non ?

    Cordialement.

Discussions similaires

  1. Création Bouton rechercher dans formulaire
    Par Boubas1 dans le forum IHM
    Réponses: 1
    Dernier message: 06/05/2007, 14h49
  2. Bouton rechercher enregistrement
    Par ludo50 dans le forum Access
    Réponses: 3
    Dernier message: 04/12/2006, 13h27
  3. Bouton Recherche dans access
    Par fouf_01 dans le forum VBA Access
    Réponses: 9
    Dernier message: 23/05/2006, 16h34
  4. Le bouton "rechercher"
    Par shnouf dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 23/05/2006, 12h30

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