Ajouter un outil pour ajouter/modifier des données dans une base de données

80fichier-test.xlsm (33.65 Ko)

Bonjour a tous, suite à un premier topic une partie de ma solution existe déja mais il me faudrait un point supplémentaire qu'il me manque

Topic précédent : https://forum.excel-pratique.com/viewtopic.php?f=2&t=134506&p=826527

TL DR de ce qui suit : Je souhaiterai pouvoir éditer une BDD sur une feuille principale qui est mobile, sans avoir accès à la BDD (document destiné à être rempli par d'autres, nécessité de facilité d'utilisation)

Besoin de pouvoir écrire les date de début en "Fiche principale" et que ca arrive dans les colonnes correspondantes dans la BDD, Idem pour quantité, et de pouvoir avoir la trace similaire pour cocher pour voir si c'est réussi ou raté et que ca apparaisse dans la BDD (ou sur un autre feuillet, dans mon développement je comptais en inclure un deuxième)

Problème : seule la première donnée de la colonne D en fiche principale s'actualise

J'ai besoin d'une amélioration technique maintenant sur une deuxième problématique que j'ai maintenant.

J'aurai besoin d'avoir ce même système pour un nombre bien plus important de cellules, malheureusement de ce que j'ai pu essayer dans le code quand dans le code de la feuille 1, le mot clé or nous détruit pas mal de choses, je m'explique

De ce que j'ai pu tester depuis quelques heures, le mot clé or fait que seule ma première donnée sera modifiée en modifiant la donnée sur laquelle je me base, et si je décide de mettre and au lieu de or, toutes peuvent se modifier, mais uniquement si elles sont identiques.

J'aimerai donc pouvoir réaliser ce principe sur les colonnes "Quantité" et sur les colonnes "Date de début"

