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 :

UserForm : Alimenter une base de données


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Employé administratif
    Inscrit en
    Février 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Employé administratif

    Informations forums :
    Inscription : Février 2014
    Messages : 77
    Points : 28
    Points
    28
    Par défaut UserForm : Alimenter une base de données
    Bonjour,

    Ci-joint, un exemple qui m'a permis de réaliser le modèle présenté ci-dessous :

    [B]Début EXEMPLE :
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    Private Sub FIN_Click()
    SaisieInfos.Hide
    End Sub
     
    Private Sub OK_Click()
    Dim Décalage As Integer
    'Vérification de la saisie des différentes informations'
    If NomPrenom = "" Or DateEmbauche = "" Or Salaire = "" Then
    MsgBox "VEUILLEZ SAISIR TOUTES LES INFORMATIONS"
    Else
    If TypeContrat <> "CDI" And DateFin = "" Then
    MsgBox "VEUILLEZ SAISIR LA DATE DE FIN DE CONTRAT"
    Else
    'Sélection de la feuille Données'
    Sheets("Salariés").Select
    'si la la base de données est vide, placer les informations à partir de A2'
    If Range("a2").Value = "" Then
    Décalage = 0
    Range("a2").Select
    Else
    'Positionnement sur curseur sur la première cellule vide
    Décalage = 1
    Position = Range("A1").End(xlDown).Address
    Range(Position).Select
    Range("A1").End(xlDown).Select
    End If
    'Mise à jour de la base de données
    ActiveCell.Offset(Décalage, 0).Range("a1").Select
    ActiveCell.Value = Usine
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.Value = Service
    ActiveCell.Offset(0, 1).Range("a1").Select
    ActiveCell.Value = NomPrenom
    ActiveCell.Offset(0, 1).Range("a1").Select
    ActiveCell.Value = TypeContrat
    ActiveCell.Offset(0, 1).Range("a1").Select
    ActiveCell.Value = CDate(DateEmbauche.Value)
    ActiveCell.Offset(0, 1).Range("a1").Select
    If TypeContrat <> "CDI" Then ActiveCell.Value = CDate(DateFin.Value)
    ActiveCell.Offset(0, 1).Range("a1").Select
    ActiveCell.Value = CCur(Salaire)
    'retour à la feuille Listes'
    Sheets("Listes").Select
    'Me.DateFin.Visible = False
    Me.EtiqDateFin.Visible = False
    NomPrenom = ""
    DateEmbauche = ""
    Salaire = ""
    DateFin = ""
    End If
    End If
    End Sub
     
    Private Sub TypeContrat_Change()
    If TypeContrat <> "CDI" Then
        'Me.DateFin.Visible = True
        Me.EtiqDateFin.Visible = True
    End If
    End Sub
     
    Private Sub UserForm_Activate()
    'alimenter la liste Usine'
    Dim DerUsine As String
    DerUsine = Range("G2").End(xlDown).Address
    Usine.RowSource = ("G2:") & DerUsine
    Usine.ListIndex = 0
    'alimenter la liste Service'
    Dim DerService As String
    DerService = Range("H2").End(xlDown).Address
    Service.RowSource = ("H2:") & DerService
    Service.ListIndex = 0
    'alimenter la liste TypeContrat'
    Dim DerTypeContrat As String
    DerTypeContrat = Range("I2").End(xlDown).Address
    TypeContrat.RowSource = ("I2:") & DerTypeContrat
    TypeContrat.ListIndex = 0
    'masquer le textBox DateFin et son étiquette'
    'Me.DateFin.Visible = False
    Me.EtiqDateFin.Visible = False
    End Sub
    Fin EXEMPLE



    Je me suis aidé de ce modèle pour réaliser ma macro, mais je n'arrive pas à résoudre ce problème :
    L'entête du tableau commence dans la cellule A2. La cellule A3 se remplie, mais seulement la cellule A3 (pas les suivantes).
    Je souhaiterais que si la cellule A3 est remplie, sélectionne A4 et remplie A4, si la cellule A4 et remplie, sélectionne A5 et remplie, etc...
    Qu'est-ce qui cloche par rapport à l'exemple ci-dessous, qui fonctionne comme je le souhaiterais.
    Je n'arrive pas à voir le problème.

    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
     
    Private Sub ANNULER_Click()
    'bouton ANNULER
    SaisieInfos.Hide 'cache le formulaire'
    End Sub
     
    Private Sub FERMER_Click()
    'Ferme le formulaire après demande de confirmation'
    If MsgBox("Confirmez-vous la fin de la saisie ?", vbQuestion + vbYesNo) = vbYes Then
    Unload Me 'supprime le formulaire de la mémoire'
    End If
    End Sub
     
    Private Sub OK_Click()
    'bouton OK
    Dim Décalage As Integer
    'Sélection de la feuille de données'
    Sheets("Données").Select
    'si la base de données est vide, placer les informations à partir de A2'
    If Range("A2").Value = "" Then
    Décalage = 0
    Range("A2").Select
    Else
    'positionnement sur curseur de la première cellule vide'
    Décalage = 1
    Position = Range("A1").End(xlDown).Address
    Range(Position).Select
    Range("A1").End(xlDown).Select
    End If
    'Mise à jour de la base de données'
    ActiveCell.Offset(Décalage, 0).Range("A1").Select
    ActiveCell.Value = Distributeur
    ActiveCell.Offset(0, 1).Range("A1").Select
    End Sub
     
    Private Sub Userform_Activate()
    'alimenter la liste Distributeur
    Dim DerDistributeur As String
    DerDistributeur = Range("B2").End(xlDown).Address 'définition de l'adresse du dernier Distributeur de la liste'
    Distributeur.RowSource = ("B2:") & DerDistributeur 'attribution des données source à la ComboBox Distributeur'
    Distributeur.ListIndex = 0 'sélection par défaut du premier élément de la liste'
    End Sub

    Quelqu'un peut-il corriger cette macro, dans le même type que l'exemple source ?
    Vous en remerciant par avance.

    Cordialement.

  2. #2
    Membre habitué
    Inscrit en
    Décembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 115
    Points : 180
    Points
    180
    Par défaut
    Bonjour
    Légèrement compliqué le code

    La sélection de la première ligne vide c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A65536").End(xlUp).Offset(1, 0).Select
    Et après, les décalages c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Mise à jour de la base de données
    Activecell.Value = Usine      'A tester sans le .Value, Excel 2003 ça commence à faire un moment
    ActiveCell.Offset(0, 1).Value = Service
    ActiveCell.Offset(0, 2).Value = Nomprenom
    etc...
    Cordialement

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 945
    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 : 12 945
    Points : 28 945
    Points
    28 945
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sauf erreur de ma part, cette question est similaire à celle posée sur cette autre discussion à laquelle j'ai déjà apporté une réponse hier matin.

Discussions similaires

  1. [XL-2003] UserForm : Alimenter une base de données en continu - Petit point sur macro à résoudre
    Par BtjpsspgrW dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/09/2014, 08h12
  2. alimenter une base de données en important automatiquement un fichier excel
    Par ApprentiDeveloppeur dans le forum Windows Forms
    Réponses: 2
    Dernier message: 02/04/2010, 07h58
  3. [AC-2007] Formulaire d'entrée pour alimenter une base de donnée
    Par vieux plongeur dans le forum IHM
    Réponses: 2
    Dernier message: 10/07/2009, 06h17
  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: 3
    Dernier message: 13/08/2006, 10h50

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