Comment maîtriser RANGE(IVxx) en col ou row ?

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous
Ces derniers temps j’ai souvent été confronté à des recherches de dernières colonnes
ou rangées vides, le forum m’a bien aidé dans des exemples bien précis
Maintenant j’aimerais bien maîtriser par moi-même car je n'ai pas tout compris ,afin de ne pas déranger de trop les XLnautes … et pouvoir aider les nouveaux membres par la suite

A savoir : .RANGE(IV ?).END(xl ?).COLUMN ( ou ROW)
Comme dans mon exemple joint

DerCol = .Range("IV1").End(xlToLeft).Column

Derlig = .Range("IV2").End(xlUp).Row

J’ai un résultat bon et un mauvais !!
Aide EXCEL sur RANGE(IVxx) , pas trouvé ??
Le but :ajouter en feuille1 la ligne B10 de « Lot jour » plus le titre « Lot7 » en I1 dans cet exemple adaptable dans une autre appli. , comme M1 par exemple
J’ai passé pas mal d’heures avec des exemples différents non concluant pour en déduire une explication !!
Quelqu’un peut-il m’expliquer clairement et détaillé la syntaxe et méthode à utiliser quelque soit l’emplacement des cellules recherchées ? ( donc en général) comme si IV1 pour ROW s’applique toujours à A1 ou encore IV2 s’applique à B1 en COLUMN ?
Je pense que cela aidera aussi bon nombres de développeurs qui sollicitent le forum
C’est peut-être un mini tutorial utile pour tous
A vous messieurs ou dames les experts VBA !!!

Merci d’avance et bonne soirée
Hervé
 

Pièces jointes

  • der_col_row.xls
    29 KB · Affichages: 76

PascalXLD

XLDnaute Barbatruc
Modérateur
Re : Comment maîtriser RANGE(IVxx) en col ou row ?

bonjour

alors une fois que l'on comprend les xlup xldown xltoleft xlto right cela va vite

xlup : on remontant
xldown : en descendant
xltoright : en allant vers la droite
xltoleft : en allant vers la gauche

donc dans ton exemple

Derlig = .Range("IV2").End(xlUp).Row

tu te mets en colonne IV en ligne 2 et tucherches la première ligne vide en remontant !!! donc obligatoirement 1

donc si tu utilises
pour connaitre les lignes
xlup le plus courant est de commencer en ligne 65536
xldown le plus courant est de commencer en ligne 1
pour connaitre les colonnes
xltoright le plus courant est de commencer en colonne A
xltoleft le plus courant est de commencer en colonne IV
 

Gorfael

XLDnaute Barbatruc
Re : Comment maîtriser RANGE(IVxx) en col ou row ?

Bonsoir à tous
Ces derniers temps j’ai souvent été confronté à des recherches de dernières colonnes
ou rangées vides, le forum m’a bien aidé dans des exemples bien précis
Maintenant j’aimerais bien maîtriser par moi-même car je n'ai pas tout compris ,afin de ne pas déranger de trop les XLnautes … et pouvoir aider les nouveaux membres par la suite

A savoir : .RANGE(IV ?).END(xl ?).COLUMN ( ou ROW)
Comme dans mon exemple joint

DerCol = .Range("IV1").End(xlToLeft).Column

Derlig = .Range("IV2").End(xlUp).Row

J’ai un résultat bon et un mauvais !!
Aide EXCEL sur RANGE(IVxx) , pas trouvé ??
Le but :ajouter en feuille1 la ligne B10 de « Lot jour » plus le titre « Lot7 » en I1 dans cet exemple adaptable dans une autre appli. , comme M1 par exemple
J’ai passé pas mal d’heures avec des exemples différents non concluant pour en déduire une explication !!
Quelqu’un peut-il m’expliquer clairement et détaillé la syntaxe et méthode à utiliser quelque soit l’emplacement des cellules recherchées ? ( donc en général) comme si IV1 pour ROW s’applique toujours à A1 ou encore IV2 s’applique à B1 en COLUMN ?
Je pense que cela aidera aussi bon nombres de développeurs qui sollicitent le forum
C’est peut-être un mini tutorial utile pour tous
A vous messieurs ou dames les experts VBA !!!

Merci d’avance et bonne soirée
Hervé
Salut
comme PascalXLD est déjà passé, je vais juste dommer la manière de visualiser les commandes VBA sous Excel

Range("Ax").end(xldown)
=>Ax = sélectionné => <Ctrl>+<flèche de déplassement vers le bas)
- A(x+1) vide : Sélectionne la première cellule non-vide de A ou sa dernière cellule (ligne 65536 si colonne A vide) en allant vers le bas
- A(x+1) non-vide et Ax non-vide :sélectionne la dermière cellule juste avant la première cellule vide en allant vers la bas
- A(x+1) non-vide et Ax vide => sélectionne A(x+1)
en plus simple : s'arrête à la dernière cellule avant un changement d'état non-vide / vide et à la première qui suit un changement vide / non-vide où la dernière de la colonne dans le sens de recherche

