Incrémenter une base de données sur des plages nommées

Bonjour à tous,

je souhaite saisir une base de donnée à partir d'un UserForm que j'ai créé. Au départ, le code était :

If TB_Nom = "" Then Sheets("BD").Range("B60000").End(xlUp)(2) = 0 Else Sheets("BD").Range("B60000").End(xlUp)(2) = TB_Nom.Value : TB_Nom = ""

avec,

TB_Nom : la textbox pour saisir le nom

Le problème de ce code, c'est que si j'insère/supprime une colonne, toutes les données seront décallées. Je souhaite donc nommer les cellules, mais là, le code ne fonctionne plus : voilà où j'en suis :

If TB_Nom = "" Then Sheets("BD").Range("T_Nom").End(xlUp)(2) = 0 Else Sheets("BD").Range("T_Nom").End(xlUp)(2) = TB_Nom.Value : TB_Nom = ""

avec,

T_Nom : la place de cellule qui doit accueillir un nom...

Ici, tout va bien pour la saisie d'une première ligne, mais lorsque je veux en rentrer une deuxième, la première est écrasée.

Comment puis-je remonter à la première cellule vide d'une plage nommée pour insérer mes données ?

Merci d'avance pour toute votre aide !

40exemplev1.xlsm (20.02 Ko)

Bonjour troopers87 et

Une solution parmi d'autres

47troopers87.xlsm (18.03 Ko)

A+

Bonjour Frangy,

pardon pour le retard dans ma réponse, j'ai un emploi du temps très/trop chargé ! Merci beaucoup pour ta réponse et mon intérêt.

ta solution est très similaire à celle à laquelle j'avais pensé au début... Malheureusement, elle ne prend pas en compte la situation où il n'y aurait aucune donnée dans la base... As-tu une solution simple pour corriger ce défaut ?

Je mets en pièce jointe la dernière version du fichier fonctionnel.

30troopers-v2.xlsm (21.44 Ko)

Bonojur troopers87,

Une autre tentative alors

34troopers87-2.xlsm (18.37 Ko)

A+

Merci ! C'est exactement ce qu'il me fallait !

Par curiosité, pourrais-tu m'expliciter le principe des premières lignes de codes ?

Dim DerLig As Long, LigneAjout As Long, Indice As Long

    With Sheets("BD")
        'Dernière ligne renseignée de la colonne B
        DerLig = .Range("B" & Rows.Count).End(xlUp).Row
        If DerLig = 2 Then
            'Ligne sur laquelle doit être effectué l'ajout
            LigneAjout = 3
        Else
            LigneAjout = DerLig + 1
        End If
        Indice = LigneAjout - 2

Merci encore !

Ces lignes de code ne servent (pratiquement) plus à rien. Je m’en suis servi pour les tests.

Tu peux les remplacer par

Dim Indice As Long
    With Sheets("BD")
        Indice = .Range("B" & Rows.Count).End(xlUp).Row - 1

La différence majeure par rapport à ton code initial, c’est que la ligne sur laquelle doit être effectué l’ajout de données est déterminée suivant la colonne B et est unique pour toutes les colonnes.

A+

Rechercher des sujets similaires à "incrementer base donnees plages nommees"