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 :

Filtre VBA "ne commence pas par"


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    employé
    Inscrit en
    Septembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Septembre 2015
    Messages : 43
    Points : 32
    Points
    32
    Par défaut Filtre VBA "ne commence pas par"
    bonjour à tous,


    je rencontre un problème est ne trouve pas de solution dans les différents forums,

    j'ai besoin de faire un filtre avec comme critère "ne commence pas par" (au pire "ne contient pas"), le souci c'est que je ne sais pas comment écrire cela avec ma variable

    ci dessous le code ou j'arrive à filtrer ce qui contient.

    si l'un d'entre vous à une solution je suis preneur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim rep As String
        rep = InputBox("QUEL FRS", "Fournisseur à sélectionner") & "*"
     
        With Sheets("Base (2)").Range("b2")
        .AutoFilter
        .AutoFilter field:=2, Criteria1:=rep
        End With

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,
    As tu essayé:
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    employé
    Inscrit en
    Septembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Septembre 2015
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    oui oui ça me met erreur de compilation

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Sans la variable la syntaxe que m'as donné l'enregistreur de macro
    edit: En fait non essaye:
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    employé
    Inscrit en
    Septembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Septembre 2015
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    presque ci dessous la syntaxe exact merci à toi halaster08




  6. #6
    Nouveau membre du Club
    Homme Profil pro
    employé
    Inscrit en
    Septembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Septembre 2015
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    Dernière question un peux bête mais je n'arrive pas à supprimer ma plage comment faire sachant que ma plage est variable


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim rep As String
        rep = InputBox("QUEL FRS", "Fournisseur à sélectionner") & "*"
     
     
        With Sheets("Base (2)").Range("b2")
        .AutoFilter field:=2, Criteria1:="<>" & rep
        End With

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A2:A" & Range("A"& rows.count).End(xlUp).Row).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    Au passage un peu de pub pour un tuto qui pourrait t'être utile (sur les filtres avancés) http://philippetulliez.developpez.co...dvancedfilter/
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    employé
    Inscrit en
    Septembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Septembre 2015
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    oui c'est le bout de code que j'avais mit mais çà m'affiche erreur 1004 "la méthode delete de la classe range à échouer"


    oui je l'avais déjà lu très utile

  9. #9
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    As tu des données dans la colonne A? si non change le A en une colonne où tu as des données.
    Si oui je ne sais pas d'où viens le probleme.
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  10. #10
    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
    Cela arrive lorsque la plage est complexe. Ce sera par exemple le cas si tu as un grand nombre de lignes visibles "entrelacées" dans un grand nombre de lignes cachées.
    Remède : "découper" la plage en sous-plages (de 1000 lignes, par exemple) et traiter ces sous-plages en boucle, de bas en haut.

    EDIT : Pour vérifier le bien fondé de ce que j'ai dit plus haut
    Petite expérience :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Application.ScreenUpdating = False
    For i = 1 To 2000
      Range("A" & i).Value = "a"
      If i Mod 2 = 0 Then Rows(i).Hidden = True
    Next
     
    Application.ScreenUpdating = True
    Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    Pas de problème avec 2000
    Essayez maintenant avec 100000 et constatez.
    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.

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 761
    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 : 12 761
    Points : 28 619
    Points
    28 619
    Billets dans le blog
    53
    Par défaut Critère nommé avec le filtre avancé
    Bonjour,
    Si tu utilises les critères nommés avec le filtre avancé voici une formule qui fonctionne pour filtrer "Tout ce qui ne commence pas par..."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =GAUCHE(A2;NBCAR($L$1))<>$L$1
    La colonne A contient les valeurs à filtrer et la cellule L1 la chaîne de caractères qui compose le début des mots qui ne peuvent figurer dans la colonne A (Exemple si la cellule L1 contient la chaîne BAV la ligne dont la valeur de la cellule de la colonne A est Bavard ne sera pas affichée.

    En VBA la chaîne contenant la formule sera
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =LEFT(A2,LEN($L$1))<>$L$1
    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

  12. #12
    Invité
    Invité(e)
    Par défaut
    bonjour,
    tu dis ce que tu veux mais pas pourquoi!

    car si ça ce trouve un filtre élaboré ferait l'affaire. mais comme on le sait pas, le grand spécialiste qu'est Philippe ne peut pas te proposé une solution plus appropriée peut être!

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    employé
    Inscrit en
    Septembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Septembre 2015
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    Désolé pour la réponse tardive mais pas mal de boulot en ce moment

    Alors le pourquoi et que j'ai besoin de faire tourner une boucle pour importer une donnée par rapport à une autre le souci c'est que ma base fait environ 200 000 lignes,
    du coup ma boucle tourne pendant un long moment.

    Donc j'ai penser passer par un filtre pour sélectionner se dont je n'avais pas besoin, y supprimer et ensuite faire tourner ma boucle.

    je ne sais pas si j'ai été clair

    PS: j'essaye ta ligne de code unparia

    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
    Dim rep As String
        rep = InputBox("QUEL FRS", "Fournisseur à sélectionner") & "*"
     
     
        With Sheets("Base (2)").Range("b2")
        .AutoFilter field:=2, Criteria1:="<>" & rep
        End With
     
     
    Dim nbl As Long
    Dim nbl2 As Long
     
    nbl = Sheets("Etude").Cells(Application.Rows.Count, 2).End(xlUp).Row 'compte le nombre ligne
    nbl2 = Sheets("Base (2)").Cells(Application.Rows.Count, 2).End(xlUp).Row  'compte le nombre de ligne
     
    For a = 1 To nbl
        For b = 1 To nbl2
     
            If Sheets("Etude").Cells(a, 7) = Sheets("Base (2)").Cells(b, 2) Then
                Sheets("Etude").Cells(a, 8) = Sheets("Base (2)").Cells(b, 15)
            End If
     
            If Sheets("Etude").Cells(a, 7) = Sheets("Base (2)").Cells(b, 2) Then
            Sheets("Etude").Cells(a, 9) = Sheets("Base (2)").Cells(b, 16)
            End If
     
        Next
    Next

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    c'était bien la raison de ma question.


    1. tu fais un filtre élaboré qui envoi sur un autre onglet ce que tu garde.
    2. tu supprime toute les ligne de ta feulle.
    3. tu copie colle le résulta du filtre dans ta feuille.

    c'est plus rapide.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    employé
    Inscrit en
    Septembre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : employé

    Informations forums :
    Inscription : Septembre 2015
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    ah oui pas bête je n'y avait pas penser je vais essayer

  16. #16
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 761
    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 : 12 761
    Points : 28 619
    Points
    28 619
    Billets dans le blog
    53
    Par défaut Supprimer des lignes suivant critères avec la méthode AdvancedFilter
    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

Discussions similaires

  1. [FPDF] Erreur : "Le fichier ne commence pas par '%PDF-' "
    Par hAMST dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 04/08/2009, 16h25
  2. Réponses: 0
    Dernier message: 09/09/2008, 14h12
  3. Afficher les pseudos qui ne commencent pas par une lettre.
    Par asoka13 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/07/2007, 17h30
  4. PHP/HTMLDOC erreur "le fichier ne commence pas par '%PD
    Par petitmoosse dans le forum Langage
    Réponses: 3
    Dernier message: 02/03/2006, 18h05

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