Renvoyer une donnée à trois cellules présélectionnées.

  • Initiateur de la discussion monsieurPatate
  • Date de début
M

monsieurPatate

Guest
Bonjour aux lecteurs du forum,

J'ai codé un évènement qui fait en sorte que lorsque je clic droit dans une cellule; j'affiche une liste; je sélectionne un élément puis cet élément est envoyé à la cellule active (activement).
Mais si je veux renvoyer mon info dans 3 cellules présélectionnées, ça ne fonctionne pas (ça ne fonctionne que pour une des trois cellules présélectionnées)
Avez-vous une piste de solution à me proposer?

Merci et bonne journée.
 
@

@+Thierry

Guest
Hello Yves, le Forum

Tiens alors tout va bien depuis le temps ?

Bon si tu sais d'avance qu'elles sont les deux autres cellules autour de celle sélectionnée, pas de problème avec un Offset... Mais si par contre tu ne sais pas et si pire encore, ta sélection n'est pas contigue, là il te faut une macro dont seul Ti a le secret !! lol

Mais pour faire écrire un truc sur les trois cellules si on convient que la première et celle du haut et que les deux autres sont celles située respectivement une et deux Rows en dessous, voici ce que çà donnerait :

Sub TwoCellsUnder()
Dim TheTexte As String

TheTexte = InputBox("Taper quelque chose !")


With ActiveCell
.Value = TheTexte
.Offset(1, 0) = TheTexte
.Offset(2, 0) = TheTexte
End With
End Sub

Et si c'est pour les 2 cellules vers la droite alors
.Offset(0, 1) = TheTexte
.Offset(0, 2) = TheTexte

Mais il est probable que tu cherches plus compliqué...

Bon Travail... au fait les "Comments" çà va bien alors ?
@+Thierry
 
M

monsieurPatate

Guest
Salut, @thierry, le forum,

toujours au clavier au grand plaisir des lecteurs.

Ça va très bien surtout que la saison de golf est à nos portes et que les séries de Hockey sont suivies avec beaucoup d’enthousiasme (accompagné bien sûr d’une bonne bière bien froide)

En fait, mon user peut cliquer sur une ou plusieurs cellules que je ne connais pas bien sûr. Elle peuvent être adjacente ou séparé par plusieurs colonnes; je dois probablement ramasser les cellules sélectionnées à l’intérieur d’une variable mais je ne sais comment

Pour les commentaires, c'est super! Ça fonctionne à merveille.
Mais je réalise que c'est plus compliqué diffuser mon code aux utilisateurs qui n'ont pas nécessairement le dernier service pack de Office 2000. Excel non ‘patché’ est beaucoup moins stable qu'avec le correctif SP3.
En plus, Office 2000 sans aucun service pack ne reconnaît pas l'encryptage de mon module vba protéger par un mot de passe :(
Je dois donc vendre en plus les mérites des correctifs Microsoft.

Bye!
 
L

LaurentTBT

Guest
Bonsoir à tous,

je ne comprends pas, je viens de faire un essai tout bête:

Selection="The text"

Et bien si la sélection réalisée avant le lancement de la macro comprend plusieurs cellules (même non adjacentes), "The text" se met bien partout!
Est-ce que cela ne suffit pas? ou alors j'ai raté un épisode.

@+

Laurent
 
@

@+Thierry

Guest
Allo Allo Ici @+Thierry, en Direct de la page 2,124,545,454,545 de l'aide VBA ...

Arf c'est loin là, et j'ai même pas une bière fraiche !! lol

Bon voici en Direct de l'aide :

Sub TestNonContigousTwo()
Dim TheTexte As String
Dim RangeToUse As Range, SingleArea As Range

TheTexte = InputBox("Taper quelque chose !")


Set RangeToUse = Selection
If RangeToUse.Areas.Count = 1 Then
MyOperation RangeToUse, TheTexte
Else
For Each SingleArea In RangeToUse.Areas
MyOperation SingleArea, TheTexte
Next
End If
End Sub

Sub MyOperation(Plage As Range, Text As String)
Plage = Text
End Sub


Bon alors cette bière fraiche......... !

Bon Aprèm
@+Thierry

