Mise à jour ligne Bd excel

Zentin

XLDnaute Nouveau
Bonjour à tous,
Etant débutante dans la création de formulaires, j’aurais besoin de votre aide pour la création d’un code VBA pour l’enregistrement des corrections apportées à une fiche client.
En fichier joint, 2 feuilles excel (Offres_forum et Clients_forum) il faut ouvrir les 2 feuilles et en étant dans la feuille Offres_forum cliquer sur le bouton recherche client pour appeler le formulaire « Recherche client » dans lequel les boutons OK, nouveau client et suppression client fonctionnent très bien (grâce à toutes les infos recueillies sur les divers Forum) mais impossible de trouver le bon code pour enregistrer les modifications apportées dans les textbox du formulaire recherche client dans la feuille « Clients_Forum ».
J’ai déjà un bout de code mais celui-ci copie les nouvelles informations dans la feuille clients_forum dans de nouvelles cellules mais ne corrige pas la fiche client recherchée par son n° de client qui est en Textbox9 de mon formulaire.
J’espère avoir été assez claire et surtout que quelqu’un aura la gentillesse de bien vouloir m’aider.
Merci à tous pour l’attention que vous apporterez à ma demande
Ci-joint : dossier avec les feuilles Offres_forum et Clients_forum
Voici le code actuel :

Private Sub CommandButton3_Click()
Dim a
a = TextBox9.Value
Windows("Clients.xls").Activate
Cells.Find(What:=a).Activate
ActiveCell.Offset(0, 2).Value = Me.TextBox1.Value
ActiveCell.Offset(0, 3).Value = Me.TextBox2.Value
ActiveCell.Offset(0, 4).Value = Me.TextBox3.Value
ActiveCell.Offset(0, 5).Value = Me.TextBox4.Value
ActiveCell.Offset(0, 6).Value = Me.TextBox5.Value
ActiveCell.Offset(0, 7).Value = Me.TextBox6.Value
ActiveCell.Offset(0, 8).Value = Me.TextBox7.Value
ActiveCell.Offset(0, 9).Value = Me.TextBox8.Value
Windows("Offres.xls").Activate
End Sub
 

Pièces jointes

  • OFFRES_forum.zip
    37.4 KB · Affichages: 38
  • OFFRES_forum.zip
    37.4 KB · Affichages: 42
  • OFFRES_forum.zip
    37.4 KB · Affichages: 43

Robert

XLDnaute Barbatruc
Repose en paix
Re : Mise à jour ligne Bd excel

Bonjour Zentin, bonjour le forum,

Obliger de désactiver le code de ThisWorkbook sinon ça plantait tout le temps... Je te propose de modifier le code du bouton Correction(s) fiche client comme ça :
Code:
Private Sub CommandButton3_Click()
Dim li As Integer 'déclare la variable li (LIgne)
Windows("Clients_forum.xls").Activate
li = Sheets("clients").Columns(1).Find(TextBox9.Value, , xlValues, xlWhole).Row
Cells(li, 2).Value = Me.TextBox1.Value
Cells(li, 3).Value = Me.TextBox2.Value
Cells(li, 4).Value = Me.TextBox3.Value
Cells(li, 5).Value = Me.TextBox4.Value
Cells(li, 6).Value = Me.TextBox5.Value
Cells(li, 7).Value = Me.TextBox6.Value
Cells(li, 8).Value = Me.TextBox7.Value
Cells(li, 9).Value = Me.TextBox8.Value
Windows("Offres_forum.xls").Activate
End Sub
 
Dernière édition:

Zentin

XLDnaute Nouveau
Re : Mise à jour ligne Bd excel

Merci pour la rapidité robert, mais il semblerait que ta proposition ne modifie que la colonne B (société) donc qu'il ne tienne compte que de la modification en Textbox1 mais pas les modifications des autres textbox et bien évidemment je ne trouve pas la solution.
Pourrais-tu stp me confirmer que ce code fonctionne bien chez toi stp
Encore merci d'avance pour ton aide
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Mise à jour ligne Bd excel

