J'ai un tableau dans lequel je stocke des données et il m'arrive de supprimer certaines et du coup il ya des lignes vides qui restent entre des lignes renseignées.
La question est comment faire pour enregistrer (via userform) dans la première ligne (ou cellule) vide trouvée?
J'ai essayé avec
VB:
Dim Ligne as long
Ligne = Range("D" & Rows.Count).End(xlUp).Offset(1).Row 'sélection de la première cellule vide de la colonne D
Cells(Ligne, 3) = cbxCivil.Value
Cells(Ligne, 4) = txtNom.Value
...
mais il ne fonctionne pas du tout
Forme du tableau
Code:
NOM VILLE DATE
albert ville1 date1
Joss ville2 date2
Roland ville4 date4
patrick ville6 date6
Pour varier les plaisirs, une autre syntaxe possible
VB:
Sub Macro1()
Dim ligne As Long
On Error GoTo Erreur_Malheur
ligne = Columns(4).SpecialCells(xlCellTypeBlanks).Item(1).Row
MsgBox ligne
Exit Sub
Erreur_Malheur:
MsgBox "Pas de cellules vides dans la colonne D du tableau!", vbCritical, "Erreur"
End Sub
Bonjour! cette solution ne fonctionne pas, j'arrive à écrire sur la première ligne vide mais lors du prochain enregistrement, les données sont réécrites sur la même ligne que précédemment.
Pour varier les plaisirs, une autre syntaxe possible
VB:
Sub Macro1()
Dim ligne As Long
On Error GoTo Erreur_Malheur
ligne = Columns(4).SpecialCells(xlCellTypeBlanks).Item(1).Row
MsgBox ligne
Exit Sub
Erreur_Malheur:
MsgBox "Pas de cellules vides dans la colonne D du tableau!", vbCritical, "Erreur"
End Sub
Dim Ligne as Long
Ligne = Columns("D").SpecialCells(xlCellTypeBlanks).Item(1).Row
Cells(Ligne, 3) = cbxCivil.Value
Cells(Ligne, 4) = txtNom.Value
Cells(Ligne, 5) = cbxSex.Value
...
Bonjour! cette solution ne fonctionne pas, j'arrive à écrire sur la première ligne vide mais lors du prochain enregistrement, les données sont réécrites sur la même ligne que précédemment.
kinguepat
Si tu avais joint un fichier exemple dans ton premier message, on n'en serait pas au 10ième message
PS: Si on se base sur ton bout de tableau (cf message#1)
La colonne D est vide...
Sinon, je confirme que le code de dg62 donne le même résultat que le mien
Voir avec cette macro
VB:
Sub limation()
Dim ligne&
ligne = Range("A1").End(xlDown).Offset(1, 0).Row
MsgBox ligne, vbInformation, "Test dg62"
ligne = Columns(1).SpecialCells(xlCellTypeBlanks).Item(1).Row
MsgBox ligne, vbInformation, "Test Staple"
End Sub
Donc effacer(au hasard) le contenu de A4
alors ligne = Columns(1).SpecialCells(xlCellTypeBlanks).Item(1).Row trouvera 4
tout comme la syntaxe de dg62 ligne = Range("A1").End(xlDown).Offset(1, 0).Row
[/humour du dimanche aprés-midi]
PS: Ceci dit dans mes propres tableaux (ceux du taf); je n'ai jamais de lignes vides
Sub LigneVide()
Dim tablo, ligne
tablo = Columns(1) 'matrice, plus rapide
For ligne = 1 To UBound(tablo)
If IsEmpty(tablo(ligne, 1)) Then Exit For
Next
End Sub
Testé avec la colonne A pleine, la ligne 1048576 est atteinte en 0,48 seconde chez moi, c'est jouable.