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 :

Alimenter base de données à partir d'un userform avec des conditions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juin 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juin 2016
    Messages : 2
    Par défaut Alimenter base de données à partir d'un userform avec des conditions
    Bonjour tout le monde,
    Je viens de découvrir ce forum et je trouve que les gens sont très sympas et disponibles, ce qui m'a encouragé à poster ce problème.
    Vu que je suis débutant en vba, je me suis basé sur plusieurs échanges dans le forum afin de réaliser un projet en vba dans le cadre de mon master.
    Je dois rendre le travail demain soir, mais j'ai peur de ne pas pouvoir le finir avant.
    J'ai eu plusieurs blocages avant.. ça me prend des heures pour pouvoir débloquer la situation.

    Ce que je souhaite faire, est de créer un fichier qui fonctionne comme les sites de co-voiturage. L'idée est de permettre aux utilisateurs, de se connecter en saisissant leur user et mdp puis pour les conducteurs ils doivent renseigner les données qui permettent d'alimenter la base de données. Les passagers n'ont que l'option d'afficher les trajet disponibles avec les horaires et les tarifs puis le nombre de places disponibles, ils doivent choisir un nombre de places à réserver inférieur aux places dispo, en validant la saisie la ligne doit être modifier.

    Pour le moment, je suis bloqué dans le userform des conducteurs :
    Je souhaite de pouvoir renseigner la bdd en fonctions des entrées du conducteur. Si le conducteur renseigne dans son userform des données qui existent déjà dans la bdd (son nom & prénom & ville départ & ville d'arrivée... il faut que les données soient les memes) alors lors de la validation c'est la ligne existante qui va être modifier. Si les données sont différentes (une des valeurs est différente), la validation doit alors permettre de créer une nouvelle ligne en bas.

    SVP si vous pouvez m'aider, je vient de mettre le document en question en pièce jointe.
    Pour le moment, je doit modifier le userform conducteur, afin de prendre en compte les règles de gestion que j'ai décrites en haut.

    Merci en avance.

    JeProjet VBA exam v4.xlsm

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Juin 2016
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Juin 2016
    Messages : 2
    Par défaut
    'Je veux récupérer l'indice de la ligne si les données renseignées par le conducteur dans le userform sont identiques à ceux lui correspandant dans la 'base de données (meme nom, immatricule, peris, villes départ et arrives et date et heure de départ). à partir de cette indice, quand on clique sur le 'bouton valider, la ligne sera modifiée en ce qui concerne la colonne de nombre de places disponibles.
    'Si une valeur est différente, alors on doit écrire une nouvelle ligne avec les données renseignées dans le userform.
    'Le code pour cette partie est le suivant:

    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
    53
    54
    55
    56
    Private Sub bt_ok_Click()
     
    lr = Ws.Cells(Rows.Count, 1).End(xlUp).Row + 1 'récuperer la derniere ligne vide
    ligne_cible = lr ' la ligne cilbe dans le cas où les données existent dans la bdd
     
    ' vérifier si les données existent déjà dans la BDD
        For a = 2 To DCLA
        If Me.nom = Ws.Cells(a, 1) Then
            For b = 2 To DCLA
            If Me.prénom = Ws.Cells(b, 2) Then
                For c = 2 To DCLA
                If Me.Type_véhicule = Ws.Cells(c, 3) Then
                    For d = 2 To DCLA
                    If Me.immatricule = Ws.Cells(d, 4) Then
                        For e = 2 To DCLA
                        If Me.Npermis = Ws.Cells(e, 5) Then
                            For f = 2 To DCLA
                            If Me.Ville_de_départ = Ws.Cells(f, 6) Then
                                For g = 2 To DCLA
                                If Me.Ville_arrivée = Ws.Cells(g, 7) Then
                                    For i = 2 To DCLA
                                    If Me.Date_de_départ = Ws.Cells(i, 9) Then
                                        For j = 2 To DCLA
                                        If Me.heure_de_départ = Ws.Cells(j, 10) Then ligne_cible = j
                                        Else: ligne_cible = lr
                                        End If
                                        Next j
                                    End If
                                    Next i
                                End If
                                Next g
                            End If
                            Next f
                        End If
                        Next e
                    End If
                    Next d
                End If
                Next c
            End If
            Next b
        End If
        Next a
     
    'Ecriture des données dans la BDD
    Ws.Cells(ligne_cible, 1) = Me.nom
    Ws.Cells(ligne_cible, 2) = Me.prénom
    Ws.Cells(ligne_cible, 3) = Me.Type_véhicule
    Ws.Cells(ligne_cible, 4) = Me.immatricule
    Ws.Cells(ligne_cible, 5) = Me.Npermis
    Ws.Cells(ligne_cible, 6) = Me.Ville_de_départ
    Ws.Cells(ligne_cible, 7) = Me.Ville_arrivée
    Ws.Cells(ligne_cible, 8) = Me.places_disponible
    Ws.Cells(ligne_cible, 9) = CDate(Me.Date_de_départ)
    Ws.Cells(ligne_cible, 10) = CDate(Me.heure_de_départ)
    Ws.Cells(ligne_cible, 11) = Me.Tarif
    Bonjour,
    Je viens de trouver cette solution mais le programme ne prend pas en compte toute les conditions dans la boucle while !!! il ne prend que les deux première :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x = 2
    While x < lr And Me.nom <> Ws.Cells(x, 1) And Me.nom <> Ws.Cells(x, 1) And Me.prénom <> Ws.Cells(x, 2) And Me.Type_véhicule <> Ws.Cells(x, 3) And Me.immatricule <> Ws.Cells(x, 4) And Me.Npermis <> Ws.Cells(x, 5) And Me.Ville_de_départ <> Ws.Cells(x, 6) And Me.Ville_arrivée <> Ws.Cells(x, 7) And CDate(Me.Date_de_départ) <> Ws.Cells(x, 9) And Me.heure_de_départ <> Ws.Cells(x, 10)
    x = x + 1
    Wend
    If x = lr Then ligne_cible = lr Else ligne_cible = x

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/04/2015, 11h22
  2. Réponses: 1
    Dernier message: 23/02/2015, 15h31
  3. alimentation d'une base de données à partir de fichiers textes
    Par hb2ee dans le forum Persistance des données
    Réponses: 9
    Dernier message: 26/03/2009, 13h51
  4. [Conception] Alimenter une base de données à partir d'un fichier texte
    Par gharbi5 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/10/2007, 13h12
  5. Réponses: 5
    Dernier message: 24/03/2007, 15h00

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