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

Microsoft 365 sélectionner plusieurs cellules

Usine à gaz

XLDnaute Barbatruc
Bonjour à toutes et à tous,
Je vous souhaite une belle journée

Je bute encore sur un code simple et je n'arrive par à comprendre pourquoi ça ne fonctionne pas.
Pourtant ce code fonctionne parfaitement dans mes autres fichiers :
VB:
Sub choix()
    Range(ActiveCell.Offset(0, -10), ActiveCell.Offset(0, -2)).Select
End Sub
Et dans le fichier dans lequel je souhaite insérer, rien à faire ça ne marche pas et je n'y comprends rien
J'ai une erreur :

Pourriez-vous m'aider ?
Je ne peux pas joindre le fichier avec lequel ça ne marche pas car il est trop gros.
Je joins un p'tit fichier test qui fonctionne,
Un grand merci à vous tous,
lionel,
 

Pièces jointes

  • test.xlsm
    22.7 KB · Affichages: 11

soan

XLDnaute Barbatruc
Inactif
Bonjour Lionel,

à partir de la cellule active, ton instruction sélectionne la plage qui est sur la même ligne, 10 colonnes à gauche de ActiveCell jusque 2 colonnes à gauche de ActiveCell ➯ même si la compilation est ok, y'a plantage lors de l'exécution si y'a pas au moins 10 colonnes à gauche, car ça serait à gauche de la 1ère colonne A ! or y'a ni colonne de n° 0, ni colonne de n° négatif !

et j'peux te dire tout ça sans même avoir eu besoin de télécharger ton fichier !

soan
 

soan

XLDnaute Barbatruc
Inactif
ajout : pour ActiveCell - 2 colonnes : idem ; comme il doit y avoir au moins 2 colonnes à gauche, la cellule active doit être en colonne C ou plus à droite pour qu'il n'y aie pas de plantage ; conclusion : faut toujours faire attention à ce genre de références relatives. (même si ça n'a rien à voir avec la théorie d'la relativité)

pour ActiveCell - 10 colonnes, la colonne minimum est : K ; J ou plus à gauche ➯ plantage !

soan
 

Usine à gaz

XLDnaute Barbatruc
Pourtant, dans le fichier joint, il y a bien 10 colonnes à gauche et le code :
"Range(ActiveCell.Offset(0, -10), ActiveCell.Offset(0, -2)).Select" a bien des signes négatifs.
Et ça fonctionne !
As-tu testé mon fichier ?
lionel,
 

soan

XLDnaute Barbatruc
Inactif
@Lionel

j'ai pas testé ton fichier, mais : a) la syntaxe de l'instruction est correcte ; b) cette instruction ne modifie pas la feuille de calcul, donc elle s'exécute même au cas où la feuille serait protégée ; c) cette instruction ne peut planter lors de l'exécution que si c'est pas possible de sélectionner la plage, ce qui est le cas si au moins une des cellules de la plage à sélectionner est « en dehors » de l'écran, c'est-à-dire n° ligne < à 1 ou > 1048576 et / ou colonne < A ou > XFD : n° colonne < 1 ou > 16384.

avec .Offset(), les signes négatifs sont pour dire : ligne(s) au dessus ou colonne(s) à gauche ; nombres positifs = ligne(s) en dessous ou colonne(s) à droite.​

soan
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Pourtant, dans le fichier joint, il y a bien 10 colonnes à gauche et le code :
"Range(ActiveCell.Offset(0, -10), ActiveCell.Offset(0, -2)).Select" a bien des signes négatifs.
Et ça fonctionne !
ActiveCell.Offset(0,-10) renvoie quoi comme valeur dans ce cas ?
Est-ce que ça ne renvoie pas le contenu de la cellule qui est 10 colonnes à gauche de la cellule active ???


Tu veux faire quoi avec ton Range(ActiveCell.Offset(0, -10), ActiveCell.Offset(0, -2)).Select ?

Est-ce que ce n'est pas plutôt un truc du genre ActiveCell.Offset(-10, -2).Select que tu veux effectuer ???
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour Marcel,

tu as écrit : « Est-ce que ça ne renvoie pas le contenu de la cellule qui est 10 colonnes à gauche de la cellule active ??? »

