XL 2016 écrire dans première cellule vide

kinguepat

XLDnaute Nouveau
Bonsoir!!!

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
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil,

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
 

kinguepat

XLDnaute Nouveau
Bonjour le fil,

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

Merciiii:);) cette solution fonctionne

VB:
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
...
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

kinguepat
Si tu entends une plage définie, comme une plage nommée, voir le petit exemple ci-dessous
VB:
Sub Test()
'création d'une plage nommée
Columns("A:C").Name = "titi"
mess = "Nom plage: " & [titi].Name.Name & Chr(13)
mess = mess & "Adresse de la plage nommée: " & [titi].Address(0, 0)
MsgBox mess, vbInformation
'suppression d'une plage nommée
ThisWorkbook.Names("titi").Delete
End Sub
NB: A tester sur un classeur vierge
 

Staple1600

XLDnaute Barbatruc
Re, bonjour dg62

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
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour à tous,

Une remarque sur la solution de Staple1600 : la méthode SpecialCells ne recherche que sur le UsedRange.

Prenez une feuille vierge et remplissez la plage A1:A10.

ligne = Columns(1).SpecialCells(xlCellTypeBlanks).Item(1).Row ne trouvera pas la ligne 11...

A+
 

Staple1600

XLDnaute Barbatruc
Bonjour job75

[humour du dimanche aprés-midi]
Prenez une feuille vierge et remplissez la plage A1:A10.
puis faites ce qu'explique kinguepat dans son message#1
il m'arrive de supprimer certaines et du coup il ya des lignes vides qui restent entre des lignes renseignées.
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 ;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir,

pour le fun,

A l'opposé, si on remplit A1:A9, si on vide la cellule A4, si on masque la ligne 4 (ce cas se rencontre lors des filtrages) alors :
  • ligne = Range("A1").End(xlDown).Offset(1, 0).Row ne fonctionnera pas (affiche 10)
  • et ligne = Columns(1).SpecialCells(xlCellTypeBlanks).Item(1).Row fonctionnera (affiche 4)
 

job75

XLDnaute Barbatruc
Cette solution fonctionne dans tous les cas :
VB:
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.

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 708
Messages
2 081 750
Membres
101 812
dernier inscrit
trufu