J'aimerai aussi pouvoir garder également une trace d'une prestation qui aurait été cochée ou non, même en modifiant le contrat sur lequel je me trouve (pouvoir avoir une marque "prestation réalisée" sur une BDD sur une autre feuille par exemple, ou il y aurait également les numéros de contrat

J'ai essayé rapidement de me frotter aux boucles pour résoudre ce principe (mes cellules que je souhaite faire marcher avec ce principe étant sur la même ligne) mais force est de constater que j'ai encore énormément à apprendre en VBA.

Auriez vous des idées pour répondre à cette problématique ?

Merci d'avance

Bonne journée à tous,

Evenfin

Bonjour,

Je n'ai pas encore lu en détail ta demande ... mais tu peux néanmoins t'inspirer de ceci https://www.excel-pratique.com/fr/telechargements/utilitaires/excel-formulaire-no438

Merci beaucoup !

Quel joli travail !

C'est magique avec Excel, quand tu pense avoir un niveau de 6 ou 7/10 tu te rend compte de toute l'étendue du possible et tu redescend à 2

C'est fantastique, j'adore

Question subsidiaire qui me vient à l'utilisation de ton document, pour retirer/ajouter diverses cases/items y a t'il une manip particulière à faire ?

Merci encore, je suis déja en train de le réadapter à ma problématique c'est fantastique

Le lien entre les onglets se fait par un numéro de colonne précédé d'un indicatif.

Exemple :

indicatif _col

la zone _col12 sera répercutée sur la colonne 12 de la base de données

Exception : 1ère colonne qui est l'identifiant et s'appelle ID dans l'exemple

Option Explicit
Const prefixe = "_col" ' le nom de la zone doit être suivi du n° de colonne dans la base de données, exemple _col21
Const BdD = "BD" ' onglet où se trouve la base de données
Const ID = "ID" ' nom donné au champ clé dans le formulaire, en colonne A de la BdD obligatoirement

Il vaut mieux donc ajouter des colonnes en bout d la base plutôt que d'insérer ! C'est un peu la contrainte de cette solution ...

Est-ce que c'est possible d'intégrer la possibilité de verrouiller/dévérouiller le formulaire dans excel ? (j'aimerai intégrer des parties non modifiables dans celui-ci pour certains utilisateurs finaux

Je sais que le code devra comporter des "Unprotect sheet" et des "Protect sheet" mais je ne vois pas ou les intégrer malheureusement

J'espère que tu pourra m'aider, merci encore pour cet outil fantastique !

Comme il s'agit d'une procédure événementielle, la protection de la feuille risque d'interdire même l'entrée de nouvelles données ou de modifications.

Mais il y a une solution ...

D'abord, pour protéger, il faut au préalable définir quelles zones sont protégées et quelles zones sont libres.

capture d ecran 314

... et ensuite protéger la feuille complètement.

Ensuite, si tu souhaites que tout le monde n'ait pas accès à tout ... il faut réer plusieurs feuilles (cela aurait été la même chose avec des userform classiques) avec le même code au changement près de préfixe des zones.

Exemple _XX31 pour la feuille trucmuche et _YY31 pour la feuille tartenpion. Toutes les 2 feuilles modifieront la colonne 31 dans ce cas. Mais tu pourras protéger différemment les feuilles.

Enfin il faudra un contrôle d'accès par feuille (cela aurait été la même chose avec des userform classiques). Je peux aussi fournir une solution pour cela.

C'est pas forcément l'accès que je souhaite limiter mais plutôt la modification si possible

Typiquement je ne souhaite pas qu'on puisse modifier l'intitulé le code ou le prix d'une prestation mais je souhaite qu'on puisse avoir la possibilité de commenter dans des cellules spécifiques

Je ne sais pas si je suis ultra clair la ><

je ne souhaite pas qu'on puisse modifier l'intitulé le code ou le prix d'une prestation

A quel moment ces informations (l'intitulé le code ou le prix d'une prestation) sont-elles mises à jour ?

A la création du fichier + par des responsables, alors que le fichier a pour but d'être utilisé par beaucoup plus de personnes

OK, je vais faire une maquette

Voici un exemple avec 2 onglets :

  • un onglet pour mettre à jour nom/prénom/date de naissance
  • un autre qui rappelle ces données sans pouvoir les modifier (zones protégées) et permet de compléter les autres données

J'ai juste ajouté 2 lignes sur la protection, pour le moment sans mot de passe ici

Private Sub renseigner(ok As Boolean)
' ok false = effacer, true = remplir
Dim nom As Name
    ActiveSheet.Unprotect
    For Each nom In ThisWorkbook.Names
        If nom.Name Like prefixe & "*" Then
            If ok Then
                Range(nom.Name).Value = Sheets(BdD).Cells(lig(True), col(nom.Name))
            Else
                Range(nom.Name).Value = ""
            End If
        End If
    Next
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Les codes des 2 feuilles sont les mêmes à part les constantes. Les zones modifiables (ou non d'ailleurs) sont donc nommées en fonction de ces constantes.

Il reste à restreindre l'accès aux onglets selon les catégories d'utilisateurs.

J'ai l'impression très cool de m'approcher du but, mais très frustrante parce que j'ai l'erreur 1004 qui apparaît, du coup ca me fait recommencer mon fichier régulièrement, mais je ne sais pas pourquoi elle apparaît ? peut être du à ma réorganisation du formulaire pour qu'il soit comme je le souhaite ?

Comment faire pour renommer une cellule qui a déja un lien vers une colonne ? je pense que la serait une manière de contourner l'erreur 1004

Comment faire pour renommer une cellule

Fais Formules > Gestionnaire de noms.

Si tu es bloqué et pas loin du but, tu peux toujours me passer ton projet en mp.

Finalement j'ai fait autrement pour la première version utilisable, si j'ai le temps je ferais une v2 plus pratique et optimisée,

La formation du fichier originelle a été reprise sur ton exemple, je m'attelle a la mise en place de l'outil protégé, normaleemnt ca ne devrais plus être très long (données confidentielles, impossible pour moi de les communiquer désolé ^^)

Rechercher des sujets similaires à "ajouter outil modifier donnees base"