Création d'une bdd à partir de VBA

Bonjour à tous,

Dans le cadre d'un projet en école. Je dois élaborer un fichier de BDD immobilier. Pour le faire, je souhaite automatiser au maximum afin de limiter les sources d'erreur mais aussi le rendre performant.

Voici un petit résumé de l’objectif de ce fichier :

Je souhaite créer (dans un premier temps) une bdd de transactions immobilières. Pour se faire, j’ai recours à la VBA que je commence à apprendre petit à petit. Dans cette BDD je souhaite automatiser au maximum afin de limiter toute fausse manipulation et rendre ça facile et efficace. Je compte créer trois fonction : ajouter un actif, modifier un actif et supprimer un actif. J’ai déjà pas mal avancé sur ces fonctions mais pour autant je suis actuellement confronté à plusieurs problèmes qui m'empêchent d'avancer.

Voici les problèmes que je rencontre actuellement :

Problème 1) J’ai un gros problème de stabilité causé par la boucle range lors de l’ajout d’un actif (code lié au click du bouton ajouter dans le formulaire d’ajout appelé ici frm
invest), parfois je n’ai aucun soucis, mais souvent (même très souvent) je vais avoir excel qui plante avec le code d’exécution ‘-2147417848 (80010108)’ et le message « La méthode ‘Value’ de l’objet ‘Range’ a échoué ». Je ne comprends pas pourquoi mais cette erreur rend totalement inexploitable mon fichier.

Je réexplique ce que je souhaite faire avec cette fonction.
Lorsque je clique sur le bouton ajouter un actif, le formulaire d’ajout « frminvest » apparait. Je remplis manuellement les infos, je clique sur ajouter. Ces infos viennent s’insérer dans mon tableau de BDD. Cependant, chaque ligne du tableau est référée par un numéro de ligne # en colonne D (c’est pas vraiment une référence attribuée à un actif mais plus pour savoir combien d’actifs sont référés). Le code doit donc ajouter automatiquement la nouvelle référence en sélectionnant la dernière colonne non vide puis faire +1 par rapport à la valeur précédente.

Voici le code pour la fonction ajouter :

Private Sub btnajout_Click()
    Feuil11.Activate
    Range("D5").Select
    DL = Range("F10000").End(xlUp).Row
    NoOp = 1 + Application.Max(Range("D5:D" & DL)) 
    Range("D" & DL).Select          
    Selection.Offset(1, 0).Select   
    ActiveCell.Value = NoOp         
    Selection.Offset(0, 1).Select   
    ActiveCell = txtdate.Value
    ActiveCell.Offset(0, 1).Value = txtadresse
    ActiveCell.Offset(0, 2).Value = txtcp
    ActiveCell.Offset(0, 3).Value = cboville
    ActiveCell.Offset(0, 4).Value = cbotypo
    ActiveCell.Offset(0, 5).Value = Format(txtsurface, "### ### m²") 'format nickel mais pas numérique
    ActiveCell.Offset(0, 6).Value = txtvendeur
    ActiveCell.Offset(0, 7).Value = txtacquéreur
    ActiveCell.Offset(0, 8).Value = Format(txtpv, "### ### ### €")  'Format nickel mais pas numérique
    ActiveCell.Offset(0, 10).Value = Format(txttaux, "#.###0 %") '
    ActiveCell.Offset(0, 11).Value = txtcommentaire

End Sub

C'est cette fonction qui fait constamment crasher excel. Pouvez-vous m'aider avec une modification qui fonctionne svp et au passage m'expliquer ce qui clochait ?

Problème 2) Problème de format, j’aimerais appliquer des formats aux données, surfaces, PV et taux. Sauf qu’il y a deux sujets

  • Je n’ai pas de problème à obtenir les formats souhaités avec la surface et le PV. Cependant, je réutilise ces données automatiquement dans le tableau dans la colonne N (PV AEM/m²) en divisant la colonne PV par la colonne surface. Or, ces valeurs rentrées manuellement dans la formulaire fmrinvest ne viennent pas s'inscrire en tant que données numériques mais en tant que données de type texte. J’aimerais donc trouver un moyen de rendre ces données de type numérique afin d’appliquer le calcul tout en gardant les formats souhaités.
    • Format(txtsurface, "### ### m²")
    • Format(txtpv, "### ### ### €")
  • J’ai un petit soucis concernant le format du pourcentage pour le taux, j’aimerais n’avoir à taper dans la texte box que 2.75 (et non 0.0275) pour qu’il m’affiche 2.75% et j’aimerais aussi pouvoir taper 2.7 ou encore 2 sans qu’il ne fasse d’arrondis ou autre chose. Actuellement je suis au format suivant :
    • Format(txttaux, "#.###0 %") --> pas pratique et surtout j’ai des arrondis ou des valeur qui n’ont parfois rien à voir…

