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 :

Suppression d'une ligne en fonction d'une cellule


Sujet :

Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut Suppression d'une ligne en fonction d'une cellule
    Bonjour à tous,

    Je travaille actuellement sur la réalisation d'un planning hebdomadaire de collaborateurs sur Excel. Lorsque je rentre une intervention à un collaborateur sur son planning, celle-ci est copiée dans la feuille Historik. Cependant, quand je veux supprimer une intervention mal planifiée en appuyant simplement simplement sur la touche du clavier Suppr, je veux que la ligne correspondante dans l'historique soit supprimée. Mais je ne sais pas comment faire. Mon idée serait de parcourir les lignes de l'historique et si la date, le créneau (matin ou après midi) et le technicien correspondent à l'intervention, supprimer cette ligne. Mais je ne parviens pas à traduire ça en code étant débutant.

    Pouvez vous me donner un coup de main svp ? Et si vous voyez des améliorations à apporter à mon code déjà présent, n'hésitez pas parce que j'ai le sentiment que c'est pas très optimisé. Merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Idée comme ça :
    Après clic sur OK, d'abord créer la ligne dans l'onglet Historique.
    Quand tu remplis la case de l'onglet "Eric" par exemple, mettre une formule du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NON(ESTVIDE(Historik!taligne)); lesinfosquetumetsdhabitude;"")
    FormulaR1C1 peut t'aider si tu penses que ça peut le faire...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut Suppression d'une ligne en fonction d'une cellule
    Je n'ai pas compris le but du code que vous m'avez donné... Il sert à quoi ?

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Janvier 2010
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 272
    Points : 222
    Points
    222
    Par défaut
    Grosso modo, ça crée dans les cases où il faut double cliquer (onglets avec les noms des personnes) une formule, pas seulement les valeurs que tu veux mettre bout à bout.

    La formule que je te donne suit le raisonnement suivant :

    D'abord tu crées la ligne i dans Historique
    Ensuite tu crées la formule dans l'onglet avec le nom de la personne:
    -Si ligne i est non vide, alors tu donnes les infos que tu veux à la case
    -Sinon, ca ne met rien

    Comme ca, en temps normal, tu as une donnée dans l'historique et la valeur dans la case que tu veux. Mais si tu supprimes la ligne de l'historique, alors ca ne mettre plus rien.

    Je ne sais pas si c'est très clair...

  5. #5
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    Une solution en créant un bouton supprimer, je ne sais pas raccorder cette macro a l'appui de la touche supp. mais j'ai trouvé cela sur un autre site.

    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
    Private Sub CommandButton1_click()
    Dim cell As Range
    Dim num As Integer
    Dim date1 As Date
    'definition des parametre de recherche en fonction de la cellule active
    nom = Cells(ActiveCell.Row, 2)
    date1 = Cells(4, ActiveCell.Column)
    periode = Cells(ActiveCell.Row, 3)
    date2 = Sheets("Historik").Range("a6")
    'on utilise ensuite les filtre de la feuille historik
    num = Sheets("historik").Range("a65000").End(xlUp).Row
        Sheets("Historik").Range("$a$5:$d$" & num).AutoFilter Field:=4, Criteria1:="=" & nom, Operator:=xlAnd
        Sheets("Historik").Range("$a$5:$d$" & num).AutoFilter Field:=1, Criteria1:="=" & date1, Operator:=xlAnd
        Sheets("Historik").Range("$a$5:$d$" & num).AutoFilter Field:=2, Criteria1:="=" & periode, Operator:=xlAnd
    'arriver ici il ne peut en rester qu'un.
        Sheets("Historik").Range("a6").EntireRow.Delete
    'alors on coupe
    End Sub
    Je vous laisse le soins d'ajouter des conditions au filtre si necessaire.
    Pour ce qui du restant du code, j'ai pas trop regardé mais il serait a mon avis interressant de n'avoir qu'un userform, d'y ajouter un menu deroulant avec les personnels concerné. lors du clic sur OK, on recupere la valeur de la selection de la listbox pour aller remplir les feuille concernée.
    Les + : moins de code, moins de userform, moins de maintenance, moins de place pour le fichier.
    Les - : un peu plus difficile a mettre en oeuvre mais vous n'êtes pas seul.

  6. #6
    Membre régulier Avatar de Gorzyne
    Profil pro
    Collégien
    Inscrit en
    Janvier 2008
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2008
    Messages : 329
    Points : 121
    Points
    121
    Par défaut
    pour supprimer manuellement une ligne :

    1. shift + espace
    2. ctrl + -

  7. #7
    Membre régulier Avatar de Gorzyne
    Profil pro
    Collégien
    Inscrit en
    Janvier 2008
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Janvier 2008
    Messages : 329
    Points : 121
    Points
    121
    Par défaut
    en fait tu as deux onglets, tu veux que quand tu supprime le contenu d'une cellule dans un onglet tu declenche une suppression de ligne dans un autre onglet, concrètement ce que tu veux faire s'articule sur deux points

    1. détection de l'événement "suppression"
    2. identification de la ligne à supprimer


    on est donc sur une macro événementielle type change. Il faut donc identifier la cellule sur laquelle on se trouve et vérifier si la valeur vaut "", auquel cas on en déduit que le contenu vient d'être effacé

    On peut traduite ça par le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
        If ActiveCell = "" Then
            MsgBox "vous venez de supprimer le contenu de la cellule " & ActiveCell.Address
        End If
    End Sub
    On peut imaginer limiter cette détection uniquement à une zone précise de l'onglet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error GoTo fin
        If Intersect(ActiveCell, Range("mazone")) = "" Then
            MsgBox "vous venez de supprimer le contenu de la cellule " & ActiveCell.Address
        End If
    fin:      Exit Sub
    End Sub

    après la suppression de ligne est triviale si le critère est objectivable facilement à partir de la ligne ou de la colonne de la cellule supprimée.
    Il suffit de remplacer la msgbox par le code de suppression de la ligne voulue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sheets("Historik").rows(moncritère).delete

Discussions similaires

  1. créer une macro en fonction d'une ligne particulière
    Par antfo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/03/2010, 17h22
  2. [XL-2003] Supprimer une ligne en fonction d'une valeur de cellule
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 02/09/2009, 17h20
  3. Réponses: 1
    Dernier message: 10/02/2008, 19h56
  4. Réponses: 11
    Dernier message: 10/03/2007, 02h01
  5. Recherche une ligne en fonction d'une date
    Par c+cool dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 20/09/2006, 15h30

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