Bonjour Zentrin, bonjour le forum,

Oui je confirme le problème est le même chez moi...
Je pense que ça provient du fait que tu alimentes la ComboBox1 avec la propriété RowSource de celle-ci. Alors, quand on modifie une cellule appartenant à la plage de la RowSource cela relance l'événement Change de la ComboBox1 qui récupère les aciennes valeurs (sauf la première que l'on vient de changer). Mais je suis pas sûr car bizarement, seule la ligne du CommandButton3
Code:
Cells(li, 2).Value = Me.TextBox1.Value
relance l'événement Change de la ComboBox1. Les autres lignes ne le font pas...
Je ne sais pas si mes explications sont claires mais tu peux observer le phénomène en mettant un point d'arrêt sur Private Sub CommandButton3_Click() et en appuyant sur la touche [F8] pour voir le code agir pas à pas...

Comme solution je te propose de rajouter un événement Initialize à l'UserForm pour alimenter dynamiquement la ComboBox1 :
Code:
Private Sub UserForm_Initialize() 'à l'initialisation de l'Userform
'alimentation de la ComboBox1
With Workbooks("Clients_forum.xls").Sheets("Clients")
    Me.ComboBox1.List = .Range("A1:I" & .Range("A65536").End(xlUp).Row).Value
End With
End Sub
et bien sûr de supprimer la proprieté RowSource de cette même ComboBox1 car sinon il y aurait conflit.
Comme ça, ça marche...
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Mise à jour ligne Bd excel

Bonsoir Zentin, Robert,

J'avais jeté un oeil perplexe avant d'aller courir la campagne ... ça vaut ce que ça vaut, mais en réfléchissant sous la douche, au retour, j'en étais arrivé à la même hypothèse que celle que Robert formule ... et à envisager la même piste de solution.
Je suis certain qu'avec ce renfort inattendu, sous la forme de mon point de vue avisé :p le léger doute qui l'assaille quittera Robert (si ça pouvait le faire revenir à des couleurs plus "traditionnelles" :rolleyes:)
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Mise à jour ligne Bd excel

Bonsoir le fil, bonsoir le forum,

Merci Modeste pour ton soutien mais le doute m'habite toujours... Pourquoi la ligne
Code:
Cells(li, 2).Value = Me.TextBox1.Value
provoque deux fois l'événement Change de la ComboBox1 (quand elle est alimenté par RowSource) et pas les autres lignes. Pourtant Cells(li, 3) appartiendrait elle aussi à la plage de la RowSource. Cells(li, 4) aussi, etc...

J'ai trouvé un début d'explication lié à la propriété BoundColumn car l'aide VBA dit cela :
Si le contrôle est dépendant d'une source de données, la valeur dans la colonne spécifiée par la propriété BoundColumn est stockée dans la source de données nommée dans la propriété ControlSource.
et en eftet, si je modifie cette propriété (qui est actuellement = à 10) je peux déclencher l'événement Change à chaque ligne (11) ou deux fois par ligne (0), etc. j'ai pas tout testé... Si quelqu'un a une explication meilleure que l'aide VBA, je suis preneur...

Quant à la couleur... Faut voir avec David. Je signifie de la sorte mon vif mécontentement avec le site qui est devenu orange... C'est pas que j'aime pas cette couleur mais elle a envahi le site et le rend moins lisible... Alors je fais comme lui...
 
Dernière édition:

Zentin

XLDnaute Nouveau
Re : Mise à jour ligne Bd excel

Bonjour Robert, Modeste et le forum
N'y tenant plus je viens de faire les modifs. Tout fonctionne du tonnerre un grand merci à toi Robert, il n'y avait pas de raison de douter de toi, tu es génial!!!

