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

Excel Discussion :

[XL 2010] pb pour supprimer des lignes avec des variables dans une feuille de calcul


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    chef d'équipe
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chef d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [XL 2010] pb pour supprimer des lignes avec des variables dans une feuille de calcul
    Bonjour,
    J’ai actuellement la macro ci-dessous qui me supprime les lignes d’un tableau dans lesquelles il y a les références « SAM…P0… ».
    J’ai régulièrement besoin d’ajouter de nouvelles références et je souhaiterais ne plus à avoir à modifier la macro.
    J’ai créé dans une feuille excel la liste de toutes les références que je dois supprimer mais je n’arrive pas à créer la macro qui me ferai exactement la même chose mais en allant chercher les « SAM…P0… » dans cette liste.
    Merci de votre aide

    sup = Range("B65000").End(xlUp).Row
    For Each VALEUR In Range("A5:A" & sup)
    B = VALEUR.Row
    While Range("A" & B) = "SAM4221P07197" Or Range("A" & B) = "SAM4221P07198" Or Range("A" & B) = "SAM4221P09162" Or Range("A" & B) = "SAM4221P07292" Or Range("A" & B) = "SAM4221P07293" Or Range("A" & B) = "SAM4221P07291" Or Range("A" & B) = "SAM4200P00134" Or Range("A" & B) = "SAM4221P07259" Or Range("A" & B) = "SAM4221P07284" Or Range("A" & B) = "SAM4221P07155" Or Range("A" & B) = "SAM4221P07158" Or Range("A" & B) = "SAM4221P07281" Or Range("A" & B) = "SAM4221P07282" Or Range("A" & B) = "SAM4221P07069" Or Range("A" & B) = "SAM4221P07070" Or Range("A" & B) = "SAM4221P07262" Or Range("A" & B) = "SAM4221P07148" Or Range("A" & B) = "SAM4221P07247" Or Range("A" & B) = "SAM4221P07299" Or Range("A" & B) = "SAM4221P07309" Or Range("A" & B) = "SAM4221P07327" Or Range("A" & B) = "SAM4221P07326"
    Rows(B).Delete
    Wend

  2. #2
    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,

    si toutes les références sont normalisées en "SAM....P0..." alors on peut faire ceci :

    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 Supp()
     
     
    Dim Ws As Worksheet
    Dim Cell As Range
     
    Set Ws = ThisWorkbook.Worksheets("LaFeuille")
     
    For Each Cell In Ws.Range(Cells(5, 1), Cells(Ws.UsedRange.Rows.Count, 1))
        If Cell Like "SAM*P0*" Then
            Cell.EntireRow.Delete
        End If
    Next Cell
     
    End Sub
    juste indiquer dans la macro le nom de la feuille où sont tes lignes
    Si la référence cherchée n'est pas normalisée comme écrit au dessus, il faut nous en dire plus.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 19
    Points : 33
    Points
    33
    Par défaut Une solution possible.
    Bonjour,

    Si j'ai bien compris ton problème :
    • Traitement d'une partie d'une feuille Excel, délimitée par la ligne 5 et la dernière ligne de données.
    • En colonne "A" de chaque ligne, il y a une référence.
    • La valeur de cette référence peut commencer par "SAM4221P0" ou avoir une autre valeur.
    • Cas 1 - Lorsque la valeur de cette référence commence par "SAM4221P0", la ligne doit être supprimée.
    • Cas 2 - Lorsque la valeur de cette référence commence par "SAM" et contient "P0", la ligne doit être supprimée.

    Si oui, voici une proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub EffacerSAM4221P0()
      sup = Range("B65000").End(xlUp).Row
      For i = sup To 5 Step -1
        ' Cas 1.
        If UBound(Split(Range("A" & i).Value, "SAM4221P0")) > 0 Then Rows(i).Delete
        ' Cas 2.
        If Range("A" & i).Value Like "SAM*P0*" Then Rows(i).Delete
      Next
    End Sub
    Testé dans les conditions décrites, cela fonctionne.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    chef d'équipe
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chef d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses.

    J'ai dans une feuille 1, dans la colonne A une liste avec uniquement des références en SAM4221P0... Certaines références ne doivent pas apparaître dans cette liste et je veux supprimer les lignes.

    Dans vos 2 propositions, il me semble que cela va supprimer toutes mes lignes puisque elles commencent toutes par SAM4221P0... ?

    Exemple:

    Ma liste:
    - SAM4221P07000
    - SAM4221P07001
    - SAM4221P07002
    - SAM4221P07003



    Je veux supprimer les lignes qui contiennes SAM4221P07001 et SAM4221P07002 car elles ne doivent pas apparaître dans mon tableau.

    Je voudrais que ma macro aille chercher la liste des réf à supprimer dans une autre feuille excel car cette liste peux s'agrandir.

    Suite de l'exemple:
    Il y aura:
    - SAM4221P07001
    - SAM4221P07002

    Puis un jour j'ajouterai le SAM4221P07008


    Merci de votre aide
    En attendant vos réponses je vais essayer de travailler sur la solution de joe.levrai qui me parait plus proche.

  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
    Dans ce cas :

    1) tu crée une plage nommée "ListeASupprimer" dynamique (recherche rapide sur internet va te donner réponse ==> fonction décaler dans la définition de la plage nommée)

    2) teste cette macro modifiée (je l'ai juste écrite dans cette discussion, donc non testée) :

    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
     
    Sub Supp()
     
     
    Dim Ws As Worksheet
    Dim Cell As Range
    Dim Liste() As Variant
    Dim i As Integer
     
    Liste() = Range("ListeASupprimer")
    Set Ws = ThisWorkbook.Worksheets("LaFeuille")
     
    For Each Cell In Ws.Range(Cells(5, 1), Cells(Ws.UsedRange.Rows.Count, 1))
        For i = LBound(Liste, 1) To UBound(Liste, 1)
            If Cell Like "*" & Liste(i, 1) & "*" Then
                Cell.EntireRow.Delete
            End If
        Next i
    Next Cell
     
    End Sub

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    chef d'équipe
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chef d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci
    je viens d'essayer mais j'ai le message d'erreur "la méthode ranch a échouée" au moment de réaliser

    Liste() = Range("ListeASupprimer")

  7. #7
    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
    Le message d'erreur t'indique qu'il ne trouve aucune plage portant ce nom

    Tu as bien crée ta plage nommée (portée : classeur entier) comme indiqué dans le point 1 ?

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    chef d'équipe
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chef d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ok merci.
    C'est pas loin!

    J'ai ajouté "Worksheets("Feuil1").Activate" car sinon methode ranch à échouée au moment ci-dessous:
    For Each Cell In Ws.Range(Cells(5, 1), Cells(Ws.UsedRange.Rows.Count, 1))


    Je n'ai plus de message d'erreur mais il supprime des lignes de ma plage nommée "ListeASupprimer".

    Tandis que moi j'ai besoin de supprimer les lignes dans la feuille "BLABLA" et de toujours avoir ma plage "ListeASupprimer" dans la page "feuil1"







    Sub Supp()


    Dim Ws As Worksheet
    Dim Cell As Range
    Dim Liste() As Variant
    Dim i As Integer

    Liste() = Range("ListeASupprimer")
    Set Ws = ThisWorkbook.Worksheets("LaFeuille")

    "Worksheets("Feuil1").Activate"

    For Each Cell In Ws.Range(Cells(5, 1), Cells(Ws.UsedRange.Rows.Count, 1))
    For i = LBound(Liste, 1) To UBound(Liste, 1)
    If Cell Like "*" & Liste(i, 1) & "*" Then
    Cell.EntireRow.Delete
    End If
    Next i
    Next Cell

  9. #9
    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
    Rectification des erreurs de débutant
    Je pars du principe que ton nombre de lignes est inférieur à 65536

    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
     
    Sub Supp()
     
     
    Dim Ws As Worksheet
    Dim Cell As Range
    Dim Liste() As Variant
    Dim i As Integer
    Dim DerLig As Integer
     
    Liste() = Range("ListeASupprimer")
    Set Ws = ThisWorkbook.Worksheets("LaFeuille")
    DerLig = Ws.Range("A65535").End(xlUp).Row
     
    For Each Cell In Ws.Range("A5", "A" & DerLig).Cells
        For i = LBound(Liste, 1) To UBound(Liste, 1)
            If Cell Like "*" & Liste(i, 1) & "*" Then
                Cell.EntireRow.Delete
            End If
        Next i
    Next Cell
     
    End Sub
    Il te reste à renommer "LaFeuille" avec le nom de ta feuille BLABLA

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    chef d'équipe
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : chef d'équipe
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Ah oui ok merci

    J'ai testé avec 2 références.
    Dès qu'il trouve la 1ère correspondance il me supprime bien la ligne mais ensuite il bloque.

    Il me met objet requis au moment ci-dessous:
    If Cell Like "*" & Liste(i, 1) & "*" Then

    Désolé pour toutes ces questions mais je suis plutôt débutant dans l'écriture de macro et je ne connais pas bien le fonctionnement de la fonction LBound.

  11. #11
    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, bonjour,

    sinon en utilisant un filtre ce serait peut-être encore plus simple et rapide …
    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)

Discussions similaires

  1. [XL-2010] macro pour ouvrir x fichier selectionner des col et les coller dans une feuille xl
    Par grainedechipie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/02/2015, 09h46
  2. [XL-2007] Copier/coller des lignes avec des cellules verrouillées
    Par Adri687 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 10/01/2013, 11h25
  3. Réponses: 3
    Dernier message: 10/02/2012, 11h40
  4. Réponses: 0
    Dernier message: 14/11/2011, 15h52
  5. Est-il possible de créer des tables avec des lignes identiques ?
    Par raton_laveur dans le forum Développement
    Réponses: 2
    Dernier message: 25/05/2009, 09h10

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