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 :

Macro excel : delete des lignes contenant une chaîne de caractères


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut Macro excel : delete des lignes contenant une chaîne de caractères
    Bonjour,

    Dans un tableau, je souhaite supprimer toutes les lignes contenant la chaine de caractères ÉÍ
    Voici mon 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
    Sub Edit_C11_Mise_en_forme()
     
        NOMFICH = Application.InputBox(Prompt:="Nom du fichier : ", Type:=2)
        Workbooks(NOMFICH).Activate
     
    ' Recherche du nombre de lignes dans la feuille
        Nbligne = Range("A" & Rows.Count).End(xlUp).Row
     
    ' Suppression ligne contenant ÉÍ
        Dim Vligne As Range
        For WJ = 1 To Nbligne
            If Vligne Like "ÉÍ" Then Vligne.Rows.Delete
        Next WJ
     
    'Enregsitrement du fichier
         ActiveWorkbook.Save
     
    End Sub
    Lorsque je lance la macro j'ai le message d'erreur "Erreur d'exécution 91, Variable objet ou variable bloc With non définie"
    L'erreur est sur l'instruction If Vligne Like "ÉÍ" Then Vligne.Rows.Delete

    Pourquoi ? Que dois-je faire?


    Je vous remercie.

  2. #2
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    l faudrait placer ton code entre les balises prévues à cet effet (la commande # dans l'éditeur) sinon il est impossible de t'indiquer le n° des lignes qui posent éventuellement problème.

    Tu déclares la variable Vligne comme un Range, tu effectues un test avec celle-ci mais jamais tu ne lui assignes une valeur ?
    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

  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
    En plus de la remarque pertinente de Philippe Tulliez ( ) qui est certainement la source de l'erreur signalée, deux remarques :

    Citation Envoyé par CPE23 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        NOMFICH = Application.InputBox(Prompt:="Nom du fichier : ", Type:=2)
    A ta place, j'aurais plutôt utilisé GetOpenFilename ou Dialogs.
    https://msdn.microsoft.com/library/8...ice.15%29.aspx
    https://msdn.microsoft.com/library/0...ice.15%29.aspx

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        For WJ = 1 To Nbligne
            If Vligne Like "ÉÍ" Then Vligne.Rows.Delete
        Next WJ
    Pour les suppression et les insertions, on part toujours de la dernière ligne pour remonter à la première (Step -1).
    Sinon, tu as de grandes chances de laisser passer des cas.

    Autre petit détail : plutôt que Rows, j'aurais mis EntireRow avant le Delete.
    Ca ne change sans doute pas grand chose mais ça me semble plus propre.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut
    Bonjour,

    et en espérant qu'il n'y a pas beaucoup de lignes à traiter, cette voie par boucle étant la plus lente !

    ___________________________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    problème récurrent et déjà longuement abordé. Eviter les boucles et NE JAMAIS supprimer en allant de haut en bas

    Au choix :

    1) niveau simple : filtre automatique sur "<>" et ta chaine de caractère puis suppression de la plage visible
    2) niveau plus abouti : une colonne temporaire avec une formule excel qui marquera 1 pour les lignes répondant à la contrainte, et 0 pour les autres. On fait ensuite un tri croissant de la plage, et on .Delete les lignes d'en bas
    3) niveau subtil : au lieu de .Delete sur la second proposition, on .Clear
    4) niveau encore plus subtil : essaye déjà les trois premières

  6. #6
    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 Joe.levrai
    parle-lui dans la foulée de cet étrange
    qui, utilisé sans caractères génériques, est un .... = (et je doute assez que certaines de ses cellules ne contiennent que "ÉÍ"
    Cela "sent" une fois de plus du code "ramassé" sans le comprendre ... Et cette senteur est la raison de mon mutisme depuis le début.
    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.

  7. #7
    Candidat au Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci à tous.

    je vais essayer vos solutions.

    Je tiens à préciser que je n'ai jamais coder une macro excel, et que c'est pour moi la totale déocouverte.

  8. #8
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut




    Déjà sans code via un simple filtre …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  9. #9
    Candidat au Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    J'ai essayé l'autofilter mais j'ai un souci

    Je souhaite, sur la colonne A, filtrer les lignes qui contiennent "Page".
    Puis supprimer toutes ces lignes

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Range("A1").AutoFilter Field:=1, Criteria1:="Page"
          Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase"). _
          Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
       Range("A1").AutoFilter
    J'obtiens alors une erreur 1004 "pas de cellule correspondante"
    Si je comprends bien le code, je fais un filtre sur les lignes contenant la valeur "Page" . Est-ce bien cela?
    Or dans mon cas, la cellule contient "Page 1-00001".
    En fonction des lignes, comme vous l'aurez deviné, le nombre de page s'incrémente.
    Du coup comment puis-je lui indiquer : fait un filtre qui contient le mot Page ?
    Ai-je le choix ou faut-il que je passe par une colonne intermédiaire ?

    je vous remercie.

  10. #10
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    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 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ton Criteria1 est ici "la cellule est égale à Page"

    pour un "contient", tu dois encadrer ta chaine avec des *


  11. #11
    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 CPE23 Voir le message
    J'obtiens alors une erreur 1004 "pas de cellule correspondante"
    Essaye de remplacer Range("A1") par l'ensemble de la zone sur laquelle s'applique ton filtre.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Et SpecialCells est inutile car Delete gère déjà uniquement le visible …

    Avant de commencer de coder, effectuer les manipulations en ayant au préalable activé l'Enregistreur de macros :
    une base de code est livrée sur un plateau !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Candidat au Club
    Femme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2017
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Merci à tous !

Discussions similaires

  1. Recherche des fichiers contenant une chaîne de caractères
    Par laurentSc dans le forum Windows 7
    Réponses: 2
    Dernier message: 19/08/2015, 23h34
  2. Supprimer des lignes contenants une plage de doublons
    Par mustangrr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/12/2012, 09h09
  3. Macro pour grouper des lignes sur une plage qui peut varier
    Par RichRich59 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/01/2011, 13h04
  4. Macro pour grouper des lignes sur une plage qui peut varier
    Par girardinho dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/07/2010, 09h43
  5. Excel-copier des lignes sur une autre feuille
    Par petecul dans le forum Excel
    Réponses: 7
    Dernier message: 13/09/2007, 02h56

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