XL 2010 Première cellule vide d'une plage

Phil_2059

XLDnaute Nouveau
Bonjour, Je cherche à activer la première cellule vide au sein d'une plage (navigation de gauche à droite, de haut en bas)...
J'ai trouvé une macro mais qui ne fonctionne pas toujours. Auriez vous une solution ? Merci d'avance de votre aide. Phil.
Sub PremiereCelluleVide()
Set r = Range("Tableau3")
For i = 1 To r.Rows.Count
If r.Cells(i).Formula = "" Then
Set PremiereVide = r.Cells(i)
PremiereVide.Select
Exit Sub
End If
Next
End Sub
 
Solution
Bonjour @Phil_2059 , bienvenue sur XLD :).
Bonjour @chris ;)

En partant de votre code, chacune des macros ci-dessous devrait le faire :
VB:
Sub PremiereCelluleVide()
   Set r = Range("Tableau3")
   For i = 1 To r.Count     ' r contient r.Count cellule et non  r.Rows.Count (nombre de ligne)
      If r.Cells(i).Formula = "" Then Set PremiereVide = r.Cells(i): PremiereVide.Select: Exit Sub
   Next i
End Sub

Sub PremCellVide()
   For Each x In Range("Tableau3")
      If x.Formula = "" Then Set PremiereVide = x: x.Select: Exit Sub
   Next
End Sub

Cette dernière est la plus rapide (respectivement 4,1 s ; 2,3 s ; 0,25 s pour un tableau de 1 million de cellules avec les cellules vides vers...

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Phil_2059 , bienvenue sur XLD :).
Bonjour @chris ;)

En partant de votre code, chacune des macros ci-dessous devrait le faire :
VB:
Sub PremiereCelluleVide()
   Set r = Range("Tableau3")
   For i = 1 To r.Count     ' r contient r.Count cellule et non  r.Rows.Count (nombre de ligne)
      If r.Cells(i).Formula = "" Then Set PremiereVide = r.Cells(i): PremiereVide.Select: Exit Sub
   Next i
End Sub

Sub PremCellVide()
   For Each x In Range("Tableau3")
      If x.Formula = "" Then Set PremiereVide = x: x.Select: Exit Sub
   Next
End Sub

Cette dernière est la plus rapide (respectivement 4,1 s ; 2,3 s ; 0,25 s pour un tableau de 1 million de cellules avec les cellules vides vers la fin du tableau) :
Code:
Sub PremCelluleVide()
   Set r = Range("Tableau3"): t = r.Value
   For i = 1 To UBound(t): For j = 1 To UBound(t, 2)
      If t(i, j) = "" Then
         If r.Cells(i, j).Formula = "" Then Set PremiereVide = r.Cells(i, j): PremiereVide.Select: Exit Sub
      End If
   Next j: Next i
End Sub
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @fanch55 ;) ,

Et avec l'instruction ci-dessous, cela ne marche pas ? VB:
VB:
[Tableau3].SpecialCells(xlCellTypeBlanks).Select
Sauf dans un seul cas. Celui de la "chaine vide". Ce cas est illustré dans le fichier joint. Et pour l'instant, MS n'a pas fourni de fonction pour contourner cet écueil de manière concise.
 

Pièces jointes

  • fanch55- Prem Cell Vide- n1.xlsm
    16.3 KB · Affichages: 19

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @cp4,

Effectivement, les deux écritures ne sont pas équivalentes :

  • Dans le cas d'un tableau structuré, Range("Tableau3") représente les données du tableau sans la barre de titre.
  • Dans le cas d'une plage nommée, Range("Tableau3") représente les données du tableau y compris la barre de titre.

Je n'ai vu nulle part que c'était un tableau structuré dans la question.
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour à tous,

Sur 1 000 000 de cellules chez moi :

- la dernière macro de mapomme post #3 s'exécute en 0,27 seconde.

- celle-ci en 0,45 seconde :
VB:
Sub RechercheCelluleVide()
On Error Resume Next
Range("Tableau3").Find("", , xlValues, , xlByRows).Select
End Sub
A+
 

fanch55

XLDnaute Barbatruc
Bonjour @fanch55 ;) ,

Sauf dans un seul cas. Celui de la "chaine vide". Ce cas est illustré dans le fichier joint. Et pour l'instant, MS n'a pas fourni de fonction pour contourner cet écueil de manière concise.
Salut @mapomme ,
En fait ce n'est pas la chaine vide qui pose problème, c'est sa couleur de fond :
il semblerait que la fonction considère que xlCellTypeBlanks ne s'applique pas à une cellule dont la couleur n'est pas "automatique" alors qu'aucun problème avec l'encadrement, allez comprendre.....:mad:

Edit: je comprends plus , j'ai voulu vérifier, je ne reproduis plus le même problème ou cela devient aléatoire ... vraiment une fonction à fuir ...
 
Dernière édition:

Discussions similaires

Réponses
0
Affichages
137

Statistiques des forums

Discussions
312 106
Messages
2 085 352
Membres
102 871
dernier inscrit
Maïmanko