PS salut Laurent !! (j'ai même pas testé ce que tu dis je vais voir çà ! )
 
@

@+Thierry

Guest
Re à tous !!

A noter, of course, que ce que dit Laurent fonctionne, mais franchement pourquoi chercher Midi à Quatorze Heure !!! (c'est le propre des développeurs je crois, et de toutes manière c'est pour çà que les journées ne sont jamais assez longues !!)

Sub LOL_Laurent()
Dim TheTexte As String
Dim RangeToUse As Range, SingleArea As Range

TheTexte = InputBox("Taper quelque chose !")

Selection = TheTexte
End Sub

Mais bon le Multi Actions sur une Selection Non-Contigüe que j'ai déniché au dessus pourra sûrement nous être untile un jour ou l'autre...

Extrait de l'aide VBA US :
Some operations cannot be performed on more than one area in a selection at the same time; you must loop through the individual areas in the selection and perform the operations on each area separately. The following example performs the operation named "myOperation" on the selected range if the selection contains only one area; if the selection contains multiple areas, the example performs myOperation on each individual area in the selection

Bonne Fin d'Aprèm
@+Thierry
 
L

LaurentTBT

Guest
Vi, Thierry, j'attends ta confirmation, mais pour moi:

Imaginons qu'on clique sur A1, puis B5:C6, puis D3, puis B2, tout ça en maintenant la touche CTRL anfoncée, alors:

Selection représente l'objet range composé de l'union de toutes ces cellules, alors qu'activcell ne représente qu'une seule cellule: la dernière sur laquelle on a cliqué (à savoir ici, B2)

Donc Activecell="The Text" ne mettra "The Text" qu'en B2, alors que selection="The Text" le mettra partout.
Dernière précision: si la dernière partie cliquée est un bloc (par exemple, si au lieu de B2, on termine par cliquer sur B2:C4, alors activecell est B2 et non C4. Visuellement, c'est celle qui reste en blanc, alors que les autres sont en gris!

MAIS il y a un truc très bizarre:

Je mets 1 en A1, 1 en B2, rien en C3
je sélectionne A1 et B2, et je fais tourner cette macro:
Sub essai()
If ActiveCell = 1 Then MsgBox "OK"
End Sub
Cela m'affiche OK, normal!

Je sélectionne A1 et C3 (DAns l'ordre, donc A1 vaut 1, et C3 qui vaut 0 est l'activecell) là pas de message
alors que dans l'autre sens (C3, puis A1), alors OK s'affiche
Donc, dans ce sens là, selection serait la première cellule sur laquelle on a cliqué, et le test ne se fait que sur cette première cellule, et non sur la cellule active.

Strange, non?

@+
Laurent.
 
@

@+Thierry

Guest
Re Laurent, oui j'ai entrevu ce fil...


Par contre pour ton truc Strange, non moi je trouve çà normal... Ou alors je suis Strange aussi et c'est pour çà que je suis toujours célibataire !! lol

@+Thierry
 
L

LaurentTBT

Guest
Ce que je trouvais strange, Thierry, c'est que d'un côté, VBA décide que la cellule active est la dernière sur laquelle on a cliqué, et que de l'autre, lorsqu'on fait un test sur Selection, c'est la première!

Regarde le fichier joint. En fait, entre l'ordre de la sélection manuelle et l'ordre de sélection par Union, tout est inversé!


CCL: le résultat obtenu avec Union me semble plus logique, car la cellule sur laquelle s'effectue le test (if Selection=...)est la même que la cellule active, alors que dans le cas de sélection manuelle, c'est l'inverse.

Alors, pas convaincu de l'étrangeté de la chose, Thierry?

Un dernier petit point: on ne peut pas faire de test sur une sélection dont la cellule prise en compte pour ce test est contigue
par exemple tout simple: if range("A1:B2")="A1" then donne une erreur.

Voilà, la conclusion ultime, c'est: évitons de travailler avec select, comme ça, pas de noeuds au cerveau! (et c'est pas la seule raison, n'est-ce pas, Thierry?)

Bonne soirée, et ne réflèchissez pas trop à ça, sinon, il y a de quoi devenir insomniaque!!!!

Laurent.
 

Pièces jointes

  • SelectionActivecell.zip
    9.8 KB · Affichages: 16

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 090
Membres
103 464
dernier inscrit
Inconnu2