XL 2016 Bouton VBA pour alimenter une base de donnée

!xmusaton

XLDnaute Nouveau
Bonjour à tous,

J'ai un formulaire Excel présentant une fiche de temps avec différentes données à indiquer : Date d'encodage (date du jour), Nom, Service, N° de la semaine et les différentes heures passées par projet pour le NOM de la personne indiqué.

J'aimerai créer un programme vb via un bouton dans ce formulaire (sans Userform) qui permet d'alimenter la base de donnée se trouvant dans la deuxième feuille (BD).

C'est à dire, quand je remplie les cellules de données et j'indique les heures passées sur les projets (pas nécessairement que toutes les cellules d'heures soient remplies), en cliquant sur le bouton "ajouter" cela me crée des lignes dans le tableau de BD, toujours en répétant le NOM , Service , N° semaine et date d'encodage avec à chaque fois le nombre d'heures passées.

Pourriez vous m'aider svp?

Je vous joins mon fichier xl.

UN TOUT GRAND MERCI PAR AVANCE :)
 

Pièces jointes

  • testR.xlsx
    21.9 KB · Affichages: 46

!xmusaton

XLDnaute Nouveau
Salut Dudu2,

Je reviens vers toi avec le même fichier (cette fois-ci avec moins de champs à remplir)
et de nouveaux besoins :

1-En fait, je me suis rendue compte qu'il y a une fonctionnalité qui manquait, c'est la mise à jour des champs encodés en dernier dans la BD .
En cliquant sur le bouton "recharger", les dernières valeurs s'affichent, on peut donc modifier ce qu'on a à modifier, puis en cliquant sur le bouton "mettre à jour" il ne fait les modifs qu'au niveau les lignes contenant les champs modifiés dans la BD.

2-Pour les champs SAV, j'aimerais que ça soit en %, et que les pourcentages encodés s'affichent dans une nouvelle colonne dans la BD {%}, et la colonne "Heures" soit donc un champs calculé de ces pourcentages encodés par rapport à la somme des dernières heures encodées.

Help please!

Merci par avance xx
 

Pièces jointes

  • testR (1) (4).xlsm
    40.4 KB · Affichages: 8

Dudu2

XLDnaute Barbatruc
Bonjour @!xRaw3aton,
c'est la mise à jour des champs encodés en dernier dans la BD
C'est quoi ces champs ? Je ne vois qu'une seule colonne "Date d'encodage".
En quoi sont-ils "encodés" ? Ils sont cryptés ?
en cliquant sur le bouton "mettre à jour" il ne fait les modifs qu'au niveau les lignes contenant les champs modifiés dans la BD.
Je ne comprends pas ce que fait ce bouton par rapport au bouton Ajouter. Faut-il mémoriser ce qui a été rechargé et détecter les différences pour connaître ce qui a été modifié après le rechargement et n'ajouter que les valeurs différentes / modifiées ?
Pour les champs SAV, j'aimerais que ça soit en %
Je ne comprends absolument pas ce que tu veux faire. C'est quoi un "pourcentage encodé", comment calculer le %, le lien avec le formulaire, ce qui est saisi ou calculé ?
"somme des dernières heures encodées" d'un projet ? Faut récupérer les heures du projet en BD ?

Envoie-moi un contact en message privé sinon on va y passer des tonnes de messages pour s'expliquer.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
OK pour le bouton <mettre à jour>, il faut que je mémorise l'emplacement dans BD des éléments présentés dans Formulaire de manière à ce que lors de l'utilisation de ce bouton les heures éventuellement modifiées dans Formulaire remplacent les heures originelles de BD.

Il serait possible d'ajouter une colonne dans le formulaire qui indiquerait Ajouter / Modifier / Supprimer / Ignorer sur la base d'une liste de validation de données de ces 4 mots avec:
- "Ajouter" placé automatiquement par le code VBA dès qu'une valeur est saisie sur une zone initialement vide
- "Modifier" placé automatiquement par le code VBA dès qu'une valeur est saisie sur une zone initialement non vide
- "Modifier" (ou Ignorer ?) pour les valeurs rechargées.
Un seul bouton <Mettre à jour> serait alors nécessaire et procèderait à l'action spécifiée pour chaque ligne.
A toi de me dire.

la colonne heures sera calculé selon ce pourcentage du total des dernières heures encodées pour cette personne.
Seulement la dernière occurrence d'heures pour cette personne quelque soit le projet ?
Ou la somme des heures saisies de tous les projets de cette personne pour la dernière semaine saisie ?
De plus si il y a 20% de SAV, ne faut-il pas retirer ces 20% des heures projet ? Sinon le total des heures pour une personne va dépasser ce qu'il a reporté.

Est-ce qu'il ne vaudrait pas mieux pour chaque projet avoir une colonne Heures Projet et Heures SAV pour suivre précisément l'activité / coûts par projet ?

Ou Heures Projet et % SAV de sorte que les Heures Projet seraient ajustée du complément à 100% du % SAV et les heures SAV calculées avec le % SAV.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
De plus, si ce que tu fais relève d'un suivi d'activité pour le reporting du temps passé, il faudrait rendre l'approche plus "structurée".
Avoir une table des Personnes Nom / Prénom / Service / etc...
Avoir une table des Projets Code / Nom / etc...
Faire un formulaire (UserForm) de saisie de l'activité
Avoir un minimum de stats
Je vais te montrer un fichier (noms modifiés / anonymisés) dans le même genre que j'ai fait pour une autre XLDnaute quand elle m'aura donné la permission de le partager.

Edit: lien fichier envoyé en message privé.
 
Dernière édition:

!xmusaton

XLDnaute Nouveau
Bonjour Dudu2,

