Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

chris

XLDnaute Barbatruc
Bonjour

On suppose que Tableau3 est un tableau structuré

Dans ce cas il ne doit pas contenir de ligne vide et on peut facilement se placé à la fin tout en crénat une nouvelle ligne...
 

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:

cp4

XLDnaute Barbatruc
Bonjour Phil_2059, Chris, Mapomme,

@Phil_2059 : Moi j'ai testé ton bout de code. Il fonctionne bien si on rajoute le nom de la feuille avant tableau3, soit
VB:
'feuil1 =feuille où se trouve le tableau3'
r=feuill1.Range("Tableau3")
Bonne journée.
 

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

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
155
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…