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 permettant de supprimer des lignes données


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juin 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 15
    Par défaut macro permettant de supprimer des lignes données
    Bonjour à tous,

    je dispose d'une base de données avec 4 feuilles de calcul. Sur la première feuille, dans la colonne A, je renseigne les noms des clients de ma société qui sont ensuite repris sur les 3 autres feuilles. Les numéros de ligne correspondent entre les feuilles, c'est à dire que quand je renseigne le nom d'un client sur la ligne 8 de ma première feuille, ce sont les lignes 8 des 3 autres feuilles qui sont alimentées automatiquement.

    Mon souhait était de créer une macro pour que quand je me positionne sur la ligne 8 par exemple de ma 1ère feuille, les lignes 8 des 4 feuilles soient supprimées.

    Je pensais qu'en utilisant les références relatives cette opération serait assez simple mais ça ne fonction pas, (je précise que je n'ai pas de connaissance en programmation VBA):

    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
    Sub Macro2()
    '
    ' Macro2 Macro
        ActiveCell.Rows("1:1").EntireRow.Select
        Selection.Delete Shift:=xlUp
        Sheets("Feuil2").Select
        ActiveCell.Offset(3, 0).Rows("1:1").EntireRow.Select
        Selection.Delete Shift:=xlUp
        Sheets("Feuil4").Select
        ActiveCell.Offset(3, 0).Rows("1:1").EntireRow.Select
        Selection.Delete Shift:=xlUp
        Sheets("Feuil3").Select
        ActiveCell.Offset(3, 0).Rows("1:1").EntireRow.Select
        Selection.Delete Shift:=xlUp
        Sheets("Feuil1").Select
        ActiveCell.Offset(-4, 0).Range("A1").Select
    End Sub
    Merci d'avance pour votre aide.

  2. #2
    Membre chevronné Avatar de blade159
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 226
    Par défaut
    Bonjour,

    essayons de faire simple :
    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
     
    Option Explicit
    Sub Macro2()
     
    Dim ligne As Integer
    Dim i As Integer
    ligne = ActiveCell.Row
    If MsgBox("Voulez-vous supprimer les lignes n°" & ligne & "?", vbYesNo, "Supprimer?") = vbYes Then
        For i = 1 To 4
            Sheets("Feuil" & i).Select
            Rows(ligne & ":" & ligne).Select
            Selection.Delete Shift:=xlUp
        Next i
        MsgBox ("Fin de la suppression des lignes n° " & ligne)
    End If
     
    End Sub

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut OLIV420 et le forum
    Pas sûr de tout comprendre :
    ce sont les lignes 8 des 3 autres feuilles qui sont alimentées automatiquement.
    Ce que je comprends : quand tu renseignes (valides ?) la ligne 8 de Feuil1 (quelle originalité dans les noms des feuilles), tu la transfères sur la ligne 8 des 3 autres feuilles (comment ? copier/coller ou insertion ?).
    quand je me positionne sur la ligne 8 par exemple de ma 1ère feuille, les lignes 8 des 4 feuilles soient supprimées.
    Là, je patauge allégrement : Tu viens de renseigner les lignes 8 des 4 feuilles, mais tu veux les effacer . Doit me manquer un bout du raisonnement.
    Je pensais qu'en utilisant les références relatives
    Références relatives ? par rapport à quoi ? Tout ça me semble un peu... confus. Litteralement, ta macro donne :
    ActiveCell.Rows("1:1").EntireRow.Select
    sélectionner (.Select) la ligne entière (EntireRow) de la ligne 1 (.Rows("1:1")) de la cellule active (ActiveCell)
    Selection.Delete Shift:=xlUp
    Supprimer la sélection
    Sheets("Feuil2").Select
    Sélectionner la feuille "Feuil2"
    ActiveCell.Offset(3, 0).Rows("1:1").EntireRow.Select
    sélectionner la première ligne entièrement (.Rows("1:1").EntireRow.Select) de la cellule active (ActiveCell) décalée de 3 lignes et 0 colonnes (.Offset(3, 0))
    .......
    Sheets("Feuil1").Select
    sélectionner la feuille "Feuil1"
    ActiveCell.Offset(-4, 0).Range("A1").Select
    sélectionner la cellule en haut à gauche (.Range("A1").Select) de la cellule active (ActiveCell) décalée de 0 colonne et 4 lignes vers le haut (.Offset(-4, 0))
    Lu comme ça, on se rend compte qu'on va dans le mur en ayant saboté les freins : Tout dépend de la cellule active, alors que celle-ci évolue en fonction des suppressions et des pages activées. En final, on ne peut être sûr de ce qu'on fait.
    Utiliser les Select/selection a de nombreux inconvénients :
    - L'activecell n'est plus sur la même cellule après une insertion/suppression de ligne, même si elle est a la même adresse absolue.
    - Tu déclenches une erreur si ça concerne d'autres feuilles, si tu es dans un module lié à une feuille.
    - Tu ralentis ton code.
    Et je ne vois pas d'avantage.

    Si on se tient à ta description de ton but, ce que je pense comprendre :
    Quand je sélectionne la ligne 8 de Feuil1, les lignes 8 des feuilles Feuil1, 2, 3 et 4 doivent être supprimées. Clic-droit sur le nom de l'onglet "Feuil1">>Visualiser le code.
    Tu colles la macro :
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim X As Long   'déclaration de x en nombre pouvant aller jusqu'au dernier numéro de ligne
    If Target.Row = 8 And Target.Rows = 1 And Target.Rows(1).Cells.Count = Columns.Count Then
    'Test avec 3 conditions concernant target :
    'c'est la ligne 8
    'c'est la seule sélectionnée
    'elle comporte autant de cellules qu'en compte le nombre de colonnes de la feuille
    'autrement dit si on ne sélectionne que la ligne 8 entièrement, alors
        For X = 1 To 4
        'Pour x=1 jusqu'à 4 par pas de 1
            Sheets("Feuil" & X).Rows(8).Delete
            'supprimer la ligne 8 de chaque feuille Feuilx
        Next X
        'X suivant
    End If
    'fin du test
    End Sub
    C'est un code relativement simple, mais tout dépend du but réel à atteindre.
    Pour la macro, rien n'est laissé au hazard, tout est désigné clairement, et en lisant le code, n'importe qui, avec un minimum de connaissances, quand même, est capable de visualiser ce quil fait. On n'a pas besoin de bloquer les évènements, puisque la sélection ne change pas et qu'elle ne concerne que la feuille 1. On pourrait, sans doute, faire tenir la boucle en une unique instruction (avec Array("feuil1,feuil2,feuil3, feuil4").rows(8).delete), mais comme ça ne concerne qu'une ligne sur 4 feuilles, le ralentissement n'est pas trop important, ça permet de comprendre l'utilisation d'une boucle, de sheets, et comme je ne l'ai pas testée...
    A+

Discussions similaires

  1. Macro permettant d'aller à une ligne donnée
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 07/03/2018, 14h28
  2. [XL-2013] Macro pour supprimer des lignes suivant des critères données
    Par Malick dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/07/2014, 14h35
  3. macro excel pour supprimer des lignes comportant un caractere spécial
    Par fredo49 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/04/2011, 16h32
  4. comment supprimer des lignes avec macros
    Par kadij dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/06/2009, 06h14
  5. Réponses: 2
    Dernier message: 09/09/2008, 12h11

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