• Initiateur de la discussion Initiateur de la discussion MangePasDpain
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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
 
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é
 
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
 
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....!
 
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
 
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
 
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
 
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.
 
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
 
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é
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Combobox
Réponses
6
Affichages
203
Réponses
5
Affichages
549
Retour