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 :

Aide pour mon PFE


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Aide pour mon PFE
    Bonjour à tous,

    J'ai besoin de vous pour m'aider à compléter un programme pour mon projet de fin d'études!

    Dans une feuille j'affiche les résultats d'une recherche d'article. Je souhaite créer une fonction pour affiner ma recherche.
    Dans une textbox :
    Si tu trouve le mot-clé dans la cellule, rien
    Si tu ne trouve pas le mot-clé dans la cellule tu me supprime toute la ligne


    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
     
    Private Sub CommandButton1_Click()
    Dim cellulecherche2 As Range
    Dim j As Integer
     
     
    With Worksheets("Recherche").Range(Cells(14, 2), Cells(200, 2))
     
            Set cellulecherche2 = .Find(what:="*" & TextBox1 & "*", LookIn:=xlValues)
                Set cellulecherche2 = .FindNext(cellulecherche2)
                For j = 14 To 200
                    If Cells(j, 2).Value <> cellulecherche2 Then
                        Cells(j, 2).EntireRow.Delete
                    End If
                Next j
     
    End With
    Unload UserForm2
    End Sub
    Merci @+

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Mais de rien,
    ce fut un plaisir de ne pas répondre.
    En même temps ca serait pas mal d'expliquer ce qui ne te convient pas dans ton programme, bug, résultat incohérent....

    Première chose tu parcours tes colonnes de haut en bas regarde cette exemple
    on a 4 lignes

    AAA0
    BBB0
    CCC0
    DDD1

    on supprime les lignes avec un 0 a la fin
    i=1 on supprime la ligne 1 AAA0
    on a

    BBB0
    CCC0
    DDD1

    i=2 on test la deuxième ligne CCC0
    on la supprime
    il nous reste

    BBB0
    DDD1

    on teste la troisième et ma quatrième ligne sans modifier le résultat. Et la tu vois bien que cela coince.
    il faut parcourir les colonne de la dernière ligne a la première
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For j =  200 to 14 step -1
    Autre chose je suppose que 200 est une valeur arbitraire, ca serait beaucoup plus pratique de te limiter a la dernière ligne rempli non?
    Regarde ces exemples
    http://www.developpez.net/forums/d45...gnees-feuille/

    Essaye déjà de faire ceci, et si ca ne suffit pas explique un peu ton problème
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Ok oui c'est vrai que j'ai rien expliquer.

    Merci pour le step -1, ça marche déjà mieux!!Héhé!

    Comment puis-je lui dire de ne pas s'arrêter à la première valeur qu'il trouve ?
    Pour l'instant, seule la première ligne trouvée est conservée.

    Merci.

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    je ne comprend pas.
    Tu cherche une mot clef il corespond a une référence tu supprmie toutes les ligne qui n'ont pas cette référence. Si tu cherche un nouveau truc tu aura une autre référence du coup tu supprimes ce que n'a pas cette référence la donc tout ce' qui te restais. A la fin tu n'as plus rien.

    A mon avis commence par bien réfléchir a ce que tu veux faire (ou alors bien l'expliquer) et ensuite on avisera. Si c'est pour ton PFE je pense que ce n'est pas trop te demander
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Ouep t'a raison, alors

    J'ai fais une recherche pour trouver le mot "A", voici les résultats :
    AA1
    AB2
    AC3
    AD1

    Si j'ai trop de réponses, je créer une userform où j'ajoute un mot-clé. Par exemple "1".

    Je veux juste donc avoir comme résultat : AA1 et AD1

    Pour l'instant il ne me trouve qu'une seule valeur.

    Voilà pour les explications,
    merci et @+

  6. #6
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Je ne vais pas le faire a ta place (si quelqu'un veux s'en occuper je passe la main) mais on peu essayer d'y réfléchir ensemble car visiblement soit tu ne donne que des bride d'information soit tu n'as qu'une idée très vague de ce que tu veux faire et aucune idée de l'algorithme.

    Tu veux effectuer une recherche, si il y a plusieurs solution possible alors proposer d'affiner la recherche jusqu'a n'avoir qu'une solution, c'est bien ca?

    Donc dans un premier temps tu fait la fonction de recherche et tu comptes le nombre de résultat, ensuite en fonction de ce nombre soit tu balance l'algo précédent soit tu affine la recherche jusqu'a n'avoir qu'une solution et balancé ton algo.

    Mais la on s'éloigne méchamment du problème de VBA là le souci me semble venir du fait que tu veux coder avant de réfléchir
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Non c'est beaucoup plus simple que ça

    En simplifié :

    j'ai des nom de produits quelconque qui s'affiche dans une colonne. Je tape un mot-clé dans une textbox. Si une de ces cellules ne contient pas ce mot-clé, la ligne est supprimée. C'est valable pour toutes les cellules

    Pour l'instant avec mon code, le programme s'arrête dès qu'il trouve le mot-clé dans une cellule, car au final il me reste qu'une seule ligne de produit. Je voudrais que toutes les cellules qui contiennent le mot-clé reste affiché.

    Je ne sais pas comment relancer la machine...

    Merci en tout cas...

  8. #8
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    hmm en faisant tout simplement quelque chose comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
               For j =derniereligne to 14 step 1
                    If Cells(j, 2).Value <> textbox1 Then
                        rows(j).Delete
                    End If
                Next j
    pas besoin de find ou de truc comme ca, tu entres un mot clef tu supprime toutes les ligne qui n'ont pas ton mot dans une certaine colonne


    Mais essaye d'être précis tu as des mot dans une colonne tu parle d'une de ces cellules (une de la colonne?) valable pour toutes les cellules (de toutes les colonnes?)
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Non ça ne marche pas, j'explique :
    Dans la colonne 2, j'ai des cellules du genre :
    bloc creux 10x20x50 nf sepa
    bloc creux 15x20x50 nf sepa
    bloc creux 10x20x50 nf sepa direct usine
    bloc creux 15x20x50 nf sepa direct usine

    si je cherche "usine", je veux supprimer les deux premières lignes

    si je ne passe pas par la fonction find, il faudrait que le texte que j'écris dans la textbox soit exactement celui du produit (ce qui ne m'intéresse pas du tout).

    Avec les lignes suivantes, seul la dernière ligne est conservée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    With Worksheets("Recherche").Range(Cells(14, 2), Cells(200, 2))
     
            Set cellulecherche2 = .Find(what:="*" & TextBox1 & "*", LookIn:=xlValues)
                For j = [a65000].End(xlUp).Row To 14 Step -1
                    If Cells(j, 2).Value <> cellulecherche2 Then
                        Cells(j, 2).EntireRow.Delete
                    End If
                Next j
                Set cellulecherche2 = .FindNext(cellulecherche2)
    End With
    Comment, lui dire de ne pas s'arrête à la première cellule trouvée ?

  10. #10
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Dans ce cas, adaptes le code proposé par Krovax comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
               For j =derniereligne to 14 Step -1
                    If InStr(Cells(j, 2).Value, TextBox1)=0 Then
                        Rows(j).Delete
                    End If
                Next j
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  11. #11
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Dsl mercatog, mais ça marche carement pas...il me supprime tout

  12. #12
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ah! Bon
    Tu en es sûr? ou à la hâte?
    NE SOIS JAMAIS DSL

    REGARDE FICHIER CI JOINT
    Dans la colonne 2, j'ai des cellules du genre :
    bloc creux 10x20x50 nf sepa
    bloc creux 15x20x50 nf sepa
    bloc creux 10x20x50 nf sepa direct usine
    bloc creux 15x20x50 nf sepa direct usine

    si je cherche "usine", je veux supprimer les deux premières lignes
    Supprime toutes les lignes ne contenant pas le mot sélectionné dans TextBox1

    Et ici code amélioré,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Valid_Click()
    Dim derniereligne As Long
    Dim j As Long
     
    derniereligne = Range("B65000").End(xlUp).Row
     
    For j = derniereligne To 14 Step -1
        If InStr(1, Cells(j, 2).Value, Trim(CStr(TextBox1.Value)), 1) = 0 Then
            Rows(j).Delete
        End If
    Next j
    USF.Hide
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  13. #13
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    le code est bon par contre tu doit avoir la chaine de caractère présente dans la cellule et avec les bonne majuscule minuscule sinon met
    en tête du module
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  14. #14
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    POST RESOULOU

    ...enfin presque résolu, lol!

    Je voulais ajouter un petit complément à la fonction : si le mot-clé tapé n'existe pas dans les cellules, alors toutes les cellules sont supprimées. Pas cool ça. Si c'est le cas je veux afficher un message d'information du type "Aucun produit ne correspond à votre recherche" et retourner sur la USF sans supprimer les cellules.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For j = derniereligne To 14 Step -1
        If InStr(Cells(j, 2).Value, TextBox1) = 1 Then
            If InStr(Cells(j, 2).Value, TextBox1) = 0 Then
            Rows(j).Delete
            End If
        Else
            MsgBox "Aucun produit ne correspond à votre recherche", vbExclamation
            TextBox1.Value = ""
            TextBox1.SetFocus
            Exit Sub
        End If
    Next j
    Bien sur ça ne marche pas! Es-ce que la fonction InStr peut renvoyer 1? ou quel est l'opposé de 0 ?

    Merci de jeter un oeil,

    Nikes

  15. #15
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim trouve as Boolean
    trouve =False
    For j = 14 To derniereligne   'Pas besoin de l'inverse si aucune ligne n'est à supprimer
            If InStr(Cells(j, 2).Value, TextBox1) > 0 Then
                      trouve = True
                      Exit For
            End If
    Next j
    If Not trouve Then  MsgBox "Aucun produit ne correspond à votre recherche", vbExclamation
    Dans ton editeur, double clique sur le mot InStr
    fais F1

    C'st gratuit et ça ne mords pas
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  16. #16
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Ben j'ai regardé l'aide, mais on peut pas dire que j'ai accroché...

    Merci pour le code, ça marche nikel là

  17. #17
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une autre variante pour toutes fins utiles:
    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
    Option Explicit
     
    Private Sub Valid_Click()
    Dim LastLig As Long
    Dim c As Range, plage As Range
     
    LastLig = Range("B65000").End(xlUp).Row
    Set plage = Range("B4:B" & LastLig)
    Set c = plage.Find(TextBox1.Value, LookIn:=xlValues, lookat:=xlPart)
        If c Is Nothing Then
            MsgBox "Aucun produit ne correspond à votre recherche", vbExclamation
            TextBox1.Value = ""
            TextBox1.SetFocus
            Exit Sub
        Else
            MsgBox "La première occurrence contenant le mot [ " & TextBox1 & _
                " ] existe dans la plage de recherche dans la cellule " & c.Address()
            USF.Hide
            c.Select   'Sélectionne la première cellule trouvée répondant au critère de recherche
        End If
     
    Set c = Nothing
    Set plage = Nothing
    End Sub
    N'oublie surtout pas de mettre un F1 sur le mot Find
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. aide pour mon PFE
    Par wayde dans le forum UML
    Réponses: 2
    Dernier message: 16/02/2012, 15h31
  2. aide pour mon PFE "étude préalable"
    Par mahmoudb dans le forum Sujets
    Réponses: 0
    Dernier message: 12/02/2012, 00h55
  3. [MySQL] Demande d'aide pour mon PFE
    Par angello2299 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/04/2011, 12h00
  4. Besoin d'aide pour mon PFE, s'il vous plait
    Par mouss2522 dans le forum Sujets
    Réponses: 1
    Dernier message: 11/04/2011, 22h11
  5. AIDE pour mon PFE : Local IDS en c#
    Par sadokc dans le forum C#
    Réponses: 1
    Dernier message: 20/05/2007, 14h04

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