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 :

VBA pour suppression ligne sous condition [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    secretaire
    Inscrit en
    Octobre 2023
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : secretaire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2023
    Messages : 13
    Par défaut VBA pour suppression ligne sous condition
    Bonjour à tous,
    je vous explique mon souci...
    j'ai un classeur avec plusieurs feuilles de clients qui sont reliées une feuille "général" où se trouve un tableau avec l'ensemble des clients qui me permets de fixer des tarifs et les répercuter dans chaque grille tarifaire personnalisé des différentes feuilles. toutefois il y a beaucoup d'article et tous les clients n'ont pas forcement les mêmes et peuvent changer d'une semaine à l'autre. j'aimerai créer une VBA pour supprimer les lignes sans tarifs des différents clients pour pouvoir envoyer une grille tarifaire plus appropriée en supprimant toutes les lignes avec des produits ou les colonnes b et c sont marqués "-". il faudrait qu'elle s'exécute de manière automatique dans chaque feuille qui serait protéger (plusieurs à utiliser le fichier) seule la feuille générale restera sans protection pour pouvoir changer les tarifs chaque semaine. Ca fait pas mal de temps que je tourne en rond avec ce fichier ce qui m'a poussé à vous demander un peu d'aide avant que je devienne folle... merci beaucoup d'avoir pris le temps de me lire déjà et si en plus vous avez une solution ca serez merveilleux.

  2. #2
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    pas sûr d'avoir tout compris mai c'est rarement une bonne solution d'avoir une feuille par client.
    Encore une fois tel que j'imagine le sujet, je vois bien un truc avec un onglet client, un onglet catalogue/tarif général, un onglet tarif client, le reste n'étant plus qu'une affaire de formules et de filtre sur les données.

    Cela dit, même avec plusieurs feuilles un filtre permettrait idem de masquer les lignes avec "-" en B et C et donc d'imprimer un tarif propre.

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, teste 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub SupprimerLignesSansTarifs()
    Dim ws As Worksheet
    Dim rng As Range
    Dim lastRow As Long
    Dim i As Long
    Dim pwd As String
     
    'Définir le mot de passe pour déprotéger et protéger les feuilles
    pwd = "votre mot de passe ici"
     
    'Boucle sur toutes les feuilles du classeur sauf la feuille "général"
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "général" Then
            'Détermine la dernière ligne utilisée dans la colonne B
            lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
            'Définit la plage à examiner dans les colonnes B et C
            Set rng = ws.Range("B2:C" & lastRow)
            'Vérifie si la feuille est protégée
            If ws.ProtectContents Then
                'Déprotège la feuille avec le mot de passe
                ws.Unprotect pwd
            End If
            'Boucle à rebours sur les lignes de la plage
            For i = rng.Rows.Count To 1 Step -1
                'Si les cellules B et C contiennent "-", supprime la ligne entière
                If rng.Cells(i, 1) = "-" And rng.Cells(i, 2) = "-" Then
                    rng.Cells(i, 1).EntireRow.Delete
                End If
            Next i
            'Protège à nouveau la feuille avec le mot de passe
            ws.Protect pwd
        End If
    Next ws
     
    End Sub

  4. #4
    Membre averti
    Femme Profil pro
    secretaire
    Inscrit en
    Octobre 2023
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : secretaire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2023
    Messages : 13
    Par défaut
    Citation Envoyé par Franc Voir le message
    Bonjour, teste 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub SupprimerLignesSansTarifs()
    Dim ws As Worksheet
    Dim rng As Range
    Dim lastRow As Long
    Dim i As Long
    Dim pwd As String
     
    'Définir le mot de passe pour déprotéger et protéger les feuilles
    pwd = "votre mot de passe ici"
     
    'Boucle sur toutes les feuilles du classeur sauf la feuille "général"
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> "général" Then
            'Détermine la dernière ligne utilisée dans la colonne B
            lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
            'Définit la plage à examiner dans les colonnes B et C
            Set rng = ws.Range("B2:C" & lastRow)
            'Vérifie si la feuille est protégée
            If ws.ProtectContents Then
                'Déprotège la feuille avec le mot de passe
                ws.Unprotect pwd
            End If
            'Boucle à rebours sur les lignes de la plage
            For i = rng.Rows.Count To 1 Step -1
                'Si les cellules B et C contiennent "-", supprime la ligne entière
                If rng.Cells(i, 1) = "-" And rng.Cells(i, 2) = "-" Then
                    rng.Cells(i, 1).EntireRow.Delete
                End If
            Next i
            'Protège à nouveau la feuille avec le mot de passe
            ws.Protect pwd
        End If
    Next ws
     
    End Sub
    Bonjour,
    Quand je relie ton code c'est axactement ce que j'aimerai mais ça ne marche pas... j'ai essayé de l'adapter en essayant plusieurs choses mais sans succès...
    La protection des feuilles se fait bien mais ça ne me masque pas les lignes sans tarifs...
    Pour plus de précision ma plage de tarifs sur chaque feuille client est la même ($B$16:$C$150) et j'ai 3 feuilles à ne pas protèger "GENERAL" "SEMAINE N-1" et "VARIATION N+1" et il peut y a avoir des tarifs dans la colonne B ou C ou B et C pour un même produit.
    Si vous avez une autre idée je suis preneuse....lol

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, il suffit de quelques modifications. Ajoute les noms des feuilles qui ne sont pas concernées par la protection comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If ws.Name <> "général" and ws.Name <> "SEMAINE N-1" and ws.Name <>  "VARIATION N+1" Then
    Ensuite il suffit de tester si la colonne B OU la colonne C contient "-"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If rng.Cells(i, 1) = "-" OR rng.Cells(i, 2) = "-" Then
    Si c'est le cas la ligne sera supprimée et non pas cachée, comme demandé au départ.
    Si ça ne fonctionne pas, il faudrait un classeur test pour vérifier.

  6. #6
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    Si c'est le cas la ligne sera supprimée et non pas cachée, comme demandé au départ.
    pourtant moi je lis :
    j'aimerai créer une VBA pour supprimer les lignes sans tarifs des différents clients pour pouvoir envoyer une grille tarifaire plus appropriée en supprimant toutes les lignes avec des produits ou les colonnes b et c sont marqués "-".


    Tu peux remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rng.Cells(i, 1).EntireRow.Delete
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rng.Cells(i, 1).EntireRow.Hidden=True
    mais il risque aussi de manquer un mécanisme pour réafficher les lignes.

  7. #7
    Membre averti
    Femme Profil pro
    secretaire
    Inscrit en
    Octobre 2023
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : secretaire
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2023
    Messages : 13
    Par défaut
    Bonjour,
    je te remercie de ta reponse mais j'avais déjà essayé avec les filtres mais ça ne marche pas car il faudrait une condition pour afficher les deux colonne de tarifs ou soit l'une ou soit l'autre. Enfin bref je n'y suis pas arrivé.

  8. #8
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Citation Envoyé par Mitus Voir le message
    Bonjour,
    je te remercie de ta reponse mais j'avais déjà essayé avec les filtres mais ça ne marche pas car il faudrait une condition pour afficher les deux colonne de tarifs ou soit l'une ou soit l'autre. Enfin bref je n'y suis pas arrivé.
    Tu as testé mon code ?

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

Discussions similaires

  1. [XL-2016] Macro VBA suppression ligne sous conditions
    Par domcoool92 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/09/2018, 14h26
  2. [XL-2010] Suppression lignes sous conditions
    Par Tricks87 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/02/2018, 14h18
  3. [XL-2013] Suppression ligne sous condition particulière
    Par Seozz dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/05/2016, 10h59
  4. Excel VBA - Supprimer une ligne sous condition
    Par freygeo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/08/2012, 16h55

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