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 une ligne à partir d'un combobox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Par défaut Supprimer une ligne à partir d'un combobox
    Bonjour,
    Alors voila mon problème, j'ai 2 feuilles, une nommé"livraison", l'autre nommée "livreur1".Ma combobox se nomme"cbxaffectation"
    Donc j'ai créer une form que j'ai nommé frmaffectation et dedans j'ai mis des boutons (livreur1, livreur2 etc...). Quand je clique sur le bouton livreur1 je me dirige vers une autre form nommé frmlivreur1
    La j'ai installé une combobox et j'ai fait le code ci dessous. Grâce à celui ci je peux choisir une ligne dans la feuille livraison et la copier(ou du moins les données qui m’intéressent) dans la feuille livreur1.

    Tout cela marche, mais en plus j'aimerai faire 2 actions :
    -effacer la ligne dans la feuille "livraison"que j'ai copier dans la feuille "livreur1" et faire en sorte que la ligne vide dans "livraison" soit comblé par les lignes en dessous

    -Il suffit qu'un livreur clique sur la mauvaise ligne dans la combobox pour que tout se détraque, donc mettre un message au moment ou le livreur sélectionne la ligne dans la combo box avec une obligation de validation pour que l'action de copie se fasse. ex:
    étape 1 clique que la ligne de la combobox
    étape 2 message: valider oui non
    étape 3 si oui copier dans la feuille "livreur1", si non combobox = ""

    Je ne sais pas du tout comment m'y prendre sur ce coup la.
    Merci pour votre aide, Cordialement

    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
    36
    37
     
    Private Sub cbxaffectation_Change()
    Dim numlignevide As Integer
    Worksheets("livreur1").Activate
    With Worksheets("livreur1")
    numlignevide = ActiveSheet.Columns(1).Find("").Row
     Debug.Print Me.cbxaffectation.ListIndex + 1
     .Cells(numlignevide, 1) = Worksheets("livraison").Cells(Me.cbxaffectation.ListIndex + 2, 1)
     .Cells(numlignevide, 2) = Worksheets("livraison").Cells(Me.cbxaffectation.ListIndex + 2, 2)
     .Cells(numlignevide, 3) = Worksheets("livraison").Cells(Me.cbxaffectation.ListIndex + 2, 4)
     End With
     
     
    End Sub
     
    Private Sub Cmdok_Click()
     
    cbxaffectation.Text = ""
    frmlivreur1.Hide
    Worksheets("facture").Activate
     
    End Sub
     
    Private Sub userform_Initialize()
     Dim tblSrce As String
     
     With Worksheets("livraison")
      tblSrce = .Name & "!" & Range(Cells(300, 1), Cells(.Range("A1:A300").End(xlDown).Row, .Range("A1:A300").End(xlToRight).Column)).Address
     End With
     With Me.cbxaffectation
     .ColumnHeads = True
     .ColumnCount = 1
     .ColumnWidths = "60;60;80"
     .RowSource = tblSrce
     End With
     
    End Sub

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Effacer la ligne dans la feuille "livraison"que j'ai copier dans la feuille "livreur1" et faire en sorte que la ligne vide dans "livraison" soit comblé par les lignes en dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("livraison").Rows(cbxaffectation.ListIndex + 2).Delete
    mettre un message au moment ou le livreur sélectionne la ligne dans la combo box avec une obligation de validation pour que l'action de copie se fasse. ex:
    étape 1 clique que la ligne de la combobox
    étape 2 message: valider oui non
    étape 3 si oui copier dans la feuille "livreur1", si non combobox = ""
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        If MsgBox("Faire la copie ?", vbInformation + vbYesNo, "Copier ?") = vbYes Then
            'copier dans la feuille "livreur1"
        Else
            'combobox = ""
        End If

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Par défaut suppression ligne avec combobox
    Rebonjour, merci pour votre réponse, cela marche effectivement, ça supprime dans la feuille "livraison" et ça remonte mais ça provoque un débogage avec l'expression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numlignevide = ActiveSheet.Columns(1).Find("").Row
    J'ai essayé de placer votre code sous différentes forme et à des endroits qui me semblaient logique. Je ne comprends pas pourquoi ces deux expressions rentrent en conflits.
    D'autre part j'ai placé le message de validation comme suit :

    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
    36
    37
    38
    39
    Private Sub cbxaffectation_Change()
    Dim numlignevide As Integer
    Worksheets("livreur1").Activate
    With Worksheets("livreur1")
     If MsgBox("Faire la copie ?", vbInformation + vbYesNo, "Copier ?") = vbYes Then
    numlignevide = ActiveSheet.Columns(1).Find("").Row
     Debug.Print Me.cbxaffectation.ListIndex + 1
     .Cells(numlignevide, 1) = Worksheets("livraison").Cells(Me.cbxaffectation.ListIndex + 2, 1)
     .Cells(numlignevide, 2) = Worksheets("livraison").Cells(Me.cbxaffectation.ListIndex + 2, 2)
     .Cells(numlignevide, 3) = Worksheets("livraison").Cells(Me.cbxaffectation.ListIndex + 2, 4)
    Else
     cbxaffectation = ""
        End If
     End With
     
    End Sub
     
    Private Sub Cmdok_Click()
     
    cbxaffectation.Text = ""
    frmlivreur1.Hide
    Worksheets("facture").Activate
     
    End Sub
     
    Private Sub userform_Initialize()
     Dim tblSrce As String
     
     With Worksheets("livraison")
      tblSrce = .Name & "!" & Range(Cells(300, 1), Cells(.Range("A1:A300").End(xlDown).Row, .Range("A1:A300").End(xlToRight).Column)).Address
     End With
     With Me.cbxaffectation
     .ColumnHeads = True
     .ColumnCount = 1
     .ColumnWidths = "60;60;80"
     .RowSource = tblSrce
     End With
     
    End Sub
    Cela marche effectivement lorsque je selectionne dans ma combobox, avant de cpoier j'ai le message, mais il me le demande une deuxieme fois lorsque je clique sur mon boutton "cmdok"

    Je vais continuer à essayer d'autre solution en espérant trouver ou que vous m'aidiez à nouveau
    Cordialement

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Utilises-tu la propriété RowSource pour alimenté ta liste ?
    Pourquoi utilises-tu cette commande pour chercher une cellule vide ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numlignevide = ActiveSheet.Columns(1).Find("").Row
    Pour ma part, j'utilise une variable objet pour définir la plage avec laquelle je travaille et chaque fois qu'il y a une ligne supprimée ou ajoutée, je reaffecte la nouvelle valeur à la variable objet.
    Avec par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set maPlage = sht.Range("A1").CurrentRegion
    Ainsi ta prochaine ligne vide est égale à
    (Attention code tapé de mémoire)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Re,

    Ci-dessous une version de traitement sans find.

    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
    Private Sub cbxaffectation_Change()
     
        'Test si cbxaffectation_Change déjà en cours
        If cbxaffectation.Tag = "1" Then Exit Sub
     
        cbxaffectation.Tag = "1"
        Dim seletedLine As Long: seletedLine = cbxaffectation.ListIndex + 2
        Dim numlignevide As Integer
        With Worksheets("livraison")
            .Activate
            .Cells(seletedLine, 1).Resize(1, 4).Select
            If MsgBox("Faire la copie ?", vbInformation + vbYesNo, "Copier ?") = vbYes Then
                With Worksheets("livreur1")
                    .Activate
                    numlignevide = .Range("A" & .Rows.Count).End(xlUp).Row
                    Debug.Print cbxaffectation.ListIndex + 1
                    .Cells(numlignevide, 1) = Worksheets("livraison").Cells(seletedLine, 1)
                    .Cells(numlignevide, 2) = Worksheets("livraison").Cells(seletedLine, 2)
                    .Cells(numlignevide, 3) = Worksheets("livraison").Cells(seletedLine, 4)
                End With
                Worksheets("livraison").Rows(seletedLine).Delete
            Else
                cbxaffectation.Text = ""
            End If
        End With
     
        cbxaffectation.Tag = "0"
     
    End Sub
    P.S. : Evite les sujets en doublons, et les MP copiant les posts ...

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2012
    Messages : 161
    Par défaut
    Oui désolé pour les doublons, je me suis perdu dans les post.

    En fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numlignevide = ActiveSheet.Columns(1).Find("").Row
    me permet decopier dans la première ligne vide de la feuille "livreur1". Cela permet d'ajouter sans cesse à la suite les informations.
    C'est un logiciel de prise de commande avec affectation des livreurs que je suis en train de développer.
    Donc j'ai ma page d'accueil ou je prends les commandes, quand je sélectionne livraisons les informations vont dans la feuilles 'livraisons", donc pour chaque commande en livraison prise une ligne s'ajoute dans la feuille "livraison".
    Ainsi quand le livreur arrive il s'affecte grâce à la liste dans la feuille"livraison" et la livraison qu'il a choisit se copie dans la feuille "livreur1" (si c'est le livreur 1 qui s'est affecté.
    Pour éviter toute erreurs il faut donc que lorsque le livreur s'affecte la ligne à laquelle il s'est affecté s'efface dans la feuille "livraison"

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

    Les deux premiers code que vous m'avez envoyé marchaient bien juste il y'a ce problème avec le "numlignevide" et la double demande de validation.

    Pour le deuxième message, le code ne marche pas

    Cordialement

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    le code ne marche pas
    Qu'est ce qui ne marche pas (message d'erreur ? comportement ?)

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

Discussions similaires

  1. Supprimer une ligne via macro à partir d'une colonne donnée
    Par muzele dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2012, 10h47
  2. Réponses: 3
    Dernier message: 24/04/2012, 18h39
  3. Supprimer une ligne a partir d'un fichier texte
    Par Msysteme dans le forum C#
    Réponses: 10
    Dernier message: 23/06/2009, 17h05
  4. [VBA-E] Supprimer des lignes à partir d'une variable tableau
    Par humbp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2008, 08h09
  5. [Conception] Supprimer une ligne d'un tableau à partir d'un CHECKBOX
    Par snakejl dans le forum PHP & Base de données
    Réponses: 71
    Dernier message: 30/05/2006, 08h43

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