Détermination de ligne pour insertion
Bonjour le forum,
J'aurais besoin d'un oeil expert pour finaliser mon USF.
J'ai un souci sur mon USF lors de la validation du formulaire, j'ai toujours un bug sur la détermination de ma ligne non vide pour l'insertion des données sur ma feuille ...
Private Sub ValiderButton_Click()
'création variable pour intégration en fin de bdd
Dim no_ligne As Integer, rg As Range
Set rg = Range("bdd_bon_materiel")
'n°ligne de la dernière cellule non vide
no_ligne = rg.End(xlDown).Row + 1
'Insertion des valeurs dans la feuille Bon Materiel
rg.Cells(no_ligne, 1) = "Agent"
rg.Cells(no_ligne, 2) = ComboBox_depart_article.Value
rg.Cells(no_ligne, 3) = ComboBox_depart_noGeniclime.Value
rg.Cells(no_ligne, 4) = ComboBox_depart_agent.Value
rg.Cells(no_ligne, 5) = LabelDate.Caption
rg.Cells(no_ligne, 6) = TextBox_observation.Value
Unload Me
End SubMerci d'avance à la personne qui pourra m'aider
Bonjour,
Bonne année,
Remplacer :
no_ligne = rg.End(xlDown).Row + 1par :
no_ligne = rg.End(xlUp).Row + 1Merci Pijaku,
C'était plutôt une erreur dans la déclaration de ma variable no_ligne (numéro de ligne à reviser pour ma part
C'était plutôt une erreur dans la déclaration de ma variable no_ligne
Non.
Tu as déclaré, dans ton gestionnaire de noms, le Range "bdd_bon_materiel" pour toute la plage A2:F1048576.
Donc l'écriture : rg.End(xlDown).Row "part" de la dernière cellule de ton Range, ligne 1048576 et "descend" (comme il ne peut réellement descendre, il reste sur cette ligne).
Ton résultat est donc no_ligne = 1048576.
Si, au lieu de "descendre", tu lui dit de "remonter" (rg.End(xlUp).Row), il va te trouver ta dernière ligne.
Pour pallier à tout cela, j'ai pris l'habitude d'utiliser une fonction ad hoc :
Public Function derlig_reelle(plage As Range) As Long
If WorksheetFunction.CountA(plage) = 0 Then derlig_reelle = plage.Cells(1, 1).Row: Exit Function
derlig_reelle = plage.Find("*", , , , , xlPrevious).Row
End FunctionFonction que tu peux appeler dans ton code comme ceci (par exemple) :
Dim DL As Long
With Worksheets("Feuil1")
DL = derlig_reelle(.Cells)
'ou :
'DL = derlig_reelle(.Columns(1)) De toutes manières, la meilleure solution consiste à utiliser les outils actuels et, donc, les tableaux structurés.
Cela évite :
> de gérer de grandes plages inutilement,
> de rendre son code caduque lors de déplacement de tableaux...