Pour revenir à ta remarque concernant le code de ThisWorkbook y aurait-il un code pour qu'à l'ouverture de le feuille Offres_forum il y ai une recherche sur le disque dur de la feuille Clients_forum. (il y a encore 2 autres feuilles dans le même dossier OFFRES qui devront s'ouvrir automatiquement)
Je m'explique, qès que j'aurai terminé ce petit système d'offre, je devrai le refiler aux 5 autres employés de la société parce que nous n'avons pas de serveur et que de plus 2 des employés travaillent sur des portables lors des visites en clientèles.

Voici, le véritable code dans le doc. définitif du bureau
Private Sub Workbook_Open()
Workbooks.Open Filename:="C:\Users\User\Desktop\OFFRES\Relevé des offres.xls"
Workbooks.Open Filename:="C:\Users\User\Desktop\OFFRES\Clients.xls"
Workbooks.Open Filename:="C:\Users\User\Desktop\OFFRES\Bases.xls"
Windows("Offres.xls").Activate
Sheets("Menu").Select
End Sub

Avec vos connaissances, je ne doute pas un instant que vous aurez une solution pour moi, et très certainement d'autres qui auront les mêmes soucis.

Merci d'avance pour votre attention et excellent dimanche à tous

Zentin
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Mise à jour ligne Bd excel

Bonjour le fil, bonjour le forum,

Pas sûr d'avoir bien compris ton problème... Mais il y a quelques règles à respecter si tu veux éviter les bugs. Tu mets tous les fichiers dans le même dossier et tu dis à tes collaborateurs qu'il est interdit de les déplacer de ce dossier et de les renommer. Ensuite tu leur explique qu'il n'ont qu'un seul fichier à ouvrir et que VBA se charge de la suite... (tu pourras par la même occasion ferme ces mêmes fichiers annexes).

Je te propose le code ci-dessous. La variable chem récupère le chemin du fichier Source et on ouvre les fichiers annexes à l'aide de cette variable. Ce qui permet à l'utilisateur de mettre le dossier où il veut et ça marche. Il peut même déplacer le dossier complet :
Code:
Private Sub Workbook_Open()
Dim chem As String 'déclare la variable chem (CHEMin)
chem = ThisWorkbook.Path & "\"
Workbooks.Open Filename:="chem & Relevé des offres.xls"
Workbooks.Open Filename:="chem & Clients.xl s"
Workbooks.Open Filename:="chem & Bases.xls"
Windows("Offres.xls").Activate
Sheets("Menu").Select
End Sub
Mais permet-moi une remarque, ne serait-il pas plus simple d'utiliser un seul classeur contenant plusieurs onglets que d'ouvrir tous ces classeurs ?
Je reviens aussi sur ton premier problème. Je te recommande vivement d'éviter d'alimenter des comboboxes avec la propriété RowSource. L'alimentation dynamique à l'ouverture de l'UserForm, par exemple, et avec la méthode ComboBox1.List = Range(la_plage_dynamique).Value est plus fiable...
 
Dernière édition:

Zentin

XLDnaute Nouveau
Re : Mise à jour ligne Bd excel

Merci Robert.

J'ai supprimé la propiété Rowsource du Combobox et insérer alimentation dynamique à l'ouverture du Userform et l'alimentation du Combobox et le code pour modification d'une ligne dans la BD fonctionnent très bien.

J'ai copié ton code Privat Sub workbook (en corrigeant le blanc dans l'extention xls du fichier clients, mais cela ne fonctionne pas chez moi!

Par contre, après toutes ces modifs les fonctions userform.show ne fonctionnent plus. ex. bouton recherche client = erreur d'exécution 9 L'indice n'appartient pas à la sélection et idem pour bouton nouveau client dans userform recherche client.
Es-ce normal?
En fichier joint: dossier OFFRES, toutes les modifications ont été exécutées dans le fichiers Offres.xls;
Merci pour ton aide
 

Pièces jointes

  • OFFRES.zip
    44.7 KB · Affichages: 39
  • OFFRES.zip
    44.7 KB · Affichages: 47
  • OFFRES.zip
    44.7 KB · Affichages: 50

Modeste

XLDnaute Barbatruc
Re : Mise à jour ligne Bd excel

Bonjour Zentin,

Au cas où Robert ne repasserait pas tout de suite, dans tes trois lignes de code suivantes:
Code:
Workbooks.Open Filename:="chem & Relevé des offres.xls"
Workbooks.Open Filename:="chem & Clients.xls"
Workbooks.Open Filename:="chem & Bases.xls"
... déplacer les premiers guillemets après le '&' comme ci-dessous:
Code:
Workbooks.Open Filename:= chem & "Relevé des offres.xls"
Workbooks.Open Filename:= chem & "Clients.xls"
Workbooks.Open Filename:= chem & "Bases.xls"

Modifier aussi, dans
Code:
Private Sub CommandButton3_Click()
[...]
Windows("Clients_forum.xls").Activate
[...]
Windows("Offres_forum.xls").Activate
... les noms des fichiers sont différents!
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Mise à jour ligne Bd excel

Bonjour le fil, bonjour le forum,

C'est ça qui est génial dans ce forum... Il y en a toujours un pour rattraper les co...ries des autres ! Merci Modeste !
 
Dernière édition:

Zentin

XLDnaute Nouveau
Re : Mise à jour ligne Bd excel

Merci Modeste.
Maintenant tout fonctionne très bien;
J'en profite un peu pour faire une autre petite demande.
Est-il possible d'adapter la ariable chem pour la sauvegarde d'un fichier;
Voici un exemple de code pour la sauvegarde d'un fichier avec le chemin défini :

ActiveWorkbook.SaveAs Filename:="C:\Users\User\Desktop\Offres\Offres Excel\" & [D2].Value & "_" & [A15].Value & "_" & [B13].Value & ".xls"
La macro est exécutée sur une feuille qui est ouverte dans le dossier Offres Excel mais dans un sous dossier qui s'appelle Original.
Es-t'il possible de remplacer ="C:\Users\User\Desktop\Offres\ par la variable chem?

Merci d'avance pour votre aide et @+
 

Modeste

XLDnaute Barbatruc
Re : Mise à jour ligne Bd excel

re-bonjour,

@Robert: pour ce qui est des co...ries, c'est à charge de revanche :eek: (je peux faire bien pire qu'une paire de guillemets mal placée!) D'autre part, la difficulté est ensuite de savoir combien de temps attendre avant de voir si le "premier" va répondre.

