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 :

Modification automatique éléments base de donnée [XL-2010]


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
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 48
    Par défaut Modification automatique éléments base de donnée
    Bonjour,

    Je suis à ce jour en train de créer un petit "logiciel" sur Excel comprenant 2 bases de données et permettant d'en faire la gestion (Consulter / Modifier / Supprimer).
    J'ai une première base nommée EDF (Dans l'exemple) où j'ai des numéros de compteurs associés à un N°Armoire, Adresse, Type, Puissance
    Une seconde base nommée RELEVES où j'ai N°Armoire, Date, Compteur, Type, Consommation

    Lorsque j'appuie sur le bouton TEST, je me retrouve avec un Userform1 muni d'une ComboBox permettant de choisir une Armoire ce qui ensuite détermine si le numéro de compteur associé à cette armoire dans la BDD "COMPTEUR" est le même que celui de la BDD "RELEVES" ou non. Si non, un message (Problème N°Compteur) dans la Textbox apparaît en rouge et quand on rentre dans cette TextBox, un Userform2 s'ouvre afin de faire le choix du bon numéro de compteur.

    Jusque là tout va bien (Si ce n'est que lorsque je n'ai pas l'armoire dans la BDD "RELEVES", le message apparaît quand même, à voir dans le fichier en pièce jointe)

    Dans ce Userform2 on retrouve, le numéro de compteur EDF / le numéro de compteur RELEVES / Un numéro autre qui peut être renseigné par l'utilisateur. Chacun associé à une checkbox.
    Lorsque je sélectionne une checkbox par exemple celle du numéro de compteur EDF, à la validation, ce numéro apparaît dans le Userform1 et j'aimerais que cela modifie également tout les numéro de la base de donnée associée. (Expliqué en commentaire dans le code)

    Je ne sais pas si c'est vraiment clair, je pense que le fichier exemple avec mon code sera très utile pour comprendre.

    Je vous remercie d'avance pour votre aide et je suis également preneur des critiques et améliorations possibles de mon code en parallèle de ce problème
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Ton plus gros problème, c'est que presque personne n'ouvre les pièces jointes balancées avec la première question. Surtout, surtout, les fichiers de macros.

    L'autre problème, tu vas comprendre en lisant la dernière ligne de ma signature. Et, si tu décides de ne pas me croire, tu te diriges, lentement mais sûrement vers l'usine à gaz.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 48
    Par défaut
    Mon plus gros problème c'est que la dernière fois que j'ai respecté les règles du forum et que je n'ai pas mis de pièce jointe à mon explication, ont m'a répondu rapidement que sans pièce jointe et sans code, il était presque impossible de faire quelque chose et de tenter de solutionner mon problème, d'où ici, le fichier en pièce jointe avec mon premier message.
    Et je pense d'ailleurs fortement que sans fichier avec mon explication, il est très compliqué de me diriger vers une quelconque solution et de comprendre clairement la situation.

    Concernant ta dernière phrase, je ne sais pas si je dois le croire ou non, c'est un autre débat ! C'est très certainement probable mais je me suis lancé dedans, à moi de faire que les tuyaux, les manivelles et l'aspect de mon usine soit les moins complexe possible..

    Je me suis d'ailleurs trompé de fichier donc pour le coup le premier ne servira à rien..

    Voici le bon fichier !
    Fichiers attachés Fichiers attachés

  4. #4
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour,

    Pour commencer, je suis à 100% d'accord avec clementmarcotte. Lors de l'ouverture d'un nouveau sujet, voilà la meilleure façon de procéder :
    1) Donner un titre à son problème
    2) Expliquer son problème
    3) Préciser le contexte du problème
    4) Maintenant que l'on connait le problème et le contexte, donner des précisions sur le problème
    5) Présenter le bout de code correspondant.
    6) Si tu l'estimes nécessaire, ajoute ton fichier en pièce jointe.

    A savoir que plutôt qu'un fichier en pièce jointe, il est préférable d'avoir de bonnes explications, si nécessaire accompagnées d'images, et le code qui va avec évidemment. Il arrive que lors de sujets complexes ce ne soit pas suffisant et que l'on demande de mettre un fichier en pièce jointe (cas plutôt rare). Mais même dans ce cas, il vaut mieux que le fichier en pièce jointe soit au format .xls ou .xlsx (et pas .xlsm).

    Maintenant nous attendons ton code avec plaisir

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 48
    Par défaut
    Voici donc mon code, les explications sont déjà dans mon premier post !

    Voici mon userform 1 :

    Nom : Capture.PNG