Merci pour le fichier, sauf que le code ne fonctionne pas quand je clique sur les boutons...
En tout cas ça a l'air bien fait (j'en doute pas) mais ce n'est pas vraiment ce dont j'ai besoin.

En fait, pour t'expliquer le fichier sera plutôt pour un prévisionnel des charges, sans que ça soit très compliqué (de préférence pas de userform)

On a une liste de projet, les heures qu'on estime restantes sont à compléter pour chaque personne, ainsi que le pourcentage du SAV qu'on estime que cette personne va faire durant le prochain mois.

1- Bouton mettre à jour :
- "Ajouter" placé automatiquement par le code VBA dès qu'une valeur est saisie sur une zone initialement vide
- "Modifier" placé automatiquement par le code VBA dès qu'une valeur est saisie sur une zone initialement non vide
- "Modifier" (ou Ignorer ?) pour les valeurs rechargées.
Un seul bouton <Mettre à jour> serait alors nécessaire et procèderait à l'action spécifiée pour chaque ligne.
A toi de me dire.
C'est nickel comme ça! un seul bouton de mise à jour

2- SAV en % :

le sav sera un champs en % , en mettant 10% par exemple pour une personne X, j'aimerais que ça soit repris dans une autre colonne % pour ne pas avoir 0.1 dans la colonne heures dans la BDD.
Et en cliquant sur le bouton charger, j'aurais les pourcentages pour le SAV et les heures pour les projets qui s'affichent.

Ce pourcentage sera calculé par la suite par rapport au total d'heure passées sur tous les projets de la dernière occurence.. ça à mon avis ça sera un champs calculé dans un tableau croisé par la suite..
ou bien directement dans la BDD? mais quelle formule?
si tu sais m'aider...

Merci à toi
 

Dudu2

XLDnaute Barbatruc
Le fichier envoyé qui ne fonctionne pas chez toi fonctionne chez moi et chez la personne qui l'utilise chaque lundi pour le suivi d'activité des ouvriers.

Pour l'action à appliquer, en fait je vais plutôt la réduire à une cellule qui dira Ajouter ou Modifier qui s'appliquera à tout pour simplifier à la fois le code et l'utilisation. Sinon ça risque d'être trop confus si ça doit s'appliquer à chaque ligne individuellement.

Pour la formule, un SOMMEPROD pourrait marcher pour calculer les heures sur la base du nom et du n° de semaine.
Par contre s'il y a SAV1, SAV2, SAV3 pour une personne, comme il n'y a pas de relation SAV <-> Projet, chaque % ne pourra s'appliquer qu'à l'ensemble des heures.

Les tableaux gagneraient à être des tableaux structurés Excel, mais up to you...

Comme ils ne le sont pas, je suis obligé de décaler le tableau SAV à droite car pour trouver la dernière ligne de chaque tableau, il ne faut rien en dessous.
 

Dudu2

XLDnaute Barbatruc
Compte tenu du contenu du "formulaire" pour un nom donné et un semaine donnée, on ne peut avoir 2 fois le même projet. Donc idem en BD. Je pars de ce postulat

Au rechargement, s'il y a en plusieurs occurrences d'un projet / semaine / nom une seule des occurrences sera retenue pour le rechargement.
 

Dudu2

XLDnaute Barbatruc
J'ai fait quelques tests, il faudrait que tu en fasses aussi pour vérifier.
Je reviens sur l'absence de tableaux structurés donc le code est totalement dépendant des constantes en début de module qui définissent les positions des objets.
Ça alourdit aussi un peu le code car il faut passer ces constantes aux fonctions au lieu de passer un simple nom ou ListObject de tableau structuré puisqu'il y a maintenant 2 tableaux (Projets et SAVs).
 

!xmusaton

XLDnaute Nouveau
Merci Dudu,
Je viens de teter, ça marche nickel.
Sauf que quand je veux modifier, je ne peux plus ajouter une valeur dans une cellule qui était vide, dans ce cas je dois choisir l'option ajouter et entrer uniquement la valeur que je souhaite ajouter c'est ça?

Exemple, j'ai sélectionné YYY, recharger les valeurs, j'ai fait mes modifs, et j'ai encore ajouté 2 heures pour le PRJ8 dont la cellule était vide... en choisissant modifier et en cliquant sur mettre à jour, il ne modifie que les valeurs à modifier mais n'ajoute pas la ligne du PRJ8...
 

Dudu2

XLDnaute Barbatruc
Oui, c'est ça. la modification ne s'applique qu'à des valeurs existantes. C'est plus simple en tous points.
Cependant j'ai pris soin de laisser les valeurs non modifiées dans les tableaux de sorte qu'il suffit de re-cliquer sur <Mettre à jour> pour les ajouter qui revient comme la seule option de mise à jour.

J'ai aussi fait une petite modif pour sélectionner les lignes ajoutées ou modifiées dans la BD après mise à jour. Ça permet de les voir visuellement avec les yeux.
Je pourrais aussi les colorer...
 
Dernière édition:

!xmusaton

XLDnaute Nouveau
Bonjour Dudu2,

J'ai ajouté des lignes au tableau SAV (jusqu'à la ligne 25), sauf qu'en chargeant (modif ou ajout) il ne reprend pas les lignes ajoutées.
Au niveau du code je pense qu'il s'agit de cette fonction.
Tu peux me dire qu'est ce qu'il faut modifier stp?

With Application
NbLigFormulaireSAV = .Max(.IfError(.Match("z", WS_Formulaire.Columns(FeuilleFormulaire_NoColonneIdSAV)), 0), _
.IfError(.Match(9 ^ 99, WS_Formulaire.Columns(FeuilleFormulaire_NoColonneIdSAV)), 0))
End With

Merci par avance xx
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 094
Membres
103 116
dernier inscrit
kutobi87