Cellule vide

M

MangePasDpain

Guest
Bonjour à tous,

je cherche à sélectionner à l'aide d'une macro la première cellule vide d'une ligne.

Je croyais pouvoir le faire en une seule ligne....mais ca marche pas

Range("A1").End(xlRight).Offset(0, 1).Select

Dès qu'il y a plus de 2 cellules "pleines" ,j'obltiens un message d'erreur.

Si vous avez une petite idée sur le pourquoi de l'erreur ou une solution alternative......

Merci de vos réponses.
 
P

Patrick

Guest
Bonjour,

Je suppose que tu commences à remplir les cellules d'une ligne de gauche à droite.

Dans ce cas, le code suivant devrait répondre à ton problème:
au lieu de partir de gauche et chercher la première cellule vide, pars de la droite et cherche la première cellule remplie et puis déplace toi d'un position vers la droite.

Cells(1, 256).end(xltoleft).offset(,1).select

Salutations
 
J

jmps

Guest
Bonjour MangePasDpain, Bonjour Patrick,

Bien vu Patrick. Par ailleurs, dans la formule de MangePasdPain, c'est xlToRight qui convenait et non pas xlRight.
Mais même avec la bonne constante, quand on a une seul cellule remplie (A1), le .End renvoie en colonne IV et le .Offset (0,1) plante car il cherche une colonne qui n'existe pas.

Bonne journée.

José
 
P

Pascal76

Guest
Re et Bonjour José et Patrick

Bon en effet avec

Range("A1").End(xlToRight).Offset(0, 1).Select

cela doit marcher

Par contre pour la formule de patrick elle donnera la "première dernière" cellule vide. Si il y a un "trou" par exemple colonne C vide mais pas D elle ne selectionnera pas C1

Bonne journée

Pascal
 
M

MangePasDpain

Guest
Bonjour à tous,

merci de vos réponses.

On a toujours l'air un peu con quand le problème sur lequel on bute depuis quelques jours est en fait un problème de syntaxe..........

XlToRight et ca merche....!
 
S

Solenfou

Guest
Bonjour,

si j'ai bien compris la demande initiale de MangePasDePain, le but est de mettre dans la première cellule vide de chaque ligne pour par exemple y écrire quelque chose.

Voici ma proposition:


On suppose que la colonne A est remplie et qu'on a nommé la feuille sur laquelle on travaille (MaFeuille).

On fait la recherche à l'envers, on part de la colonne "IV" et non pas de A.
On va écrire "TOTO" avec le numéro de ligne dans chaque première cellule vide de ma feuille.


Sub SelectionnerCellVide()
Dim TheFirstCol As Range
Dim CellVide As Range
Dim i As Byte

With MaFeuille
Set TheFirstCol = .Range("a1:a" & .Range("a255").End(xlUp).Row)
For i = 1 To TheFirstCol.Count
Set CellVide = .Cells(i, .Range("iv" & i).End(xlToLeft).Column + 1)
CellVide = "TOTO" & " " & i
Next i
End With

End Sub


ça devrait résoudre ton problème


@+
Solenfou
 
P

Pascal76

Guest
Bonjour Solenfou

POurquoi pas sil il faut le faire sur toutes les lignes mais 2 petits points néanmoins si tu permets

1 - je ne comprends pas le :
Range("a255").End(xlUp).Row
Pourquoi A255 ???? pourquoi pas A65536 car plus de 255 lignes ça arive souvent

2 - avec ceci
Range("iv" & i).End(xlToLeft).Column + 1
Voir ma remarque du post de 09:52 car ceci te donne non la première cellule vide mais la première du dernier groupe de cellules vides

Bonne journée

Pascal
 
S

Solenfou

Guest
Bonjour Pascal76,

en réponse à tes remarques, le range("a255") c'est parceque j'ai dimensionné mon "i as byte" donc la valeur maxi est 256.
Je suis d'accord avec toi que l'on peut avoir des tableaux bien plus long, mais dans ce cas on doit dimensionner notre "i" en fonction de ce qu'on va traiter comme nombre de lignes. Pas la peine de surdimensionner une variable, à mon avis.



Pour le point 2, en utilisant la methode XltoRight on peut faire ceci:

Sub SelectionnerFisrtCellVide()
Dim TheFirstCol As Range
Dim CellVide As Range
Dim i As Byte

With MaFeuille
Set TheFirstCol = .Range("a1:a" & .Range("a255").End(xlUp).Row)
For i = 1 To TheFirstCol.Count

If .Cells(i, 2) = "" Then
Set CellVide = .Cells(i, 2)
Else
Set CellVide = .Cells(i, .Range("a" & i).End(xlToRight).Column + 1)
End If
CellVide = "TOTO" & " " & i
Next i
End With

End Sub



Merci pour tes remarques

@+

Solenfou
 
M

MangePasDpain

Guest
Merci jmps,j'ai bien enregistré

Comme je vois que vous avez l'air bien réactif ce matin,je me permet de rajouter ne question:
Pourquoi ca marche pas ?
Comment on utilise une variable avec Range ?

Dim ent As Integer

Range((vll.Offset(0, -(ent.Value)).Address)).Select

Merci de vos réponses.
 
B

Bricofire

Guest
Bonjour le fil,

C'est du à la la nature objet de "Range", si tu veux pouvoir y utiliser des variables, il faut utiliser la propriété Cells qui elle manipule sans pb les variables quoique de nature androgyne ...

Range(Cells(r,c),Cells(r,c)) = Range ("x,y") mais les arguments de Cells permettent les variables ....

A partir de ce momentlà tu peux faire des constructions assez "sioux" :)

Bfr
 
J

jmps

Guest
Re MangePasDpain,

Arf ! Pourquoi ? Je ne suis pas réactif d'habitude ? Lol !

Pour ta première question, si j'ai bien compris, qui se rapporte au fait que ça plante quand on n'a que A1 de rempli sur la ligne, c'est parce que le .End(xlToRight) se comporte comme si tu te plaçais en A1 et que tu appuyais sur les touches "Fin" et "Flèche droite". Tu verras qu'il va se positionner tout au bout du tableau en colonne IV. Et comme derrière, le .Offset lu dit de sélectionner la colonne suivante et que celle-ci n'existe pas, c'est le clash. Par contre toujours en A1 avec une donnée en A2, tu refais "Fin" et "Flèche droite", il te positionne bien en A2. Voilà.

Pour ta seconde question, ent est une variable que tu déclares par Dim. Donc tu ne dois pas mettre .Value derrière. En fait ta syntaxe n'est pas bonne du tout. Si je comprends tout encore une fois, tu cherches à sélectionner à partir d'une variable vll (que je ne voie ni déclarée ni initialisée) qui contient une adresse du genre "G15", une cellule décalée de 0 lignes et x colonnes à gauche (x étant le contenu de ta variable ent, que je ne vois pas non plus initialisée). Donc j'écrirais plutôt ça :

Range(vll).Offset(0, -ent).Select

Et en me relisant, je crois que je suis bon pour le ZOP ! Arf !

Si tu ne m'as pas suivi (moi j'ai du mal Pffffff !), explique-moi plutôt ce que tu cherches à faire.

Bon appétit
A+

José
 

Discussions similaires

Statistiques des forums

Discussions
312 838
Messages
2 092 669
Membres
105 482
dernier inscrit
Eric.FKF