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

Excel Discussion :

Modifier un enregistrement d'une base de données


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Business Analyst
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 13
    Points
    13
    Par défaut Modifier un enregistrement d'une base de données
    Bonjour,

    Comment faire pour modifier un enregistremenr d'une base de donnée ?

    J'ai une feuil1 où je saisie les données de plusieurs lignes qui vont s'enregistrer dans la base de donnée ("onglet BDD"). Donc pour cela pas de problème je fais une macro qui va insérer des lignes sur la BDD en fonction du nombre de ligne saisie dans la feuill1 et ensuite les copier coller.
    Cependant grâce à ce forum, j'ai la possibilité maintenant par une macro qui va filtrer en fonction de 3 critères (Periode/Géographie/Code Produit) de charger les donnée dans la feuil1 à partir de la BDD pour les modifier.

    cependant si j'enregistre les données vont créer des doublons dans la BDD comment faire par VBA pour ecraser les données qui correspond au même 3 critères qui existe déjà dans la BDD et poser la possibilité de d'enregister si les données n'existe pas encore. Donc soit on modifie l'enregistrement (donc on vient écraser) soit on enregistre donc on enclenche la macro que j'ai déjà.

    Merci pour le coup de main.
    Ricoeva

  2. #2
    Membre à l'essai
    Homme Profil pro
    Business Analyst
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 13
    Points
    13
    Par défaut Le code Bricolé Help Please !
    Re-Bonjour,

    J'apporte d'avantage d'éléments afin de clarifier mon besoin:

    Donc l'idée du code est de:
    1ère partie Vérifier que les données n'existent pas dans la BDD (et c'est à partir de là que je bloque) si elle n'existe pas j'appelle par la fonction call la macro enregistrement sinon
    2ème partie si les données existe je fais ma selection par filtre et je copie colle les données de la partie Feuil 1 vers la partie Feuil2.

    Je vous laisse le fichier en pièce jointe, et le code en dessous si vous avez une idée de comment faire. Je pense que ma première partie est complètement fausse car rechercher une donnée par Find c'est simple mais 3 critère en même temps je ne sais pas faire. Mais j'essaye par différents moyen...

    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
    Sub Modification()
     
    Dim Ws As Worksheet
    Dim LastLig As Long
    Dim i As Byte
    Dim e As String
    Dim h As String
    Dim f As Long
    Dim t As Long
    Dim maSelect As Range
     
    Set maSelect = Sheets("Feuil1").Range("D" & s & ":" & "Q" & t)
    Set Ws = Worksheets("Feuil1")
    e = Sheet("Feuil1").Range("A2")
    h = Sheet("Feuil2").Range("B2")
    With Worksheets("BDD")
    For i = 3 To 13
    .Find.Ws.Range ("C" & i)
    Next i
    Set c = .Find(e, LookIn:=xlValues)
    Set e = .Find(h, LookIn:=xlValues)
     
    If Not c & e & i Is Nothing Then Call enregistrement
     
    Else
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        With .Range("A1:R" & LastLig)
            .AutoFilter Field:=1, Criteria1:=Ws.Range("A2")
            .AutoFilter Field:=2, Criteria1:=Ws.Range("B2")
            For i = 3 To 13
            .AutoFilter Field:=3, Criteria1:=Ws.Range("C" & i)
            If .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
                .Range("D2:Q" & LastLig).SpecialCells(xlCellTypeVisible).Copy.Range ("D" & i)
            Else
                Ws.Range("D" & i & ":Q" & i).ClearContents
            End If
        Next i
        End With
        .AutoFilterMode = False
    End With
    End If
     
    Set Ws = Nothing
    End Sub
    Fichiers attachés Fichiers attachés

  3. #3
    Membre à l'essai
    Homme Profil pro
    Business Analyst
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    j'essaye de procéder par étapes en ne faisant que la macro qui va coller les donnée de la feuill1 et les écraser sur la BDD mais ça ne marche pas, il me met fonction incorect...je désespère. Personne a une idée. Encore merci

    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
    Dim LastLig As Long
    Dim i As Byte
    Dim t As Long
    Dim s As Long
    Dim maSelect As Range
     
    s = 3
    t = Sheets("Feuil1").Range("B21")
     
    Set maSelect = Sheets("Feuil1").Range("D" & s & ":" & "Q" & t)
    Application.ScreenUpdating = False
    With Worksheets("BDD")
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
            .AutoFilter Field:=1, Criteria1:=Ws.Range("A2")
            .AutoFilter Field:=2, Criteria1:=Ws.Range("B2")
            For i = 3 To 13
            .AutoFilter Field:=3, Criteria1:=Ws.Range("C" & i)
            If .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).Count > 1 Then
                .Range("D2:Q" & LastLig).SpecialCells(xlCellTypeVisible).Past maSelect.Range("D" & i)
     
            Else
                Range("D" & i & ":Q" & i).ClearContents
            End If
        Next i
        End With
        .AutoFilterMode = False
    End With
    Set Ws = Nothing
    End Sub

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Sans rentrer dans le détail du code, je me demande pourquoi tu n’effectues pas simplement un "couper" du groupe de données à modifier et une nouvelle copie après modification.

    Cordialement.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Business Analyst
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Bonjour et merci pour la réponse.
    Tu veux dire que je mette "cut" sur ma partie au lieu de copy oui c'est intéressant ta proposition, mais le problème si je mets à la place de copy cut, sans ne change rien, je pense que j'ai une anomalie qui vient d'ailleurs (enfin si j'ai bien compris ta remarque).

    Merci encore !

  6. #6
    Membre à l'essai
    Homme Profil pro
    Business Analyst
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Je viens de comprendre ce que tu me disais gFZT82, en effet ce peut être une alternative d'au lieu de générer le rapport en le copiant, de le couper pour le retirer de la base de donnée le problème c'est que cela m'affiche une base de donnée avec des trous et risque de poser problème si changement de code produit.
    S'il y a une possibilité de faire autrement par remplacer je suis plus preneur que de couper les données.

    Merci encore

  7. #7
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    le problème c'est que cela m'affiche une base de donnée avec des trous
    Non, pas de trou si tu réalises un tri après avoir collé tes données modifiées.
    risque de poser problème si changement de code produit.
    Ce problème, tu l'auras surtout si tu ne fais pas un "cut".
    Pour identifier les données à mettre à jour, tu es obligé de prendre en compte les 3 critères mois, enseigne, gencode. Si tu autorises la modification d'une de ces données, l'identifiant ne sera plus reconnu et tu auras forcément création d'une nouvelle ligne qui viendra en doublon de la ligne avant modification.

    Cordialement.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Business Analyst
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Ok, je vais essayer voir ce que ça donne, mais l'unique problème que je vois directement, c'est que le cut s'exerce sur les colonnes où il y a les données si je le fait sur toute la plage, il risque de m'écraser sur la feuil1 les données Géographie/Periode/Code Produit, où ce sont des formules, donc je pense que la solution est de faire un autre onglet de consultation et de modification qui va chercher sur la même base.

    Je vais essayer mais je suis toujours preneur de savoir s'il est possible de remplacer des données à partir de VBA.

    Merci

  9. #9
    Membre éprouvé
    Homme Profil pro
    Contrôleur de gestion en activité
    Inscrit en
    Juillet 2012
    Messages
    544
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Contrôleur de gestion en activité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 544
    Points : 935
    Points
    935
    Par défaut
    Bonsoir,

    j'ai déjà eu ce genre de soucis, une base de données qui est incrémentée ET modifiée par le même interface.
    Cela fait un bail et je n'ai pas le fichier sous la main, mais voici le principe.

    1. demander quelle est l'entrée et afficher les entrées existantes
    1a l'affichage ne donne rien, donc entré&e nouvelle donc pas de soucis.
    1b l'affichage trouve une ligne

    2. que faire de cette ligne ?
    2a la modifier, donc remplacer la ligne (dont tu as garder la trace dans la base).
    2b ajouter une nouvelle entrée qui viendra se placer juste après la première ligne que tu viens d'extraire.

    désolé pour l'absence de code mais d'autres seront plus productifs j'en suis sûr.

    Bonne soirée à tous.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Business Analyst
    Inscrit en
    Juillet 2012
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juillet 2012
    Messages : 31
    Points : 13
    Points
    13
    Par défaut
    Merci je suis aussi preneur d'idée et comme je débute sur VBA je suis aussi preneur de code, mais j'essaye de mon côté. Merci pour le soutien. J'ai pas encore trouvé la solution, mais je vais essayer de comprendre ton histoire de ligne comme pour le monsieur qui présente par vidéo sa gestion et modification de base de donnée de polykromy (http://www.polykromy.com/blog/excel-base-de-donnees.htm)
    c'est très bien, sauf que pour ma part c'est une plage entière que je sélectionne et non une ligne en fonction de 3 critères géo/Période/Code Produit

    Donc j'essaye de voir pourquoi mon code ne marche pas du tout pourtant l'idée est d'aller sélectionner par la méthode filtre les produits concernés dans la feuille BDD et de les remplacer par ce qu'il y a d'écrit dans la feuil1, je pensais que la macro Extraction pouvais fonctionner dans le sens inverse mais j'y arrive pas.
    encore merci pour le soutien
    Et bonne soirée à ce super forum je suis très fan!!! j'en apprends tous les jours, ça me motive vraiment d'apprendre VBA, je trouve cela tellement important d'utiliser cet outil à fond...et j'aimerai peut être un jour moi aussi donner un coup de main aux autres! Bravo!

Discussions similaires

  1. Afficher un enregistrement d'une base de données
    Par loreleï85 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/01/2007, 15h08
  2. enregistrer dans une base de données
    Par liverbird dans le forum C++Builder
    Réponses: 33
    Dernier message: 12/07/2006, 19h50
  3. [MySQL] Enregistrer dans une base de données à partir d'une liste déroulante
    Par snakejl dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 17/05/2006, 16h32
  4. inscription via le web et enregistrement dans une base de données
    Par titoenis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 17/05/2006, 09h20
  5. Modifier le nom d'une base de donnée avec erreur sy
    Par mmn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/11/2003, 10h12

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