Pb en utilisant Range("B2, D5")

  • Initiateur de la discussion Initiateur de la discussion coco_lapin
  • 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 !

coco_lapin

XLDnaute Impliqué
Bonjour le forum.

J'exploite les données de l'onglet historique d'un classeur partagé et je n'arrive pas à travailler les adresses du style B2, D5 (prend en compte les cellules B2 et D5)

Je voudrais, par exemple, écrire '1' en A2 (même ligne que B2) puis '2' en A5 (même ligne que D5) en exploitant les adresses de l'onglet historique.

Je fais:
Cells(Range('B2, D5').Row,1)='1' (écrit 1 en A2)
Cells(Range('B2, D5').Cells(2).Row,1) = '2' (devrait écrire 2 en A5 mais écrit en A3)

J'ai essayé avec .End ou .Cells.Count mais sans succès

Avez-vous des idées?
 
Bonjour Coco_Lapin

Curieux ce bug, je ne connaissais pas. J'ai contourné en utilisant un tableau initialisé par une boucle, l'adressage direct ne fonctionne pas.

A+
Code:
Dim Tab_Cel() As Range, Cel As Range, Compteur As Integer
For Each Cel In Range('B2,D5')
Compteur = Compteur + 1
ReDim Preserve Tab_Cel(1 To Compteur)
Set Tab_Cel(Compteur) = Cel
Next
Cells(Tab_Cel(1).Row, 1) = '1' '(écrit 1 en A2)
Cells(Tab_Cel(2).Row, 1) = '2' '(écrit 2 en A5)
 
Bonjour le matou.

Non je ne t'avais pas oublié.

C'est que mon PC perso n'est plus utilisable (j'ai des virus qui me bloquent Windows) et jeudi j'étais en formation.

Par contre entre 12 et 14H jeudi je suis allé à mon ancienne université (le lieu de mon stage était à coté) histoire de me rappeler l'ancien temps.
A la biliothèque de l'université je me suis connecté sur un PC pour voir si j'avais une réponse à ma question.

Encore miaou et A+
 
Ave,

Tout est OK.....!


''...Cells(Range('B2, D5').Row,1)='1' (écrit 1 en A2)..''

Normal car ''Cells(Range('B2, D5').Row'' renvoie la ligne du 1° élément (B2) de la plage
Donc qu'il y ai :
Cells(Range('B2, IV65000').Row
ou
Cells(Range('B2:M500').Row
le résultat sera toujours identique

''..Cells(Range('B2, D5').Cells(2).Row,1) = '2' (devrait écrire 2 en A5 mais écrit en A3)..''

Non, non le résultat est tout à fait normal car, quand tu écris ça, tu n'écris pas du tout ''la ligne de la dernière cellule de la plage'' !
Cells(Range('B2, D5').Cells(2) renvoie le 2° élément (item) de la plage Range('B2, D5')
C'est l'équivalent de
Range('B2, D5').Item(2)
ou encore
Range('B2')(2)
Or, le 1° élément étant le point de départ (B2), le 2° élèment c'est B3 d'où le résultat logique de ton instruction

Pour avoir un résultat conforme à tes attentes :
Cells(Range('B2, D5').Areas(2).Row, 1) = '2'

AV [aaa]
 
salut Av

un peu bizarre car range('B2,D5') correspond à une multiselection et non à la plage range('B2😀5'), on peut donc logiquement s'attendre à avoir le deuxième élément de l'ensemble et non un élément intermédiaire
une boucle for each ressort deux éléments
un .count ressort deux éléments
pourquoi devrait on avoir 12 éléments en adressage direct ? c'est pour moi une incohérence.
Enfin le principal est de connaitre le pourquoi du comment

Bien cordialement, A+
 
Bonjour AV, Yeahou et le forum.

Merci AV pour ta solution (utilisation de .Areas) qui fonctionne à merveille.

Je suis neanmois d'accord avec Yeahou sur cette bizarrerie d'Excel. Le deuxième élément de Range('B2, D5') devrait être D5 mais comme c'est une multiselection il y a alors surement une restriction.

Merci à vous deux et bon week end.
 
- 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

Discussions similaires

Réponses
5
Affichages
915
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
10
Affichages
792
Retour