Autres Ecrasement formule par Userform

Mapleosaure

XLDnaute Nouveau
Bonjour à toutes et tous.

Nouveau sur le forum et pas vraiment expert en codage VBA sur excel 2007, je m’applique à copier et remanier des codes trouvés ici et là pour les appliquer à mes besoins. Toutefois, je suis devant un problème que je n’arrive pas à surmonter et pas facile à expliquer.

J’ai une Base de données classique avec nom , prénom, dateNaissance, lieuNaissance, Age …etc

J’utilise par userforms les ajouts, recherches, modifications …etc

Mon problème est le suivant :

Dans ma BD le calcul de l’âge se fait par formule en fonction de la date de naissance et c’est OK.

L’âge s’affiche dans le textbox de l’Userform … OK mais après une recherche, je dois apporter et valider une modification sur une ligne de la BD par l’intermédiaire de l’UF, la valeur de l’âge écrase la formule excel dans la case de l’âge. Certes la valeur reste la même, donc pas visible au premier abord, mais cette dernière reste figée advitam éternam.

J’ai pensé alors faire le calcul de l’âge par VBA, directement de textbox à textbox, mais je me trouve dans une situation identique car si je ne manipule pas mes 2500 noms en listing, les âges ne changerons pas non plus.

Il me reste alors la solution de trouver une fonction qui recalcule la colonne âge en entier lors de la fermeture du fichier afin d’être sur que tout soit a jour a chaque ouverture. Cette fonction VBA devra être ajouté au bouton de commande qui ferme et sauve le fichier Excel.

Date de naissance en colonne D2 , calcul de l’âge en colonne F2

Auriez-vous un code sur le sujet, ou une autre solution pratique ? Peut-^tre une simple fonction Excel que j’ignore ?

Merci par avance et bien cordialement.
 

Mapleosaure

XLDnaute Nouveau
Bonjour thierry
Bonjour Job75
Merci pour vos réponses mais désolé elles ne conviennent pas à mon problème… je re explique.
ma bd fonctionne parfaitement si je n'apporte pas de modifications par UF.
si je recherche une personne, son intitulé complet se retrouve dans tous les Textboxs de mon UF et dès lors que je change une adresse par exemple et que je renvoi la modif dans la BD; la valeur de l'âge se retrouve dans la cellule correspondante en effaçant la formule, donc de ce fait l'âge n'évolu plus dans le temps. c'est peut être le secret de la vie éternelle, mais c'est pas le but de mon fichier.
J'ai bien sûr pensé a la solution de Job75, mais là j'ai le problème similaire du fait que si je n'interviens pas sur ma ligne de fichier l'âge n'évolu pas non plus.
Donc je reviens a ma possible solution qui est de trouver une formule VBA calculant la colonne complète de mon Tableau1, colonne âge en F par rapport à la colonne DateNaissance en D, lors de la fermeture de mon fichier par CommandBouton.
Merci par avance pour vos cogitations.
 

job75

XLDnaute Barbatruc
Oui c'est bien ce que je pensais il suffit de ne pas toucher à la formule en colonne F.

Donc dans la macro B_modif_Click de l'UserForm FormChercheDoublon remplacer :
VB:
f.Cells(ligneEnreg, k) = tmp
par :
VB:
If k <> 6 Then f.Cells(ligneEnreg, k) = tmp 'âge exclu (formule)
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Hello Job75, @Mapleosaure

Oui ou bien ce que que je pensais aussi, on peut ré-écrire la formule aussi :

VB:
Private Sub B_modif_Click()
    If Me.TextBox1 = "" Or ligneEnreg = 0 Then Me.TextBox1.SetFocus: Exit Sub
     For K = 1 To nbCol
    
     Select Case K
     Case 6
        f.Cells(ligneEnreg, K) = "=IF(RC[-2]="""","""",DATEDIF(RC[-2],TODAY(),""y""))"
     Case Else
        tmp = Me("TextBox" & K)
        If IsNumeric(tmp) Then tmp = CDbl(tmp)
        If IsDate(tmp) Then tmp = CDate(tmp)
        f.Cells(ligneEnreg, K) = tmp
    End Select
    
    Next K
    raz
    ligneEnreg = f.[a65000].End(xlUp).Row + 1
    Me.NoEnreg = ligneEnreg
    UserForm_Initialize
    Me.ComboBox1.ListIndex = -1
    Me.ComboBox1.SetFocus
End Sub

Mais si on peut éviter, la solution de ne rien écrire et plus rationnelle !
Bien @ toi, @ vous
@+Thierry
 

Mapleosaure

XLDnaute Nouveau
Bonjour a tous
Merciiii !
je vais au plus simple, c'est a dire la solution de Job75 ( Pourquoi se prendre la tête quand il y a une solution simple et que cela fonctionne) Dans tous les cas, grand merci a tous d'avoir abuser de vos connaissances et votre temps.
Bien cordialement
 

Statistiques des forums

Discussions
315 047
Messages
2 115 698
Membres
112 555
dernier inscrit
Sandy1710