c'est exact, et j'ai vu que tu en as trouvé la confirmation dans mon post #2.



tu as écrit : « Tu veux faire quoi avec ton Range(ActiveCell.Offset(0, -10), ActiveCell.Offset(0, -2)).Select ? »

très bonne question ! je crois que Lionel veut essayer de créer une autre usine à gaz. (la 1ère ne lui suffit plus : il veut ouvrir une autre « succursale ») ; nan, sérieux : je rappelle à Lionel qu'il vaut mieux éviter d'utiliser Select chaque fois que possible ; donc, bien sûr, sauf si c'est le but même de l'instruction : sélectionner une feuille donnée ; ou sélectionner une cellule donnée ; et point final ; mais dans le cas présent, tu as sans doute voulu sélectionner ta plage pour faire dessus une opération, comme par exemple une copie dans le presse-papiers de Windows ; dans ce cas, fais directement l'opération sans utiliser Select : TaPlage.Copy au lieu de TaPlage.Select suivi de Selection.Copy​

soan
 

TooFatBoy

XLDnaute Barbatruc
c'est exact, et j'ai vu que tu en as trouvé la confirmation dans mon post #2.
Non, je n'avais pas compris ça dans #2.
Pardon, camarade, mais je crois que tu n'as pas compris le sens exact de ma question.
Mais je viens de trouver la réponse à ma question sur le site de Microsoft...


En revanche, en relisant le titre de ce fil, je crois voire à peu près ce que veut faire le Yoyo.
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Marcel

dans mon post #2, j'avais écrit : « à partir de la cellule active, ... 10 colonnes à gauche de ActiveCell » ; mais c'était pas évident d'le voir car y'avait ça entre les deux : « ton instruction sélectionne la plage qui est sur la même ligne, » ; et ma phrase était un peu longue.

le titre est « sélectionner plusieurs cellules », et dans son post #1, Lionel a écrit : « dans le fichier dans lequel je souhaite insérer... » ; aussi, j'ai bien l'impression qu'il s'agit de copier une plage de données d'un fichier Excel dans un autre ; mais perso, j'préfère travailler que sur un seul fichier Excel à la fois : c'est déjà bien assez pour moi. (et c'est vraiment exceptionnel quand j'fais un code VBA pour plus d'un fichier Excel en même temps)

soan
 

TooFatBoy

XLDnaute Barbatruc
Donc c'est bien ce que je disais précédemment : tu n'as pas compris exactement ce que je voulais dire dans ma question. Mais ce n'est pas grave puisque j'ai trouvé la réponse directement chez Microsoft.
 

soan

XLDnaute Barbatruc
Inactif
@Marcel

je crois qu'j'ai compris le sens de ta question :

* ActiveCell.Offset(0, -10) = ActiveCell.Offset(, -10) = à partir de la cellule active, retour de la cellule qui est sur la même ligne, 10 colonnes à gauche

* ActiveCell.Offset(0, -2) = ActiveCell.Offset(, -2) = à partir de la cellule active, retour de la cellule qui est sur la même ligne, 2 colonnes à gauche

* Range(Cells(...), Cells(...)) est une forme spéciale de Range() pour dire : la plage qui va de telle cellule à telle cellule ; sur une feuille de calcul, l'équivalent est quand on met par exemple : D5:L5

soan
 

TooFatBoy

XLDnaute Barbatruc
Il me semble que Yoyo parle d'insérer le code dans son fichier qu'il ne peut joindre car trop gros.
 

Usine à gaz

XLDnaute Barbatruc
Bonjour Marcel32,
Re- Soan,

C'est Yoyo
@ Marcel ton code ne fonctionne pas, je joins le fichier test avec ton code inclus.
"Il me semble que Yoyo parle d'insérer le code dans son fichier qu'il ne peut joindre car trop gros. "
Exact marcel : dans tous mes autre fichiers (y compris dans le fichier joint, ça marche et pas dans dans le fichier que je ne peut pas joindre car il est trop gros.

Je prendrai le temps de tout lire ce soir.
Merci à vous deux,
Yoyo
 

Pièces jointes

  • test.xlsm
    23.7 KB · Affichages: 2

Discussions similaires

Réponses
40
Affichages
2 K
Réponses
12
Affichages
521
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…