@Zentin: si la question est: peut-on écrire
Code:
ActiveWorkbook.SaveAs Filename:=chem & "Original\" & [D2].Value & "_" & [A15].Value & "_" & [B13].Value & ".xls"
... la réponse est oui, pour autant que
Code:
chem = ThisWorkbook.Path & "\"
figure toujours dans le code, avant le 'ActiveWorkbook.SaveAs'
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Mise à jour ligne Bd excel

Bonsoir le fil, bonsoir le forum,

Pas sûr d'avoir compris Zentin. Tu me dis que le fichier doit être enregistré dans un dossier un niveau au dessus du dossier dans lequel il se trouve actuellement ? Si j'ai bien compris, peut-être comme ça :
Code:
Dim chem As String 'déclare la variable chem
'définit la variable chem (le chemin complet auquel on enlève les 8 derniers caractères du sous-dossier "original")
chem = Left(ThisWorkbook.Path, Len(ThisWorkbook.Path) - 8)
ActiveWorkbook.SaveAs Filename:=chem & [D2].Value & "_" & [A15].Value & "_" & [B13].Value & ".xls"
 
Dernière édition:

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
2
Affichages
421

Statistiques des forums

Discussions
314 450
Messages
2 109 719
Membres
110 551
dernier inscrit
Khyolyanna