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 :

Supprimer des données variables à partir d'un combobox


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Directeur RH
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur RH

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Points : 18
    Points
    18
    Par défaut Supprimer des données variables à partir d'un combobox
    Bonjour,

    je me permets de vous solliciter à nouveau pour finaliser un outil qui servira à construire des plannings.
    Les aides et conseils que j'ai déjà reçus par un membre du site m'ont permis d'arriver à un résultat au delà de mes espérances...
    J'ai réussi à faire la majorité des autres codes mais je bloque sur un combobox, je vous explique :

    Dans un userform (user), j'ai une combobox1 qui reprend des données dates ("dddd d mmmm yyyy") d'une feuille (PLANNING) de C2 à C1199.

    Sur le même userform (user) , j'ai un bouton de commande qui doit servir à supprimer les cellules (hrs de travail) de la colonne (D) à (G) mais à partir de la ligne au dessus de celle valider par le combobox et ce, jusqu'au début du planning, c'est à dire (D2: G2)

    Ex: si dans le combobox1 de l'userform (user), je valide le "1er Mars 2016" (cellule C164) alors sur la feuille "PLANNING", je supprime les cellules (D163: G163 à D2: G2)
    Les cellules (D2: G2) correspondent au début du planning (c'est à dire à la cellule C2 le 21 septembre 2015). On n'ira jamais au delà
    Dans ts les cas, lorsqu'on supprimera les cellules par le bouton de commande, cela sera toujours jusqu'au cellules (D2: G2).
    Je bloque sur le décalage de la ligne et surtout sur la boucle qui varie tout le temps.

    J'ai commencé avec ce code, que j'ai trouvé sur le site et je l'ai adapté (tenté) mais cela ne fonctionne pas, je pense que c'est normal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CommandButton11_Click()
    Dim i As Integer
    Dim Editeur As String
    Editeur = ComboBox1.Value
     
    With Sheets("PLANNING")
                For i = .Range("C" & .Rows.Count).End(xlUp).Row To 4
                            If .Range("C" & i).Value = Editeur Then
        Cells(i).Delete
        End If
       Next i
    End With
    End Sub
    Je pense qu'avec ce code, je supprime la ligne complète au dessus de celle validée par le combobox...

    Je vous remercie par avance pour votre aide et vos conseils
    N'hésitez pas à me dire si un fichier serait utile à la compréhension de la problématique.

    Danny

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Teste avec ce code, il te faudra peut être adapter au niveau de "ListIndex" avec + ou - mais normalement, comme je l'ai écris ça devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub CommandButton11_Click()
     
        Dim I As Integer
     
        With Sheets("PLANNING")
            .Rows("2:" & ComboBox1.ListIndex + 1).EntireRow.Delete
        End With
     
    End Sub

  3. #3
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Et de cette façon si tu veux ne supprimer que les cellules de la plage et pas les lignes entières :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub CommandButton11_Click()
     
        Dim I As Integer
     
        With Sheets("PLANNING")
            .Range("D2:G" & ComboBox1.ListIndex + 1).Delete xlShiftUp
        End With
     
    End Sub

  4. #4
    Membre à l'essai
    Homme Profil pro
    Directeur RH
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur RH

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Bonjour Theze,

    je te remercie encore une fois pour ta proposition
    Je pensais qu'on allait s'attaquer à un code de 15000 lignes (oui, j'ai fais un petit tour par Marseille) mais là ...
    Enfin, il m'annonce une erreur "1004"
    "Erreur définie par l'application ou par l'objet"

    Je ne pense pas que cela soit dû aux propriétés du combobox car je n'ai pas mis de code pour définir les valeurs dates de la feuille PLANNING.
    J'ai mis les valeurs du combobox dans la fenêtre propriété : Rowsource PLANNING!C2:C1199
    Je ne pense pas que cela est dû non plus aux modifs que j'ai apportées car tu verras qu'au final, il y a deux combobox, une qui définie la partie des cellules à supprimer au dessus de la date choisie et le second combobox pour supprimer les données en dessous de la date choisie, toujours à partir de la colonne D à G.

    Je te joins un fichier pour plus de facilité.
    Encore merci d'avance
    Bonne fin d'aprem à toi

    Danny

    Classeur1.xlsm

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    C'est ton formatage qui pose problème car tu modifie le texte du ComboBox et alors, il n'est plus dans la liste donc, ListIndex est égal à -1.
    Remplis tes ComboBox avec AddItem et tu formate à ce moment là (supprimes la valeur de la propriété RowSource) :
    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 UserForm_Initialize()
     
        Dim I As Long
     
        With Worksheets("PLANNING")
     
            For I = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
     
                ComboBox1.AddItem Format(.Cells(I, 3).Value, "dddd d mmmm yyyy")
                ComboBox2.AddItem Format(.Cells(I, 3).Value, "dddd d mmmm yyyy")
     
            Next I
     
        End With
     
    End Sub
    Par contre, si tu veux supprimer ce qu'il y a avant et après la plage bornée par les ComboBox, le code est plutôt comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub CommandButton11_Click()
     
        With Sheets("PLANNING")
     
              .Range("D2:G" & ComboBox1.ListIndex + 1).Delete xlShiftUp
              .Range("D" & (ComboBox2.ListIndex - ComboBox1.ListIndex) + 3 & ":G" & .Cells(.Rows.Count, 7).End(xlUp).Row).Delete xlShiftUp
     
        End With
     
    End Sub

  6. #6
    Membre à l'essai
    Homme Profil pro
    Directeur RH
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur RH

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Bonsoir Theze,

    merci pour ton retour
    J'ai bien saisi le problème de formatage, tu as raison mais avec AddItem, il ne reconnait plus la valeur date des combobox.
    J'ai bien enlevé les valeurs dans les propriétés RowSources mais si je supprime le code pour le formatage c'est à dire les codes suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ComboBox1_Change()
    ComboBox1.Value = Format(ComboBox1.Value, "dddd d mmmm yyyy")
    End Sub
     
    Private Sub ComboBox2_Change()
    ComboBox2.Value = Format(ComboBox2.Value, "dddd d mmmm yyyy")
    End Sub
    Les combobox affichent des date dans le déroulé mais des chiffres une fois choisis et non des dates

    En laissant les chiffres ds les combobox et en supprimant ces deux lignes de code, j'ai essayé et cela supprime les données à partir de la ligne 3 et tout ce qui est en dessous, quelles que soit la date (chiffres) que l'on définit dans les combobox.

    J'aurais également souhaité que cela garde le format du tableau de la feuille planning. L'objectif est de supprimer uniquement les valeurs en laissant le format du tableau (au cas ou il faudrait recommencer le planning...)
    J'ai essayé en remplaçant le "Delete" par "ClearContents" mais cela ne fonctionne plus

    L'idée est de valider des dates de début et dates de fin de la colonne C (dates) et de supprimer de la colonne D à G, les valeurs des cellules qui se trouvent juste au dessus de la date définie dans le combobox 1 (début du planning) et de supprimer les cellules qui se trouvent au dessous de la date définie dans le combobox 2 (fin du planning).

    Je te renvoie le fichier avec les codes que tu as envoyés pour que tu puisses voir le résultat.
    Désolé de ne pouvoir trouver une solution de mon coté
    Merci par avance


    Danny

    Classeur1 (Enregistré automatiquement).xlsm

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Je te renvoie le fichier avec les codes que tu as envoyés pour que tu puisses voir le résultat.
    Le code que je t'ai envoyé n'est pas "user_Initialize" mais "UserForm_Initialize". Le compilateur ne connais pas la procédure évènementielle "user_Initialize" et pour cause, ce n'en est pas une !
    D'autre part, il faut supprimer la valeur de RowSource "PLANNING!C2:C1199"
    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
     
    Private Sub UserForm_Initialize()
     
        Dim I As Long
     
        With Worksheets("PLANNING")
     
            For I = 2 To .Cells(.Rows.Count, 3).End(xlUp).Row
     
                ComboBox1.AddItem Format(.Cells(I, 3).Value, "dddd d mmmm yyyy")
                ComboBox2.AddItem Format(.Cells(I, 3).Value, "dddd d mmmm yyyy")
     
            Next I
     
        End With
     
    End Sub
     
    Private Sub CommandButton11_Click()
     
        With Sheets("PLANNING")
     
            .Range("D2:G" & ComboBox1.ListIndex + 1).ClearContents
            .Range("D" & (ComboBox2.ListIndex - ComboBox1.ListIndex) + 3 & ":G" & .Cells(.Rows.Count, 7).End(xlUp).Row).ClearContents
            'ou encore :
    '        .Range("D2:G" & ComboBox1.ListIndex + 1).Value = ""
    '        .Range("D" & (ComboBox2.ListIndex - ComboBox1.ListIndex) + 3 & ":G" & .Cells(.Rows.Count, 7).End(xlUp).Row).Value = ""
     
        End With
     
    End Sub

  8. #8
    Membre à l'essai
    Homme Profil pro
    Directeur RH
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur RH

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Bonsoir Theze,

    je ne sais pas comment m'excuser pour ces bourdes, que dis-je ces énormités que je t'ai envoyées hier
    J'ai un peu tout essayé hier soir (bon, il était tard avec le décalage horaire avec la réunion), mais bon toujours est-il que je t'ai envoyé en plus le fichier avec les propriétés de RowSources qui n'étaient pas modifiées , sorry !!

    En effet, cela marche beaucoup mieux du coup, j'ai fait un simple copier-coller de ton code en modifiant les propriétés RowSources.
    Il réside toujours un petit souci avec le combobox2 qui affiche bien les dates choisies mais une fois que l'on valide cela efface les données (dans la bonne plage D à G) mais à des dates qui ne correspondent pas à celles choisies.
    Après plusieurs essais, j'ai remarqué que plus la durée du planning est longue plus l'écart est important mais toujours en moins.
    Ex : si je choisis de débuter le planning le 1er mars 2016 et de le terminer le 28 février 2017, le code du combobox1 fonctionne bien et efface bien les cellules au dessus de la date choisie (1er mars 2016) mais le combobox2 les efface jusqu'au 19 septembre 2016 (comme si nous avions choisis ds le combobox2 le 20 septembre 2016).

    J'ai tenté quelques modifs dans la formule du combobox2 parce ce que je pense que cela est dû au "+3" après la soustraction des deux combobox (le 2-1) mais j'ai déjà dépassé depuis bien longtemps mon seuil de "Peters"
    Je vais arrêter de dire des énormités et te laisser juger par toi même.
    Au pire cela vient peut être encore de mon coté, so !!

    J'ai oublié de te dire qu'en modifiant le ClearContents par "", on efface tout quelque soit les dates que l'on choisi... cela fonctionne avec le ClearContents, donc pas de prise de tête

    Classeur2.xlsm
    Merci d'avance
    Bonne soirée

    Danny

  9. #9
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Là, c'est moi qui me suis foutu dedans, désolé ! (Je ne sais pas pourquoi je suis allé ôter l'index du ComboBox1 ???)
    Teste avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub CommandButton11_Click()
     
        With Sheets("PLANNING")
     
            .Range("D2:G" & ComboBox1.ListIndex + 1).ClearContents
            .Range("D" & ComboBox2.ListIndex + 3 & ":G" & .Cells(.Rows.Count, 7).End(xlUp).Row).ClearContents
     
        End With
     
    End Sub

  10. #10
    Membre à l'essai
    Homme Profil pro
    Directeur RH
    Inscrit en
    Septembre 2015
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur RH

    Informations forums :
    Inscription : Septembre 2015
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Bonjour Theze,

    je n'ai pas pu m’empêcher d'essayer le fichier au bureau avec la dernière modif et là magie ! cela fonctionne du feu de dieux... (comme d'hab)
    Je te remercie infiniment d'avoir passer tout ce temps et sans ton aide je ne serais jamais arrivé où j'en suis... Cet outil va nous faire gagner un temps fou dans la construction des planning des salariés (plus d'une cinquantaine) et qui changent souvent.
    A part mettre résolu et , n'hésites pas à me dire comment te remercier pour tout ce travail, car c'est un vrai boulot même si cela te parait anodin / aux facilités que tu as
    Si tu viens un jour à la réunion, profiter du soleil et bien ...bienvenue !!
    encore merci

    A bientôt
    Danny

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

Discussions similaires

  1. supprimer des données Excel à partir de MATLAB
    Par Nab18 dans le forum MATLAB
    Réponses: 2
    Dernier message: 16/05/2013, 16h33
  2. Réponses: 2
    Dernier message: 29/08/2011, 16h27
  3. Réponses: 1
    Dernier message: 28/03/2010, 10h06
  4. Réponses: 1
    Dernier message: 30/05/2007, 15h51
  5. Supprimer des données dans un xml
    Par pingoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 49
    Dernier message: 12/08/2004, 16h49

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