Problème 3) J’aimerais lorsque je clique sur le bouton ajouter qui lance la macro et m’amène au formulaire d’ajout « frminvest », que le numéro de la nouvelle référence (que je remplis via le formulaire) s’affiche automatiquement. Par exemple, dans ma bdd j’ai 17 références, je souhaite en ajouter une nouvelle, je clique donc sur ajouter et dans le formulaire qui apparait, on voit automatiquement la nouvelle référence en haut à droite du formulaire dans la texte box à droite du « # ». Je ne sais pas comment matérialiser cette demande en code...

Problème 4) MODE SUPPRESSION : lorsque l’on clique sur le bouton « supprimer un actif », j’aimerais utiliser le même principe que pour « modifier » un actif. C’est-à-dire, je sélectionne la référence de l’actif à supprimer, les informations ressortent dans les textbox afin d’être sûr que c’est le bon actif a supprimer et lorsque que l’on clique sur supprimer, la ligne de l’actif en question se supprime du tableau. J’ai réussi à coder ce processus à la seule différence que ce qui se supprime c’est la ligne entière de la feuille et non la ligne du tableau.

Je sais que je demande beaucoup de chose, mais je butte en touche, je n’ai démarré à apprendre le VBA qu’il n’y a peu de temps et malheureusement je suis pressé par des dates de rendu d’école, je n’ai donc pas le choix que demander votre aide.

J’espère que mes demandes sont plus ou moins clairs. Je vais joindre le fichier afin que vous puissiez comprendre un peu mieux. N’hésitez pas à poser des questions si besoin.

Merci d’avance.

Bonjour Baron, bonjour le forum,

Comment t'aider si tu ne daignes même pas nous fournir le fichier qui va bien ?!...

6fichier-forum.xlsm (51.08 Ko)

Au temps pour moi, j'étais persuadé de l'avoir joints !

Bonsoir Baron, bonsoir le forum,

En pièce jointe ton fichier modifié avec une seule UserForm pour ajouter, modifier ou supprimer. En revanche, j'ai ajouté une UserForm de recherche pour modifier ou supprimer. C'est la variable publique LR (dans le module Moduleajout) qui fait le job.

Si elle est vide frminvest ne permet que d'ajouter. Sinon, on passe d'abord par l'UserForm de recherche pour sélectionner la ligne à modifier/supprimer puis on agit.

L'UserForm de recherche fonctionne de la manière suivante. Dans le champ Rechercher, taper le texte. La liste se met à jour au fur et à mesure que le texte est édité. Attention, seules les 7 première colonnes sont prises en compte pour la recherche.
Cliquer ensuite dans la ligne désirée de la liste pour ouvrir frminvest avec les données de cette ligne. Les boutons Modifier et Supprimer sont accessibles...

J'ai pour habitude de commenter tous mes codes. Là, je ne l'ai pas fait. Si tu en as besoin, dis-le et je le ferai...

13baron-ep-v01.xlsm (52.22 Ko)

Bonjour et mille merci pour ton aide ! C'est parfait ! Il faut que je me pause et regarde tranquillement ton travail car il y a pas mal de modifications ! Je n'hésiterai pas pour les questions. Merci encore. :)

Je reviens vers toi. J'essaye de déchiffrer ton travail qui est très efficace ! Merci encore mais pourrais-tu s'il te plait rajouter quelques indications.. Je souhaite vraiment apprendre et comprendre le langage VBA mais là j'avoue être un peu perdu..

Merci d'avance.

Re,

En pièce jointe le fichier avec les codes commentés (quand le service sera disponible...).

13baron-ep-v02.xlsm (41.01 Ko)
Rechercher des sujets similaires à "creation bdd partir vba"