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 :

Créer un bouton qui me permettrait de rechercher des valeurs de mon tableau


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2015
    Messages : 126
    Points : 65
    Points
    65
    Par défaut Créer un bouton qui me permettrait de rechercher des valeurs de mon tableau
    Bonjour, je suis vraiment débutant dans les VBA et j'aimerais que quelqu'un m'aide a faire un code qui me permettrais de rechercher un contact/une agence/un rpix/un modèle , toutes les donné présente dans mon tableau .
    Par exemple, si je cherche le prix de 400€, jaimerais que mon tableau affiche tous les prix correspondants , de meme avec une agences ou un instaleteur.
    En attendant une réponse rapidement,
    Voici une partie de mon tableau : Copie de Tableau test.xlsx
    Merci
    Cordialement
    Fichiers attachés Fichiers attachés

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

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir Patouilou, bonsoir le forum,

    En pièce jointe ton fichier modifié avec le code commenté :
    • Clique sur le bouton Rechercher
    • une boîte de dialogue s'ouvre
    • dans la TextBox1 tape le texte recherché (attention sans les formats => 400 pour 400,00 €)
    • La listbox1 affiche toutes les lignes contenant l'occurrence cherchée
    • dans la ListBox1, double-clique dans la ligne qui t'intéresse, la boîte de dialogue se ferme, la ligne est sélectionnée dans l'onglet RECAPITULATIF...

    Le code :

    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Private O As Worksheet 'déclare la variable O (Onglet)
    Private TC As Variant 'déclare la variable TC (Tableau de Cellules)
    Private NL As Integer 'déclare la variable NL (Nombre de Lignes)
    Private NC As Integer 'déclare la variable NC (Nombre de Colonnes)
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Set O = Sheets("RECAPITULATIF") 'définit l'onglet O
    TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
    NL = UBound(TC, 1) 'définit le nombre de ligne NL
    NC = UBound(TC, 2) 'définit le nombre de colonnes NC
    Me.ListBox1.ColumnCount = NC 'définit le nombre de colonne de la ListBox1
    End Sub
     
    Private Sub TextBox1_Change() 'au changement dans la Textbox1
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim K As Integer 'déclare la variable L (incrément)
    Dim TOT() As Variant 'déclare la variable TOT (Tableau des Occcurrences Trouvées)
    Dim L As Integer 'déclare la variable L (incrément)
     
    If Me.TextBox1.Value = "" Then 'condition : si la Textbox1 est effacée
        Me.ListBox1.Clear 'vide la ListBox1
        Me.Label1.Caption = "" 'efface la Label1
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
    Me.ListBox1.Clear 'vide la ListBox1
    K = 1 'initialise la variable K
    For I = 2 To NL 'boucle 1 : sur toutes les lignes I du tableau de cellule TC (en partant de la seconde)
        For J = 1 To NC 'boucle 2 : sur toutes les colonnes J du tableau de cellules TC
            'condition : si la valeur de la TetxBox1 est contenue dans la valeur ligne I colonne J de TC
            If UCase(TC(I, J)) Like "*" & UCase(Me.TextBox1.Value) & "*" Then
                'redimensionne le tableau des occurrences trouvées TOT (autant de lignes que TC a de colonnes, K colonnes)
                ReDim Preserve TOT(1 To NC, 1 To K)
                For L = 1 To NC 'boucle 3 : sur toutes les colonnes de TC
                    TOT(L, K) = TC(I, L) 'alimente la ligne du tableau TOT avec la colonne du tableau TC
                Next L 'prochaine colonne de la boucle 3
                K = K + 1 'incrémete K (nouvelle colonne pour TOT)
                Exit For 'sort de la boucle 2
            End If 'fin de la condition
        Next J 'prochaine colonne de la boucle 2
    Next I 'prochaine ligne de la boucle 1
    On Error Resume Next 'gestion des erreur (en cas d'erreur passe à la ligne suivante)
    'si le tableau TOT ne contient qu'une seule ligne, ajoute une seconde ligne vide (sinon les données sans dans une seule colonne...)
    If UBound(TOT, 2) = 1 Then ReDim Preserve TOT(1 To NC, 1 To 2)
    'alimente la ListBox1 avec le tableau TOT transposé (ligne/Colonne)
    Me.ListBox1.List = Application.Transpose(TOT) 'génère une erreur si TOT est vide
    'si une erreur a été générée, message, sort de la procédure
    If Err <> 0 Then Me.Label1.Caption = "Aucune occurrence trouvée !": Exit Sub
    Me.Label1.Caption = K - 1 & IIf(K - 1 = 1, " occurrence trouvé !", " occurrences trouvées !")
    End Sub
     
    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 'au double-clic dans la ListBox1
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (Incrément)
     
    For I = 0 To Me.ListBox1.ListCount - 1 'Boucle 1 : sur toutes les lignes de la ListBox1
        If Me.ListBox1.Selected(I) = True Then 'condition 1 : si la ligne est sélectionnée
            For J = 2 To NL 'boucle 2 : sur toutes les lignes du tabelau TC
                If TC(J, 2) = Me.ListBox1.Column(1, I) Then 'condition 2 : si les numéros de HYD sont égaux
                    O.Rows(J).Select 'sélecionne la ligne J de l'onglet O
                    Unload Me 'vide et ferme l'Usersorm
                    Exit Sub 'sort de la procédure
                End If 'fin de la condition 2
            Next J 'prochaine ligne de la boucle 2
        End If 'fin de la condition 1
    Next I 'prochaine ligne de la boucle 1
    End Sub
    Le fichier :
    Fichiers attachés Fichiers attachés
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2015
    Messages : 126
    Points : 65
    Points
    65
    Par défaut
    Bonsoir à toi Thautheme,
    Tout d'abord, je te remercie pour ce premier code, qui fonctionne a la perfection .
    Et je voulais savoir s'il était possible de me faire un autre code :p ?
    Celui-ci consiste a colorier toute une ligne , selon le nom de la ville présent dans la collone C ,
    Par exemple, si , dans la collone C, apparait le nom Tours, la ligne doit ètre colorié en vert .
    Copie de Tableau test.xlsx

    Merci beaucoup à toi,
    Bonne soirée

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

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Arf ! ThauTheme fournisseur officiel en code pour Patouillou... V'la aut' chose !...

    Bon, ben... Allons-y :

    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
    Sub Macro1()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim TC As Variant 'déclare la variabe TC (Tableau de Cellules)
    Dim NL As Integer 'déclare la varialbe NL (Nombre de Lignes)
    Dim NC As Integer 'déclare la varialbe NC (Nombre de Colonnes)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim PL As Range 'déclare la varialbe PL (PLage)
     
    Set O = Sheets("RECAPITULATIF") 'définit l'onglet O
    TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC
    NL = UBound(TC, 1) 'définit le nombre de lignes NL du tableau de cellules TC
    NC = UBound(TC, 2) 'définit le nombre de colonnes NC du tableau de cellules TC
    Set PL = Range("A1") 'initialise la plage PL
    For I = 2 To NL 'boucle sur toutes les lignes du tableau de cellules TC
        If TC(I, 3) = "TOURS" Then 'condition : si la valeur en ligne I colonne 3 de TC vaut "TOURS"
            'redéfinit la plage PL
            Set PL = IIf(PL.Address = "$A$1", O.Cells(I, 3).Resize(1, NC - 2), Application.Union(PL, O.Cells(I, 3).Resize(1, NC - 2)))
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle
    If PL.Address <> "$A$1" Then PL.Interior.Color = 5296274 'colore la plage PL de vert
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  5. #5
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2015
    Messages : 126
    Points : 65
    Points
    65
    Par défaut
    Bonjour Thauthème , merci pour le code, mais celui-ci, ne fonctionne pas :/ , quand j'entre une donnée dans mon tableau, il ne se passe rien :/
    Mais ne t'embête pas, je me passerais de cette fonction

    J'en reviens au premier code, je voulais savoir si tu pouvais le modifier en me permettant de pouvoir modifier les valeur du tableau .
    Par exemple, il y a une colonne terminé dans laquelle il y a " FAIT" ou rien pour les interventions non-faites. Si j'ouvre mon bouton rechercher (userfom2) , je cherche le N°EXE de mon intervention, et je souhaite la mettre en " FAIT " puisque je l'ai Faite . Alors, je double clic dans la liste , il me ferme l'userform2 , il sélectionne la ligne de l'intervention choisi et j'appuie sur un bouton modifier ( voir en haut tableau ) qui m'ouvre l'userform3 avec les toutes les valeurs , directement completé , et je clic sur " FAIT" dans la liste déroulante. Je valide, et mon tableau est modifier .
    Voici mon projet a modifier : SUIVI INTERVENTIONS pour thauthem.xlsm
    Tkt , après je t'embête plus :p

    Merci a toi pour ton aide précieuse !


    Cordialement

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

    Informations professionnelles :
    Activité : salarié

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

    Le code que je t'ai proposé fonctionne mais pas comme tu le souhaites, en automatique. Pardon, j'ai oublié ma boule de cristal, j'aurais dû le deviner...
    Pour de l'automatique il faut placer ce code dans le composant de l'onglet RECAPITULATIF...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 3 Then Exit Sub 'si le changement à lieu ailleurs que dans la colonne 3 (=C), sort de la procédure
    'adapte le 20 au nombre de colonnes que tu désires colorer
    If Target.Value = "TOURS" Then Target.Resize(1, 20).Interior.Color = 5296274
    End Sub
    Je regarde pour le reste...

    Tu peux m'embêter, je râle, mais sinon je m'emm...derais...
    À plus,

    Thauthème

    Je suis Charlie

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

    Informations professionnelles :
    Activité : salarié

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

    En pièce jointe ton fichier modifié.
    Une seule Userform pour Ajouter/ Modifier/Supprimer les données. Tu peux aussi ouvrir l'UserForm en double-cliquant sur n'importe quelle cellule de la ligne à modifier. Cela t'évite de cliquer sur le bouton Modifier.
    C'est la propriété [Tag] des contrôles à renseigner qui permet de récupérer/envoyer les données dans le tableau. La booléenne Nouveau permet de définir s'il s'agit d'une nouvelle donnée ou pas. En fonction de sa valeur, la [Caption] de l'UserForm3 est modifiée, le numéro de l'intervention et la variable LI sont ajustés.
    Le code :

    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
    Private O As Worksheet 'déclare la variable O (Onglet)
    Private LI As Integer 'déclare la variable LI (LIgne)
    Private CTRL As Control 'déclare la variable CTRL (ConTRôLe)
     
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Set O = Sheets("RECAPITULATIF") 'définit l'ontglet O
    If Nouveau = True Then 'condition : si la variable nouveau est [Vrai]
        Me.Caption = "SAISIE DES INTERVENTIONS" 'définit le titre de la boîter de dialogue
        LI = O.Cells(Application.Rows.Count, 1).End(xlUp).Row + 1 'définit la ligne LI
        TextBox15.Value = WorksheetFunction.Max(O.Columns(2)) + 1 'incrémente le numnéro de l'intervention
        Me.CommandButton4.Visible = False 'masque le bouton "SUPPRIMER"
    Else 'sinon
        Me.Caption = "MODIFIER" 'définit le titre de la boîter de dialogue
        LI = ActiveCell.Row 'définit la ligne LI
        TextBox15.Value = O.Cells(LI, 2).Value 'récupèr ele numéro d'intervention
        Me.CommandButton4.Visible = True 'affiche le bouton "SUPPRIMER"
    End If 'fin de la condition
    Nouveau = False 'initalise la variable Nouveau
    ComboBox2.List() = Array("", "CAEN", "ANGERS", "LE MANS", "TOURS", "POITIERS", "NANTES", "RENNES", "BREST", "BORDEAUX")
    ComboBox3.List() = Array("", "DIAGNOSTIQUE", "MISE EN SERVICE", "VISITE")
    ComboBox4.List() = Array("", "FAIT")
    ComboBox5.List() = Array("", "ANNULE", "FABRIQUAND", "OK")
    ComboBox6.List() = Array("", "SALMSON", "GRUNDFOS", "PNEUMATEX", "WILO", "XYLEM")
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'userForm
        'si la propriété [Tag] du contrôle n'est pas vide, récupère la valeur de la cellule
        'ligne LI colonne [Tag] (converti en entier) du contrôle de l'onglet O, dans le contrôle CTRL
        If CTRL.Tag <> "" Then CTRL.Value = O.Cells(LI, CInt(CTRL.Tag)).Value
    Next CTRL 'prochain contrôle de la boucle
    End Sub
     
     
    Private Sub CommandButton1_Click() 'bouton "VALIDATION"
    For Each CTRL In Me.Controls 'boucle sur tous les contrôles de l'userForm
        'si la propriété [Tag] du contrôle n'est pas vide, renvoie la valeur du contrôle CTRL
        'dans la cellule ligne LI colonne [Tag] (converti en entier) du contrôle, de l'onglet O
        If CTRL.Tag <> "" Then O.Cells(LI, CInt(CTRL.Tag)).Value = CTRL.Value
    Next CTRL 'prochain contrôle de la boucle
    Unload Me 'vide et ferme l'UserForm
    End Sub
     
     
    Private Sub CommandButton3_Click() 'bouton "QUITTER"
    Unload Me 'vide et ferme l'UserForm
    End Sub
     
     
    Private Sub CommandButton4_Click() 'bouton "SUPPRIMER"
    'si "oui" au message, supprime la ligne sélectionnée
    If MsgBox("Êtes-vous sûr(e) de vouloir supprimer la ligne  " & LI & " ?", vbYesNo, "ATTENTION !") = vbYes Then O.Rows(LI).Delete
    End Sub
    Le fichier :
    Fichiers attachés Fichiers attachés
    À plus,

    Thauthème

    Je suis Charlie

  8. #8
    Membre du Club
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Février 2015
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage

    Informations forums :
    Inscription : Février 2015
    Messages : 126
    Points : 65
    Points
    65
    Par défaut
    Re - bonjour Thauthème,

    Tout d'abord, j'ai réglé le problème des couleurs grâce à toi , Merci.
    Mais il me reste tout de même un problème :

    J'ai copier le dernier code, je l'ai mis dans un autre userform ( J'aime bien en avoir plusieurs :p ) , jusque la , tous va bien , je l'ouvre en double-cliquant et j'ai bien le N° mais je n'est pas le reste ( ville .. ) Et cela me pose un petit soucis :/

    Si tu pouvais m'aider ( encore ) x)

    Cordialement

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/05/2013, 21h51
  2. [XL-97] Rechercher des valeurs dans un tableau
    Par PIEPLU dans le forum Excel
    Réponses: 2
    Dernier message: 25/04/2012, 14h53
  3. Créer un bouton qui change la couleur d'un cellule
    Par Tony. dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/09/2008, 15h51
  4. Réponses: 1
    Dernier message: 15/06/2006, 14h37
  5. Réponses: 2
    Dernier message: 26/09/2003, 16h49

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