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 :

Formulaire de suppression


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2022
    Messages : 15
    Par défaut Formulaire de suppression
    Bonsoir, je viens de m'inscrire ici d'après les conseils de mon père, d'après lui vous pouvez m'être d'une grande aide !
    Alors je vous explique mon problème, j'ai un devoir pour mon école et il me faut créer plusieurs formulaires en VBA qui permettront de remplir un tableau excel.

    Le sujet porte sur une association de voyage, j'ai donc 2 feuilles importantes, Clients et Séjour
    Il faut que je crée un formulaire pour rajouter un client (je l'ai fait)
    Un formulaire pour rajouter un séjour (je l'ai fait)
    Un dernier formulaire pour supprimer un séjour (il me pose problème)

    J'ai décidé d'attaquer le problème en selectionnant l'ID d'un client, ce qui affichera son nom dans une textbox,
    et j'ai également 2 combobox me permettant de sélectionner la semaine début et fin.

    J'arrive à récupérer les dates de toutes les réservations (peu importe l'id que j'ai rentré précédemment)
    mais pas uniquement celle attribué à l'ID que j'ai choisis.

    J'ai réussis à mettre sur papier mon problème qui est :
    "récupérer les valeurs de la colonne "Début" où les lignes de la colonne "IDclient" sont égales à la ComboBox1"

    Je vous joint mon fichier si vous avez besoin de voir de quoi je parle.

    Merci infiniment, je ne poste jamais sur des forums, le temps de réponse me parait interminable mais cette fois-ci j'ai de l'avance donc je me permet !
    Passez une bonne journée/soirée
    Fichiers attachés Fichiers attachés

  2. #2
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme beaucoup de contributeurs, je n'ouvre pas les fichiers joints. Une bonne explication avec une illustration des données est largement suffisante

    Votre liste de données "Séjour" est elle un tableau structuré ?
    Dans l'affirmative, c'est relativement simple

    Un tableau nommé t_Sejour,
    • Un Userform nommé UserForm1, comprenant
    • un ListBox nommé lst_Sejour
    • un CommandButton nommé cmd_Delete
    • une variable publique RngData
    • une procédure publique DeleteButton_Visible permettant d'afficher ou masquer le bouton cmd_Delete


    Le code de la procédure à placer dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Sub Main()
      With UserForm1
       Set .RngData = Range("t_Sejour")
      .lst_Sejour.List = .RngData.Value
      .lst_Sejour.ColumnCount = .RngData.Columns.Count
      .DeleteButton_Visible
      .Show
       Set .RngData = Nothing
      End With
    End Sub
    Code du UserForm
    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
    Public RngData As Range
    Private Sub cmd_Delete_Click()
      If MsgBox("Voulez-vous supprimer cet enregistrement ?", vbExclamation + vbYesNo + vbDefaultButton2) = vbYes Then
       RngData.ListObject.ListRows(Me.lst_Sejour.ListIndex + 1).Delete ' Suppression de la ligne sélectionnée
       Me.lst_Sejour.List = RngData.Value                              ' Refresh list
       DeleteButton_Visible
      End If
    End Sub
    Private Sub lst_Sejour_Click()
      DeleteButton_Visible
    End Sub
    Sub DeleteButton_Visible()
      With Me
      .cmd_Delete.Visible = .lst_Sejour.ListIndex > 0
      End With
    End Sub
    Ceci n'est qu'un exemple. Personnellement, je ferais un seul formulaire gérant la consultation, la création, la modification et la suppression. Ce que l'on appelle un CRUD

    Illustration
    Nom : 220311 dvp Delete Row.png
Affichages : 250
Taille : 39,3 Ko
    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

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2022
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mars 2022
    Messages : 15
    Par défaut
    Bonjour, veuillez m'excusez, il est vrai qu'ouvrir un fichier sur internet est dangereux, voici le code complet

    Tout d'abord voici le tableau :
    Nom : image_2022-03-11_103457.png
Affichages : 228
Taille : 22,9 Ko

    Le code maintenant :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Private Sub UserForm_initialize()
    Sheets("Séjours").Activate
    Dim J As Long
    Dim I As Integer
     
     Set Ws = Sheets("Séjours") 'Correspond au nom de votre onglet dans le fichier Excel
     
    ComboBox1.Clear 'remise à zéro
        For J = 2 To Range("A65536").End(xlUp).Row
            ComboBox1 = Range("A" & J) 'récupère les données de la colonne A
            '...et filtre les doublons
            If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Range("A" & J)
        Next J
    Trier ComboBox1, False '
     
    'Cela récupère les id de la colonne A et les tries par ordre numériques
     
     
     
    End Sub
     
    'Pour le bouton Valider
    Private Sub CommandButton3_Click()
    TextBox1 = Worksheets("Clients").Range("B" & ComboBox1 + 1).Value
     
    ComboBox2.Clear 'remise à zéro
        For J = 2 To Range("D65536").End(xlUp).Row
            ComboBox2 = Range("D" & J) 'récupère les données de la colonne D
            '...et filtre les doublons
            If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Range("D" & J)
        Next J
     
    ComboBox3.Clear 'remise à zéro
        For J = 2 To Range("E65536").End(xlUp).Row
            ComboBox3 = Range("E" & J) 'récupère les données de la colonne E
            '...et filtre les doublons
            If ComboBox3.ListIndex = -1 Then ComboBox3.AddItem Range("E" & J)
        Next J
     
    'ici j'utilise le même code pour récupérer les valeurs de la colonne D et E (début et fin)
     
    End Sub
     
     
    'Pour le bouton Quitter
     
    Private Sub CommandButton2_Click()
     
       Unload Me
     
    End Sub
    Ce que j'aimerai idéalement (et que j'ai déjà essayer) c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ComboBox2.Clear 'remise à zéro
        For J = 2 To Range("D65536").End(xlUp).Row
            ComboBox2 = Range("D" & ComboBox1) 'récupère les données de la colonne D
            '...et filtre les doublons
            If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Range("D" & ComboBox1)
        Next J
    Malheureusement soit cela ne fonctionne pas, soit ça me récupère les valeurs de la colonne D mais la ligne 1 (soit "Début")

    Pour vous répondre, mon sujet m'impose le fait d'utiliser plusieurs formulaires
    J'essaierai d'implémenter votre code au miens et je vous donnerai un retour

    J'espère avoir été plus clair, merci pour votre réactivité !

  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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je vous conseille vivement de passer à l'usage des tableaux structurés bien plus simple à gérer.
    Cela vous évitera d'utiliser les codes vieillots tels que For J = 2 To Range("A65536").End(xlUp).Row

    Pour alimenter un ComboBox ou ListBox, il me semble plus simple pour ce cas précis d'utiliser la propriété List du contrôle plutôt que la méthode Add qui vous oblige à utiliser une boucle

    Tutoriels à lire éventuellement
    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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/06/2009, 10h34
  2. [ODBC] [Access] Formulaire de suppression
    Par bidule123456 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 08/08/2007, 11h11
  3. formulaire de suppression de données
    Par bidule123456 dans le forum Langage
    Réponses: 10
    Dernier message: 24/07/2007, 14h00
  4. Problème avec formulaire de suppression d'entrée
    Par mickado dans le forum Langage
    Réponses: 19
    Dernier message: 18/04/2007, 18h12
  5. Réponses: 8
    Dernier message: 01/06/2006, 10h21

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