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 :

Optimiser code recherche sur plus de 1000 000 lignes [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut Optimiser code recherche sur plus de 1000 000 lignes
    Bonjour,

    J'ai effectué une macro qui recherche, le codes des ports maritimes dans tous les pays du monde, j'ai une base de 104 986 lignes. Le résultat est affiché dans une listebox.

    Le code ci-dessous fonctionne, en revanche pour 104 986 lignes c'est long et fait bugger le fichier. Pourtant j'ai un pc correct I3 dernière génération et 8 go de ram avec ssd , je pense pas que mon pc soit en cause. lol

    Pensez-vous qu'un code plus optimisé permettrait d’accélérer la recherche?

    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
     
    Option Compare Text
     
    Private Sub TextBox1_Change()
     
        Application.ScreenUpdating = False
     
    ' ActiveSheet.Unprotect
     
        ListBox1.Clear
     
        If TextBox1 <> "" Then
            For ligne = 2 To 104986
                If Cells(ligne, 1) Like "*" & TextBox1 & "*" Then
                    ListBox1.AddItem Cells(ligne, 1)
                End If
            Next
        End If
     
    'ActiveSheet.Protect
     
    End Sub
    Merci d'avance.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 255
    Points
    34 255
    Par défaut
    Bonjour,

    je pose la question a toute fin utile :
    pourquoi ne pas passer par Access ?


    Sinon, a la place de faire un traitement ligne a ligne, pourquoi ne passes-tu pas par un filtre Excel ? La decomposition du code se ferait en 3 etapes :
    - application du filtre sur tes donnees
    - vidage d'une zone recipient, copie/collage des donnees filtrees
    - alimentation a partir de la zone recipient avec la propriete RowSource
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Perso, je pense que tu est en train d'utiliser un couteau de cuisine pour visser des vis cruciformes.
    Plus clairement, tu n'utilises pas le bon outil.

    Excel est conçu pour faire des calculs.
    Là, tu fais de la gestion de base de données.
    Donc, tu devrais utiliser un logiciel de gestion de base de données comme Access, Open Base ou Libre Base (ou autres) qui sont bien plus adaptés à ton besoin.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    Salut les gars,

    En effet Menhir je suis d'accord mais j'ai que excel de dispo.

    Ben c'est vrai qu'avec 2013 on à quand même pas mal de place pour placer des données. Mais la c'est too much.

    Pense que je vais restreindre les données par utilisateur. Etant donnée que pas tous le monde à besoin des chercher sur les 1000 000 de lignes.

    @Jean-Philippe André tu as des exmples de code qui permet de filtrer?

    Merci

  5. #5
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 255
    Points
    34 255
    Par défaut
    Bien sur, issu de l'enregistreur de macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A1").AutoFilter
    ActiveSheet.Range("$A$1:$A$8").AutoFilter Field:=1, Criteria1:="=*I*", _
            Operator:=xlAnd
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  6. #6
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par nonesofar Voir le message
    En effet Menhir je suis d'accord mais j'ai que excel de dispo.
    Juste pour info et sans vouloir insister lourdement, Open Base et Libre Base sont gratuits.
    http://www.openoffice.org/fr/
    http://fr.libreoffice.org/
    Je conseille plutôt le premier.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    Bonjour
    c'est un vrai casse tete chinois ces filtres tout du moins l'utilisation des resultat

    depuis tout a l'heure je suis en traine d'essayer de mettre la plage obtenu dans la liste box et rien ne fait j'ai des erreurs complètement incohérentes
    la plage obtenue directement dans list marche pas
    alors
    tant pis on copie la plage dans une autre colonne et on récupère le tableau le tableau est bon sur le sheets mais... ben ca marche pas

    rien mais alors rien ne marche c'est un truc qui me fait monter la tentions depuis tout a l'heure


    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
    Private Sub CommandButton1_Click()
        Dim tableau
        With ActiveSheet   ' plage a adapter
            .Range("$A$1:$A$" & Rows.Count).AutoFilter Field:=1, Criteria1:="=*" & TextBox1 & "*"  'mot recherché a adapter
            'pour connaitre l'adress des cellules concernées par le filtre sans les cellules adgacentes
            'plage =.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Address' j'ai bien les bonne cellules non contiguës dans l'addresse
            .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy Destination:=[c1]c'est bien copié dans la colonne C 
            Application.Wait (Now + TimeValue("0:00:02"))' on fait une pose café au cas ou 
            derlig = .Cells(Rows.Count, 3).End(xlUp).Row récupération de la derniere ligne de C 
            tableau = .Range(.Cells(1, 3), .Cells(derlig, 3)).Value tableau est remplie 
            .Range("$A$1:$A$" & Rows.Count).AutoFilter    ' stop le filtre
            MsgBox derlig
            ListBox1.List = tableau
        End With
    End Sub
    un truc de fou je vous dis moi
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    le coup du SpecialCells(XlCellTypeVisible) qui tape au mauvais endroit (récupération des lignes non visibles ou arrêt de la plage à la première ligne masquée), je rencontre parfois également des surprises.

    En gros, la sélection s'effectue sur le premier Areas de la zone, et ensuite il s'arrête on dirait


    Du coup, je procède différemment maintenant :

    - filtre avancé avec fonction d'export dans une autre feuille
    - mise sous Array du résultat
    - injection du Array dans la listbox

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    bonjour joe
    oui et non

    si tu regarde bien je copy/destination le résultat et c'est correct

    par contre la mises en array comme tu dis ne fonctionne pas c'est vraiment étrange
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 071
    Points : 9 850
    Points
    9 850
    Billets dans le blog
    5
    Par défaut
    Oui, désolé j'ai été un peu rapide dans mon précédent message, t'as raison de me reprendre.

    Parcourir la plage c'est pas un souci, en revanche si tu mets ton Range.SpecialCells dans un Array, tu auras (en fonction de la première ligne qui est filtrée) la totalité des données ou simplement le premier Area de ta plage visible

    Comme je n'ai jamais eu le temps de creuser, et que le filtre avancé fait très bien l'affaire (voir +), je n'ai pas d'explication claire à propos de ce comportement.

    D'ailleurs, en fonction de la version Office et du type de fichier Excel .... ça ne se produit pas toujours !


    Pourquoi je conseille le filtre avancé ? Car on obtient une vraie plage contigüe des résultats à incorpore dans le ListBox
    Et si on veut plusieurs colonnes de données, qui soient adjacentes ou non, le filtre avancé va permettre de réagencer correctement les éléments


    EDIT : hey, j'avais pas fait attention .... pourquoi tu retires pas ton filtre automatique avant d'injecter les valeurs dans ton Array ? Ca pourrait venir de là tes incohérence ?

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    oh!! purré tu a raison il faut faire sauter le filtre avant
    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
    Private Sub CommandButton1_Click()
        Dim tableau
       ListBox1.Clear
        With ActiveSheet   ' plage a adapter
            derlig = .Cells(Rows.Count, 1).End(xlUp).Row 'récupération de la derniere ligne de C
            .Range("A1:A" & derlig).AutoFilter Field:=1, Criteria1:="=*" & TextBox1 & "*" 'mot recherché a adapter
            'pour connaitre l'adress des cellules concernées par le filtre sans les cellules adgacentes
            'plage =.AutoFilter.Range.SpecialCells(xlCellTypeVisible).Address' j'ai bien les bonne cellules non contiguës dans l'addresse
            .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy Destination:=[c1] 'c'est bien copié dans la colonne C
            derlig = .Cells(Rows.Count, 3).End(xlUp).Row 'récupération de la derniere ligne de C
            .Range("$A$1:$A$" & Rows.Count).AutoFilter    ' stop le filtre
           tableau = .Range(.Cells(2, 3), .Cells(derlig, 3)).Value ' tableau est remplie
     
            ListBox1.List = tableau
        End With
    End Sub
    je vais voir si je peux intégrer le tableau sans passer par copy/destination maintenant
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour à tous
    Ce qui m'interpelle personnellement (et ceci nonobstant les interventions et le travail fait par les intervenants jusqu'ici), c'est le fait que la recherche est faite sur la base d'un champ contenant (et donc non égal à) une saisie dans une textbox. Que ce soit (code du demandeur) avec un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...Like "*" & TextBox1 & "*"...
    ou en utilisant un filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...Criteria1:="=*" & TextBox1 & "*"...
    Je ne peux dès lors personnellement pas écarter l'hypothèse d'une modélisation insuffisamment réfléchie.
    nonesofar peut-il nous donner les précisions suivantes :
    - Que contiennent (un exemple) les cellules de la colonne A ?
    - Qu'est-ce-que l'utilisateur recherche (ce qu'il saisit dans la textbox) ? Autrement dit : quels résultats attend-t-il en Listbox1. Et combien, en moyenne ?

    Je garde à l'esprit que ses données concernent des ports. Je crains en fait qu'en la colonne A ne figurent des chaînes de caractères qui auraient préférablement dû être "éclatées" en plusieurs "champs" (colonnes), ce qui risque dès lors de conduire à des résultats de recherches assez inattendus dans certains cas.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  13. #13
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    Hello à tous,

    Merci d'avoir passé du temps sur mon sujet. Vous êtes au top. Pas encore eu le temps de tester vos code.

    Alors mon code du projet à peu prés terminé.

    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
    Private Sub TextBox1_Change()
    Dim db As Worksheet
    Dim wb As Workbook
    Dim sc As Worksheet
     
     
     
    Set wb = ActiveWorkbook
    Set db = Sheets("Dbase")
    Set sc = Sheets("Results")
     
    Application.ScreenUpdating = False
     
     
    If TextBox1 = "" Then
     
        Call clearliste
     
        ElseIf TextBox1 <> "" Then
     
        db.[A1].AutoFilter field:=2, Criteria1:="*" & TextBox1 & "*"
     
        On Error Resume Next
     
        x = db.Range("B2:B104986").SpecialCells(xlCellTypeVisible).Count
     
        On Error GoTo 0
     
        If x = 1 Then
     
            For ligne = 2 To 104987
                If db.Cells(ligne, 2) Like "*" & TextBox1 & "*" Then
                   sc.Activate
                   ListBox1.AddItem db.Cells(ligne, 1)
                End If
            Next
     
        Else
     
        '""
        End If
     
        End If
     
    End Sub
    J'ai changé un peu, en colonne B j'ai le code port ex frmrs pour marseille . Qui renvoi dans la listbox Cells(ligne, 1) Code Port : FRMRS || Nom Ville : Marseille

    En fait l'utilisateur à déjà le code port mais souhaite connaitre la ville.

    L'idée est d'avoir la correspondance entre code port et nom de ville. Idéalement le top serait que ça fasse une sorte de présélection des réponses comme sur google. Après c'est peu être ambitieux.

    J'ai réduit la base à plus de 100 000 lignes.

    Menhir merci pour les liens sur les BD.

    Bonne journée à tous.

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    heu.... non c'est pas bon!!!!!

    on te dis d'utiliser les filtres pour accélérer la procédure et toi tu ajoute un boucle après le filtre

    ca te sert a quoi le filtre alors ????????????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 586
    Points : 34 255
    Points
    34 255
    Par défaut
    Salut,
    je me permets de m'auto-citer
    Citation Envoyé par Jean-Philippe André Voir le message


    - application du filtre sur tes donnees
    - vidage d'une zone recipient, copie/collage des donnees filtrees
    - alimentation a partir de la zone recipient avec la propriete RowSource
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  16. #16
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Qui renvoi dans la listbox Cells(ligne, 1) Code Port : FRMRS || Nom Ville : Marseille
    C'est bien ce que je pensais, lorsque j'ai écrit :

    Je ne peux dès lors personnellement pas écarter l'hypothèse d'une modélisation insuffisamment réfléchie
    C'est TOUJOURS une très mauvaise idée, que de mettre plusieurs données dans un seul champ
    Si trois données --->> trois champs
    Et un Find suffit alors.

    Je ne comprends par ailleurs plus la nécessité d'un contrôle/liste (listbox ou combobox), puisque ne peut correspondre qu'un code à un port !
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  17. #17
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut
    Salut,
    je me permets de m'auto-citer

    Envoyé par Jean-Philippe André


    - application du filtre sur tes donnees
    - vidage d'une zone recipient, copie/collage des donnees filtrees
    - alimentation a partir de la zone recipient avec la propriete RowSource



    ou ".list"
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 073
    Points
    12 073
    Billets dans le blog
    8
    Par défaut re
    aurais tu la possibilité de nous faire parvenir un exemple de fichier avec un centaine de ligne au moins en xlx(sans macro)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  19. #19
    Membre habitué
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Points : 134
    Points
    134
    Par défaut
    on te dis d'utiliser les filtres pour accélérer la procédure et toi tu ajoute un boucle après le filtre

    ca te sert a quoi le filtre alors ????????????
    Je me sers de la boucle pour afficher dans la listbox après avoir filtré. Oui c'est pas top lol, mais ça fonctionne. Je vais tester ton code patricktoulon qui me semble plus fin .

    Qui renvoi dans la listbox Cells(ligne, 1) Code Port : FRMRS || Nom Ville : Marseille
    C'est bien ce que je pensais, lorsque j'ai écrit :

    Afficher plusieurs champs ne change rien vu que c'est le résultat que je renvoi dans la liste box. La recherche s'effectue sur un code en colonne 2

    Alors en fait le but du projet est, comme j'ai indiqué faire une sorte de recherche avec suggestion de réponse, comme google.

    Exemple : on tape FRM alors on propose toutes les villes et plus l'utilisateur tape de lettre, plus la recherche se précise.

  20. #20
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Ben ...
    Utilise alors une combobox (qui n'est autre que la conjugaison d'une zone de saisie (à la place de ta textbox) et d'une listbox).
    Une combobox possède, pour ce qui t'intéresse, une propriété MatchEntry, non ? Elle devrait retenir ton attention .
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Optimisation requête avec Group BY sur 600 000 lignes
    Par kimaidou dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/03/2011, 14h01
  2. comme optimiser cette requête sur 12.000 enr.
    Par chapeau_melon dans le forum WinDev
    Réponses: 2
    Dernier message: 22/03/2008, 20h36
  3. Réponses: 3
    Dernier message: 09/05/2006, 20h06
  4. Experts Mysql : Optimiser une requete sur codes postaux
    Par El Riiico dans le forum Requêtes
    Réponses: 6
    Dernier message: 20/01/2006, 19h00

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