C'est la même chose pour les autres instructions.

Donc, pour trouver la fin d'une liste dans une colonne, il y a deux solution:
A - Range("A1".end(xldown)
B - Range("A65536").end(xlup)
Mais ces deux solutions ne sont pas identiques en résultats, suivant les conditions que présentent les cellules de la colonne A

Si j'ai des données en A1:A10 uniquement, les 2 solutions me donnent A10
Si j'ai des données en A2:A10 uniquement : A me donnera A2 et B me donnera A10
si j'ai des données en A1:A10 et A15:A20 : A me donnera A10 et B me donnera A20

Il faut donc adapter l'instruction à ce qu'on attend. Et faire des tests supplémentaires suivant le but à atteindre

Quand on utilise les constantes XlUp et XlDown, c'est qu'on est en recherche de ligne(row), puisque le déplacement s'effectue dans le sens vertical.

Dans le sens horizontal, les cellules de départ seront celle de la première colonne (A) ou celle de la dernière (IV) (enfin, généralement) et les constante XlToRight (vers la droite) et XlToLeft (vers la gauche) concerneront une colonne (Column)

On peut utiliser les différentes syntaxes de définition de cellules
Pour trouver la dernière colonne utilisée en ligne 12, je pourrais écrire :
Range("IV12").end(xltoleft)
[IV12].end(xltoleft)
cells(12,256).end(xltoleft)
cells(12,"IV").end(xltoleft)
ce qui revient sous Excel à activer la cellule IV12 (la dernière colonne en ligne 12)
Puis à taper les touches <Ctrl>+<flèche de déplacement gauche>

J'espère avoir été compréhensible

Le range sur lequel on applique la méthode End est l'origine à partir de laquelle on recherche dans le sens précisé par la constante Xl
A+
 
Dernière édition:

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Comment maîtriser RANGE(IVxx) en col ou row ?

Merci à vous 2
Up , down ..etc je comprends sauf que j'ai remarqué que pour trouver la dernière cellule d'une ligne, on part du bas ( Xlup) ? , je suppose 65536 cela afin d'éviter de rencontrer des cellules vides du haut ou cela serait normal dans certaine appli .

Par contre dans mon 1er exemple joint , ou est l'erreur ??

J'en joins un 2eme ou je me creuse la tête depuis tout à l'heure aussi pour trouver le sens de ce fameux .RANGE(IV..) !!!

Gorfael : j'ai un peu de mal à te suivre !!! j'essaye de comprendre la notion de IV en col ou rangée en simple explication !! tu parles de A(x+1) ?? je suis "matheux " mais bon ... je ne vois pas la corrélation

Je vais décortiquer toutes vos explications demain à tête reposée ... mais n'hésitez pas à cooriger et expliquer mes erreurs dans mes exemples joint!
Je pense que concrétement je comprendrais plus vite avec vos remarques dans le VBA

Je vous souhaite une bonne fin de WE

Hervé
 

Pièces jointes

  • trouv_row.xls
    34.5 KB · Affichages: 78

wilfried_42

XLDnaute Barbatruc
Re : Comment maîtriser RANGE(IVxx) en col ou row ?

bonjour à tous

tu te mellanges entre ligne et colonne

quand tu testes range("IV1").end(xltoleft).column cela te donnes la derniere colonne utilisée dans la ligne 1
quand tu testes range("B65536").end(xlup).row cela te donne la derniere ligne remplie de la colonne B

Quand on met IVx, on cherche une colonne dans la ligne x

quand on met x65536, on cherche une ligne dans la colonne x

dans ton cas, tu veux la ligne 3 de la colonne B

Range("B65536").end(xlup).row te donne 2
en ajoutant 1
Range("B65536").end(xlup).row + 1 te donne 3
 

herve62

XLDnaute Barbatruc
Supporter XLD
Re : Comment maîtriser RANGE(IVxx) en col ou row ?

Bonjour à tous
Merci Banzai & Wilfried
Ca y est !! là je comprends mieux , bonnes explications
Je pense que cela va m'aider par la suite
Si je ne dis pas de bétise ... : je peux faire
Range("B1").end(xldown).row ?
qui me donnerait 100 par exemple si mes 1eres données se trouvent en B100
Bonne journée
Hervé
 

Discussions similaires

Statistiques des forums

Discussions
312 753
Messages
2 091 676
Membres
105 043
dernier inscrit
Gum110