Autres Aide concernant un code qui me met à jour ma base de données

INFINITY100

XLDnaute Occasionnel
Bonjour mes amis

Voila je viens vers vous pour résoudre un petit soucis de code VBA en effet dans mon fichier Excel j’ai deux feuilles une « base de données » et l’autre « modification »

Et je possède déjà un code que lorsque je saisie le matricule dans la cellule E4 et que je clique sur chercher il me récupère de ma base les informations concernant le matricule choisit.

Jusque-là tout est parfait.

Seulement il me manque un code qui met à jour ma base de données s’il y a un changement, c’est-à-dire lorsque je change quelque chose dans la feuille modification et que je clique sur "Mettre à jour" je veux automatiquement renvoyer les changements vers ma base de donnée et à la bonne ligne par rapport au matricule

Je joins le fichier pour y voir très claire

Merci à vous tous

Cordialement
 

Pièces jointes

  • Mise a jour base.xlsm
    33.4 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Infinity,
Un essai en PJ avec :
VB:
Sub CommandButton2_Click()
    If IsEmpty(Sheets("Modification").Range("E4")) Then Exit Sub
    Dim DL%, Ligne%, Colonne%, Matricule
    Application.ScreenUpdating = False
    Matricule = Sheets("Modification").[B9]
    With Sheets("Base")
        DL = 1 + .[B65500].End(xlUp).Row
        For Ligne = 2 To DL
            If .Cells(Ligne, "B") = Matricule Then
                Exit For
            End If
        Next Ligne
        For Colonne = 5 To 12   ' de la colonne E à L
            .Cells(Ligne, Colonne) = Sheets("Modification").Cells(9, Colonne)
        Next Colonne
    End With
End Sub
J'en ai profité pour mettre une liste déroulante en E4 avec :
Code:
=DECALER(ListeMat1;0;0;NB.SI(ListeMat;"<>"))
 

Pièces jointes

  • Mise a jour base.xlsm
    32 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
La boucle For Next est stupide, cette PJ fait appel à EQUIV, ce qui est beaucoup plus rapide si vous avez beaucoup de matricules :
VB:
Sub CommandButton2_Click()
    If IsEmpty(Sheets("Modification").Range("E4")) Then Exit Sub
    Dim DL%, Ligne%, Colonne%, Matricule
    Application.ScreenUpdating = False
    Matricule = Sheets("Modification").[B9]
    With Sheets("Base")
        On Error GoTo Fin
        Ligne = Application.Match(Matricule, .[B:B], 0)
        For Colonne = 5 To 12   ' de la colonne E à L
            .Cells(Ligne, Colonne) = Sheets("Modification").Cells(9, Colonne)
        Next Colonne
    End With
Fin:
End Sub
 

Pièces jointes

  • Mise a jour base2.xlsm
    32.1 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour dysorthographie,
Cela supposerait de modifier le code hôte pour mémoriser cette ligne en variable public.
Et donc ce module serait tributaire d'un code qui peut être sujet à modifications/évolutions. On pourrait alors arriver à un code qui ne marche plus à cause d'une évol d'un autre code.
Pour moi, plus les modules sont indépendant moins on risque d'effets de bord. Surtout si ce sont deux personnes différentes qui ont développés les deux modules.
 

INFINITY100

XLDnaute Occasionnel
Re,
La boucle For Next est stupide, cette PJ fait appel à EQUIV, ce qui est beaucoup plus rapide si vous avez beaucoup de matricules :
VB:
Sub CommandButton2_Click()
    If IsEmpty(Sheets("Modification").Range("E4")) Then Exit Sub
    Dim DL%, Ligne%, Colonne%, Matricule
    Application.ScreenUpdating = False
    Matricule = Sheets("Modification").[B9]
    With Sheets("Base")
        On Error GoTo Fin
        Ligne = Application.Match(Matricule, .[B:B], 0)
        For Colonne = 5 To 12   ' de la colonne E à L
            .Cells(Ligne, Colonne) = Sheets("Modification").Cells(9, Colonne)
        Next Colonne
    End With
Fin:
End Sub
Merci infiniment sylvanu c'est exactement le but voulu et aussi pour tout les détails
on apprend tellement avec vous

Merci encore
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 898
Membres
101 834
dernier inscrit
Jeremy06510