Remplir une base de données à partir d’une fiche utilisateur

Bonjour,

S’il vous plait j’aurais besoin de votre aide afin d’écrire une macro.

Mon fichier a deux feuilles :

Une feuille étant une base de données et une autre feuille étant une fiche que l’utilisateur doit remplir.

J’aimerais que l’utilisateur rempli la fiche et clique sur le bouton valider, l’information va rempli la base de données comme dans le fichier joint.

Merci beaucoup pour votre aide.

Bonsoir,

Fait en 5 minutes avec un programme générique.

cf PJ

Ceuzin

Merci beaucoup ceuzin,

Ce n est pas vraiment ceux a quoi je m attendais. Je n aimerais pas utiliser un UserForm, mais plutôt que l information soit directement rempli sur la feuille du classeur svp.

bonjour

salut au passage ceuzin

il y a 3 entités (objets) concernés

  • la machine (associée à plusieurs interventions)
  • l’intervention (associée à une machine unique et à plusieurs pièces détachées)
  • la pièce détachée (associée à une intervention unique)

dès lors Excel n'est pas le bon logiciel, même avec sa béquille VBA (au contraire, la béquille va le faire chuter)

prendre Access ou OpenOffice Base gratuit ou autre SGBD

en 1/2 journée, c'est fait, fiable et simple et très "pro".

note : si tu admets des simplifications par rapport au descriptif des 3 objets ci-dessus, ça redevient jouable.

Est ce que quelqu'un aurait une solution a proposer svp.

Merci beaucoup.

Bonsoir chrispo, le forum,

je te retourne ton fichier modifié :

* à l'ouverture du fichier, tu es sur la 2ème feuille "Base de donnée Intervention"

* tu peux voir que ton tableau est vide : y'a aucune donnée

* va sur la 1ère feuille "Rapport Intervention"

* fais Ctrl e (ou clique sur ton bouton "VALIDER") ; va en 2ème feuille et regarde ton tableau

* refais Ctrl e (ou reclique sur ton bouton) ; va de nouveau voir tes résultats


solution 100% VBA ; pas de Power BI Desktop, ni Power Query, ni TCD


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

C est excellent dhany .

Ca repond exactement a mon besoin.

S'il te plait est ce que tu pourrais faire en sorte que les données de la feuille rapport d'intervention copiées s'effacent de la feuille une fois la copie effectué ?

Merci beaucoup

merci pour ton retour !

pour ta nouvelle demande : c'est très facile à faire !

patiente un moment ; j'te fais ça tout d'suite !

dhany

voici la nouvelle version :

* j'ai été un peu plus long que prévu, car fallait faire attention aux cellules fusionnées

* comme ça efface les données de la fiche, la boîte de dialogue n'est plus nécessaire !

ça ralentit, alors j'ai préféré supprimer le message de confirmation ; l'effacement

des données de la fiche est lui-même une confirmation que la copie a été faite ;

mais bien sûr, si tu y tiens absolument, remets la ligne du MsgBox.

dhany

C est juste parfait.

Merci beaucoup pour ton aide.

@chrispo

c'était avec plaisir, et merci d'avoir passé le sujet en résolu !

bonne continuation !

dhany

Hello,

Je viens de voir ton fichier dhany...il est très bien par contre dommage qu'il n'y ai pas plus d'explication dans ton code je ne comprends pas tout

Hello Rag,

patiente un long moment : j'vais rajouter des commentaires.

dhany

@Rag02700

voilà c'est fait, le code est entièrement commenté :

si t'as besoin d'plus d'infos, n'hésite pas !

dhany

Merci dhany je vais regarde ça

La partie la plus difficile

dv = lig - 13
tu a écrit :

La partie la plus difficile

dv = lig - 13

exact ; alors un p'tit complément d'info :

* tu as compris qu'au départ, celX référence la cellule A8

* pour la fiche actuelle, la dernière ligne est la ligne n° 15, avec "Fourches" ➯ dlig = 15.

* la boucle lig fait que lig va de 13 à dlig donc de 13 à 15

la cellule qui sert de référence pour écrire une ligne est : celX.Offset(dv) : [A8].Offset(dv) 'dv ligne(s) en dessous

pour lig = 13 : dv = lig - 13 = 13 - 13 = 0 ; [A8].Offset(0) = cellule A8

pour lig = 14 : dv = lig - 13 = 14 - 14 = 1 ; [A8].Offset(1) = cellule A9

pour lig = 15 : dv = lig - 13 = 15 - 15 = 2 ; [A8].Offset(2) = cellule A10

ces cellules servent pour écrire la date ; toutes les autres infos sont écrites sur la même ligne, à droite.

[A8] est la même chose que Range("A8")

[A8].Offset(dv) est la même chose que [A8].Offset(dv, 0)

(décalage ligne : dv ; décalage colonne : 0)


exemple pour celX.Offset(dv, 3) = [E6] :

celX : cellule A8

.Offset(dv, 3) :

pour lig = 15 : dv = lig - 13 = 15 - 13 = 22 lignes plus bas que A8 ➯ ligne 10

décalage colonne = 33 colonnes à droite de A8 ➯ colonne D

on écrit donc la donnée de la cellule E6 (le Type d'Intervention) en cellule D10

note bien que dv est le décalage ligne et 3 est le décalage colonne

les deux par rapport à celX, donc par rapport à A8

dhany

Bonjour,

Pour le fun, une autre proposition avec quelques différences (améliorations ?).

Cdlt.

107xlp-rag02700.xlsm (29.33 Ko)

Hello,

Merci dhany pour tes explications. J'ai bien compris ce que tu faisais.

Par contre je suis très très loin d'avoir le même raisonnement

J'ai encore de gros progrès à faire ...

Merci également Jean-Eric

merci pour ton retour ; je te souhaite bon courage et bonne chance pour la suite de ton apprentissage du VBA !

dis-toi bien que tous les « pros d'Excel » ont commencé à partir de 0, comme n'importe quel autre débutant ;

je t'affirme que moi non plus, au début, j'y connaissais rien du tout ! ça vient pas tout seul, ni d'un coup :

c'est au fur et à mesure, en programmant, et en corrigeant les bugs qu'ont a fait.

dhany

Rechercher des sujets similaires à "remplir base donnees partir fiche utilisateur"