Affichages : 96
Taille : 7,8 Ko

    Avec le code associé :

    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
     
    Option Explicit
    Dim Ws As Worksheet
    Dim Compteur_Relevés As Object
    Dim Compteur_EDF As Object
     
    Private Sub UserForm_Initialize()
     
        Dim j As Long
        Dim i As Integer
     
     
        Set Ws = Sheets("Feuil1") 'Correspondant au nom de l'onglet dans le fichier Excel'
        With Me.ComboBox1
            For j = 3 To Ws.Range("B" & Rows.Count).End(xlUp).Row
            .AddItem Ws.Range("B" & j)
            Next j
        End With
     
     
     
        Set Compteur_EDF = CreateObject("scripting.dictionary")
        With Sheets("Feuil1")
        For i = 3 To .[a65000].End(xlUp).Row: Compteur_EDF(.Cells(i, 2).Value) = .Cells(i, 1).Value: Next i
        End With
     
        Set Compteur_Relevés = CreateObject("scripting.dictionary")
        With Sheets("Feuil2")
        For i = 3 To .[a65000].End(xlUp).Row: Compteur_Relevés(.Cells(i, 1).Value) = .Cells(i, 3).Value: Next i
        End With
     
    End Sub
     
    Private Sub ComboBox1_Change()
     
    Me.TextBox1.Text = Compteur_Relevés(Me.ComboBox1.Text)
     
    If TextBox1.Text <> Compteur_EDF(Me.ComboBox1.Text) Then
        Me.TextBox1.ForeColor = RGB(255, 0, 0)
        Me.TextBox1.Text = "Problème N° Compteur (?)"
        Else
        Me.TextBox1.Text = Compteur_Relevés(Me.ComboBox1.Text)
        Me.TextBox1.ForeColor = RGB(0, 0, 0)
    End If
    End Sub
     
    Private Sub TextBox1_Enter()
    MsgBox "Numéro de compteur indiqué par EDF : " & Compteur_EDF(Me.ComboBox1.Text) & Chr(10) & "Numéro de compteur d'après les relevés : " & Compteur_Relevés(Me.ComboBox1.Text)
    UserForm2.Show
    End Sub
    Et mon Userform 2 :

    Nom : Capture2.PNG
Affichages : 194
Taille : 14,8 Ko

    Et son code :

    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
     
    Option Explicit
    Dim Ws As Worksheet
    Dim Compteur_EDF As Object
    Dim Compteur_Relevés As Object
     
     
    Private Sub UserForm_Initialize()
     
        Dim i As Integer
     
        Set Compteur_Relevés = CreateObject("scripting.dictionary")
        With Sheets("Feuil2")
        For i = 3 To .[a65000].End(xlUp).Row: Compteur_Relevés(.Cells(i, 1).Value) = .Cells(i, 3).Value: Next i
        End With
     
        Set Compteur_EDF = CreateObject("scripting.dictionary")
        With Sheets("Feuil1")
        For i = 3 To .[a65000].End(xlUp).Row: Compteur_EDF(.Cells(i, 2).Value) = .Cells(i, 1).Value: Next i
        End With
     
        TextBox1.Text = UserForm1.ComboBox1.Text
     
    End Sub
     
    Private Sub TextBox1_Change()
     
    TextBox2.Value = Compteur_EDF(Me.TextBox1.Text)
    TextBox3.Value = Compteur_Relevés(Me.TextBox1.Text)
     
    End Sub
     
    Private Sub CommandButton1_Click()
     
    If CheckBox1.Value = True Then
    UserForm1.TextBox1.Value = TextBox2.Value
    UserForm1.TextBox1.ForeColor = RGB(0, 0, 0)
    'Et modifier les données correspondantes dans la base de donnée RELEVES ?????
    End If
     
    If CheckBox2.Value = True Then
    UserForm1.TextBox1.Value = TextBox3.Value
    UserForm1.TextBox1.ForeColor = RGB(0, 0, 0)
    'Et modifier les données correspondantes dans la BDD COMPTEUR ?????
    End If
     
    If CheckBox3.Value = True Then
    UserForm1.TextBox1.Value = TextBox4.Value
    UserForm1.TextBox1.ForeColor = RGB(0, 0, 0)
    'Et modifier les données correspondantes dans les deux BDD COMPTEUR + RELEVES ?????
    End If
     
    Unload UserForm2
     
    End Sub

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

Discussions similaires

  1. Modification automatique de base de donnée
    Par hakan37 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/08/2015, 22h56
  2. suppression élément base de données
    Par momomafioso dans le forum ASP.NET
    Réponses: 24
    Dernier message: 15/06/2007, 14h40
  3. [MySQL] installation automatique des bases de données
    Par Angelik dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/01/2007, 13h38
  4. [VB.net 2003] Annuler les dernieres modifications d'une base de donnée
    Par winny107 dans le forum Accès aux données
    Réponses: 2
    Dernier message: 10/10/2006, 07h05
  5. Modification d'une base de donnée
    Par scorpion37 dans le forum C++Builder
    Réponses: 70
    Dernier message: 16/06/2006, 09h08

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