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 :

Où est l'erreur?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2010
    Messages : 120
    Par défaut Où est l'erreur?
    Bonjour à tous,
    Je suis en train d'écrire un code pour supprimer des lignes si leur valeur dans la colonne B est différente de "13#####".
    Problème 1: ma macro cale à la 1841ème ligne environ càd qu'elle s'arrête complétement
    Problème 2: elle filtre mal, il me reste plein de lignes ayant autre chose qu'une chaîne "13#####"
    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
     
    Sub EffecerLignes()
     
    Dim CodeVéhicule As String
    Dim Cellule As Range
    Dim ColCode As Range
     
    Set ColCode = Worksheets("Données").Range("B2:B" & Range("B65536").End(xlUp).Row)
     
    For Each Cellule In ColCode
        CodeVéhicule = Cellule.Value
            If CodeVéhicule <> "13#####" Then
            Cellule.EntireRow.Delete
            End If
    Next
    End Sub
    J'ai aussi essayé en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if left(CodeVéhicule,2) <> "13"
    Sans succès...

    Merci de proposer vos solutions

  2. #2
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    ça irait beaucoup plus rapidement en utilisant les filtres automatiques, tu fais un essai manuel sur la feuille en direct avec filtres auto, personnalisé égal à la chaîne voulue. Si le résutat te convient tu regardes dans la FAQ et les tutos comment minipuler les filtres auto et leurs résultats.
    En premier tu refais la même manip que ci-dessus, mais avec l'enregistreur de macro activé, ce qui te donnera tous les mots clefs pour le départ..

    cordialement,

    Didier

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 85
    Par défaut
    Bonjour

    Est-ce que tes données après le 13 sont des chiffres ou des lettres ?

    En effet il se peut qu'une partie de tes données soient formatés comme des chiffres et le reste des lettres.

    Si c'est le cas tu pourrais par exemple lors du test faire une conversion en lettre avec la fonction Cstr.

    Essayes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CodeVéhicule = Cstr(Cellule.Value)
    c'est sans garantie c'est juste une idée à tester.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2010
    Messages : 120
    Par défaut
    Merci de réagir si vite

    Pepeyo:
    Les lignes que je cherche a extraire sont celles où dans la colonne B le code est composé uniquement de chiffres et commence par "13". je vais regrder de plus près la fonction Cstr pour voir si ça change qqchose

    Ormonth:
    Je n'utilise pas les filtres automatiques car il s'agit d'une plage de données importées que je ne veux pas convertir en plage de cellules simple et aussi car il me semble qu'en utilisant les filtres automatiques les lignes sont simplement masquées et non supprimées ce qui risque de me jouer des tours pour la suite des opérations.

    EDIT: pas plus de succès avec Cstr, beaucoup de valeurs ne sont toujours pas filtrées...

  5. #5
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour Lucorah, à tous,

    lorsque tu doit supprimer des lignes il faut faire la boucle en commencant en bas de la plage et remonter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = Worksheets("Données").Range("B65536").End(xlUp).Row To 2 Step -1
    aussi identifier la feuille au deux endroits dans cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ColCode = Worksheets("Données").Range("B2:B" & Worksheets("Données").Range("B65536").End(xlUp).Row)
    sinon se sera la derniere cellule de la colonne B de la feuille active qui sera prit en compte

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    il me semble qu'en utilisant les filtres automatiques les lignes sont simplement masquées et non supprimées ce qui risque de me jouer des tours pour la suite des opérations.
    c'est vrai, mais il y des façons très simple de ne récolter que ce que l'on veut, notamment avec l'argument xlCellTypeVisible de la méthode SpecialCells

    cordialement,

    Didier

  7. #7
    Membre éprouvé
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2010
    Messages : 120
    Par défaut
    Merci Sabzz de te pencher sur le problème, ce que tu dis ma paraît sensé je viens juste d'essayer ce code mais j'ai un petit bug à corriger (je cherche d'où il vient).
    Bien vu Ormonth pour xlcelltypeVisible (on sent l'expérience derrère tout ça...)

    Je donne des nouvelles dès que j'ai testé la solution de Sabzz sans le bug

    EDIT: le bug c'est qu'il ne reconnait plus ma variable Cellule (variable non définie)
    J'ai essayé de corriger ça mais pas comme il faut du coup excel pédale dans la semoule depuis 5 mn.

  8. #8
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    le bug c'est qu'il ne reconnait plus ma variable Cellule (variable non définie)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub EffecerLignes()
    Dim f As Object
    Dim i As Integer
    Dim CodeVéhicule As String
    Set f = Worksheets("Données")
     
    For i = f.Range("B65536").End(xlUp).Row To 2 Step -1
        CodeVéhicule = f.Range("B" & i)
            If CodeVéhicule <> "13#####" Then
            Rows(i).Delete
            End If
    Next
    End Sub

  9. #9
    Membre éprouvé
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2010
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2010
    Messages : 120
    Par défaut
    J'arrive pas à me dépatouiller de ce bourbier...
    Sabzz:
    La ligne For i = ... ...
    C'est bien une ligne à rajouter avant la ligne For each déjà présente ou elle doit la remplacer?

    Edit: Merci beaucoup Sabzz ça fonctionne comme sur des roulettes !!! (tu fais progresser mon stage)
    Merci également aux autres intervenants

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 30/01/2006, 14h21
  2. Où est l'erreur?
    Par Paulinho dans le forum C++
    Réponses: 3
    Dernier message: 26/10/2005, 09h48
  3. [VB.NET] Pagination DataGrid (où est l'erreur?)
    Par franculo_caoulene dans le forum ASP.NET
    Réponses: 2
    Dernier message: 25/10/2004, 11h46
  4. Ou est l'erreur ?
    Par Antoine NSG dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/09/2004, 10h56
  5. [Erreur] Quel est cette erreur?
    Par netah25 dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/08/2004, 10h16

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