Incrémenter les données sur des plages nommées (VBA)

troopers87

XLDnaute Occasionnel
Bonjour à tous,

tout le monde le sait, il est toujours préférable de nommer les plages utilisées, même en VBA. Ici, je bloque lorsqu'il s'agit d'incrémenter les données : j'ai déjà saisi Bob Marley dans l'exemple que je mets en pièce jointe, mais si je tente de rajouter un autre nom, Bob disparaît pour être remplacé par le nouveau nom. Evidemment, l'objectif serait de constituer une base de données où les données s'incrémentent les unes à la suite des autres !

Merci d'avance pour toute votre aide ;)
 

Pièces jointes

  • ExempleV1.xlsm
    17.3 KB · Affichages: 53
  • ExempleV1.xlsm
    17.3 KB · Affichages: 55
  • ExempleV1.xlsm
    17.3 KB · Affichages: 62

troopers87

XLDnaute Occasionnel
Re : Incrémenter les données sur des plages nommées (VBA)

Merci pour ta réponse,

à vrai dire, mon premier jet était particulièrement semblable à ce fil,

Code:
Range("A65536").End(xlUp).Select

mais lorsque la plage est nommée, par exemmple Range("T_Nom"), l'incrémentation ne fonctionne pas, d'où ma question...
 

gilbert_RGI

XLDnaute Barbatruc
Re : Incrémenter les données sur des plages nommées (VBA)

par exemple en prenant 22 la dernière ligne des plages nommées

Private Sub CommandButton1_Click()
'insertion nom
If TB_Nom = "" Then Sheets("BD").Range("b22").End(xlUp)(2) = 0 Else Sheets("BD").Range("b22").End(xlUp)(2) = TB_Nom.Value: TB_Nom = ""
'insertion prénom
If TB_Prenom = "" Then Sheets("BD").Range("c22").End(xlUp)(2) = 0 Else Sheets("BD").Range("c22").End(xlUp)(2) = TB_Prenom.Value: TB_Prenom = ""
'insertion age
If TB_Age = "" Then Sheets("BD").Range("d22").End(xlUp)(2) = 0 Else Sheets("BD").Range("d22").End(xlUp)(2) = TB_Age.Value: TB_Age = ""
'fermer la fenêtre et vider les données mémoires
Unload Me
End Sub

ça fonctionne
 

troopers87

XLDnaute Occasionnel
Re : Incrémenter les données sur des plages nommées (VBA)

Oui, c'est pour ça que mon code est :
Code:
Range("T_Nom").End(xlUP)(2) = TB_Nom

Mon objectif est que Excel repère la plage T_Nom, remonte à la première cellule vide pour y attribuer la valeur de ma textbox :) Malheureusement, quelque soit le contenu de la première cellule (vide ou non), il lui attribue la valeur de la textbox et remplace les données précédentes...

Je pense que la réponse est toute simple : genre offset(0,1), mais je ne trouve pas la solution actuellement.
 

troopers87

XLDnaute Occasionnel
Re : Incrémenter les données sur des plages nommées (VBA)

Je viens de voir ton "double message", d'où le retard dans ma réponse. En fait, ta solution me conviendrait si je ne tenais pas absolument à nommer les plages cibles. Au cas où une colonne serait supprimée, les données n'iraient pas dans la colonne correspondante... N'y a-t-il pas possibilité d'atteindre la première cellule vide d'une plage nommée pour y insérer des données ?
 

gilbert_RGI

XLDnaute Barbatruc
Re : Incrémenter les données sur des plages nommées (VBA)

voilà une procédure pour avoir la dernière ligne d'une zone nommée

Sub test()
'V1 = première ligne de la zone nommée "T_Nom"
V1 = Range("T_Nom").Row
'V2 = nombre de lignes de la zone nommée
V2 = Range("T_Nom").Rows.Count
'V3 = dernière ligne de la zone nommée
v3 = V1 + V2 - 1
' affichage du n° de ligne
MsgBox v3
End Sub
 

kingfadhel

XLDnaute Impliqué
Re : Incrémenter les données sur des plages nommées (VBA)

Voila une autre solution


Code:
Sub F_saisie()

'lancer le formulaire
Do
        If MsgBox("Voulez vous Saisir?", vbYesNo, "Saisie") = vbYes Then
        UserForm1.Show
        Else
Exit Do
End If
Loop While 1 = 1
End Sub


Code:
Private Sub CommandButton1_Click()
Dim DernLigne As Long
DernLigne = Range("B" & Rows.Count).End(xlUp).Row + 1

If TB_Nom = "" Or TB_Prenom = "" Or TB_Age = "" Then
MsgBox ("Tous les champs sont obligatoirs"), vbInformation, "Attention!!"
Else
Range("B" & DernLigne).FormulaR1C1 = TB_Nom
Range("C" & DernLigne).FormulaR1C1 = TB_Prenom
Range("D" & DernLigne).FormulaR1C1 = CDbl(TB_Age)
End If

If MsgBox("Voulez vous Saisir un autre?", vbYesNo, "Saisie") = vbYes Then
TB_Nom = ""
TB_Prenom = ""
TB_Age = ""
Else
Unload Me
End If
End Sub
 

troopers87

XLDnaute Occasionnel
Re : Incrémenter les données sur des plages nommées (VBA)

Bonjour KingFadhel et merci pour ton intérêt,

ta proposition est intéressante mais ne réponds pas vraiment à mon besoin dans le sens où il faut noter la colonne B, C... Je trouvais plus sécurisant de nommer la plage pour qu'il n'y ait pas de décallage au cas où des colonnes soient supprimées/insérées. A partir de ces plages nommées donc, n'est-il pas possible de sélectionner la première cellule vide ?

Enfin, le contrôle de saisie n'est pas un problème pour moi, je compte à l'avenir faire un contrôle de saisie textbox par textbox.
 

troopers87

XLDnaute Occasionnel
Re : Incrémenter les données sur des plages nommées (VBA)

Merci Hasco pour cette tentative... malheureusement, cette solution risque de totalement bouleverser la structure de mon fichier initial... En fait, cette problématique de plages nommées découle d'un autre fil : https://www.excel-downloads.com/thr...base-de-donnees-a-partir-dun-userform.212664/ qui peut-être vous permettra de mieux comprendre mon problème. Du coup, je vous propose de clôturer ce topic pour éviter le double post.
 

kingfadhel

XLDnaute Impliqué
Re : Incrémenter les données sur des plages nommées (VBA)

Note: les plages comptent chacun 20 cellules il faut réfléchir à une extension

j'espère que la solution proposée te fais l'affaire.
 

Pièces jointes

  • ExempleV1-1 king.xlsm
    17.1 KB · Affichages: 71

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin