VBA - coller une plage (interactive) sur une image [Résolu]

Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 10 avril 2014 à 11:23 - Dernière réponse : Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention
- 29 sept. 2014 à 12:23
Bonjour,
Je suis très notice sur VAB / Excel... Je souhaite faire une macro pour modifier la plage (dans la zone de formule) d'une image.
Mais avant, je veux indiquer mon but.
1/ J'ai trouvé sur un site, une façon très simple de créer une image n°XX qui "voit" une plage de cellules.
2/ L'image n°XX a simplement sur sa zone de formule (ex.) : =$A$1:$E$5
3/ Tout ce qui se trouve en A1:E5 va être vu, et cela, de manière interactive.
4/ On peut voir tout ce qui est dans chaque cellule A1 :E5, et / ou on peut voir également toute autre image n°YY posée sur A1 :E5.
5/ Si je déplace l'image n°XX, elle continue de voir A1:E5.
6/ Si je modifie le contenu A1:E5, ou si je change l'image n°YY posée dessus, c'est interactif. L'image n°XX verra le changement.
C'est très pratique !

7/ Mon BUT : Je veux pouvoir modifier la plage de l'image n°XX (dans sa zone de formule), par une autre plage de cellules, afin de voir autre chose.
ex. Il suffit de changer $A$1:$E$5 par $G$1:$K$5, ou par $M$1:$Q$5, etc...
8/ En A9, j'écris une valeur 1 ou 2 (pour faire simple).
9/ En A10, j'écris une formule conditionnelle :
=SI(A9=1;"$G$1:$K$5";"$M$1:$Q$5")
J'ai ainsi le choix entre les 2 nouvelles plages de cellules.

10/ Mon idée est de créer une macro, pour modifier le contenu de la zone de formule de l'image n°XX, en allant copier / coller le contenu de A10.
11/ MACRO : je copie A10, puis je colle / spécial en A11, pour avoir uniquement la zone de plage voulue, puis je copie A11, puis je sélectionne l'image n°XX, puis je sélectionne sa zone de formule, et là je colle (la copie de A11 : par ex. $G$1 :$K$5), et je finis ma macro.
12/ PROBLEME ... La macro colle toujours ("en dur") $G1:$K$5, et cela, même si je change ensuite la plage en A10.... (ex. pour faire apparaitre $M$1:$Q$5)...
13/ Ce que je veux, c'est coller ce qui se trouve en A10 au moment où la macro est lancée, et non pas ce que j'ai collé au moment où j'ai créé ma macro...
14/ Donc, si je modifie A10 (en faisant apparaitre $M$1:$Q$5), il faut que la macro sélectionne cette nouvelle plage, et la copie sur la zone de formule de l'image n°XX.
En résumé : en A9, si je mets 1, j'obtiens en A10 : $G1:$K$5.
Ou en A9, si je mets 2, j'obtiens en A10 : M$1:$Q$5.
La macro devrait me modifier la zone de formule de l'image n°XX, par l'une ou l'autre plage, selon ce que j'ai sélectionné préalablement en A9 (donc, par interactivité en A10).

15/ HELAS... Comme je suis très peu doué en VAB... Je ne sais pas quoi faire...
Pouvez-vous m'aider ?
J'espère avoir été assez clair dans mon exposé ... ???
Au besoin je peux vous envoyer le fichier Excel (si vous me dites comment vous l'envoyer sur ce site, ou autrement ?).

En tout cas, MERCI beaucoup si quelqu'un arrive à m'aider ... !

Bruno_65
Afficher la suite 

Votre réponse

9 réponses

jordane45 21662 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 juillet 2018 Dernière intervention - 10 avril 2014 à 11:58
0
Merci
Bonjour Bruno,
HELAS... Comme je suis très peu doué en VAB
On s'en doute..puisque déjà.. c'est VBA et non VAB :-)


J'espère avoir été assez clair dans mon exposé
J'avoue que..... non...

PROBLEME ... La macro colle toujours ("en dur") $G1:$K$5, et cela, même si je change ensuite la plage en A10.... (ex. pour faire apparaitre $M$1:$Q$5).
Oui.. mais... quelle Macro ?
Tu peux peut-être nous montrer le code que tu as écrit pour que l'on essaye de te le corriger ....
( En utilisant les BALISES DE CODE : Voir ici pour plus d'infos :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code)

Ce que je veux, c'est coller ce qui se trouve en A10 au moment où la macro est lancée, et non pas ce que j'ai collé au moment où j'ai créé ma macro
Voir point précédent...; Sans voir ton code... on ne pourra pas t'aider.

Et puis.. ton code devrait surement nous faciliter la compréhension de ta question... par ce que là... une IMAGE
qui "voit" une plage de cellules. ... je ne sais pas ce que c'est.

En tout cas.. si ta question est ( plus simplement ) :
Je veux pouvoir modifier la plage de référence d'une formule ..

un code de ce genre..
Sub majPlageLiason()

Dim coordonneePl As String
Dim plsource As Range
Dim plcible As Range

'Récupération coordonnées Plage à afficher
coordonneePl = Range("A15").Value
' Plage = récupérer :
Set plsource = Range(coordonneePl)

'On se place sur la première cellule
' où on va afficher les données
Set plcible = Range("D1")

'On effectue la copie avec liason
plsource.Copy
    plcible.Select
     ActiveSheet.Paste Link:=True

End Sub



Commenter la réponse de jordane45
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - Modifié par jordane45 le 10/04/2014 à 19:04
0
Merci
(re) Bonjour !
Merci pour votre réponse rapide, et désolé si je n'ai pas été assez clair. Donc, nouvelle tentative d'explication !

1/ Comme je ne peux pas joindre le fichier Excel (qui est très simple). Je commence par le décrire pour planter le décor.

2/ J'ai mis 3 plages de couleur différente, avec chacune une petite image d'un soldat posée dessus.
- Plage 1 : A1 :E6 : fond bleu, texte « France » + soldat français
- Plage 2 : G1 :K6 : fond gris, texte « France » + soldat allemand
- Plage 3 : M1 :Q6 : fond bleu, texte « France » + soldat anglais

3/ En R9 : une variable, de valeur 1, 2 ou 3.
J'ai mis la valeur 2.

4/ En R10 : ( la plage 1 ) $A$1 :$E$6
5/ En R11 : ( la plage 2 ) $G$1 :$K$6
6/ En R12 : ( la plage 3 ) $M$1 :$Q$6

7/ En R14, une formule dépendant de la variable en R9.
=+SI(R9=1;R10;SI(R9=2;R11;SI(R9=3;R12;"")))
Le résultat donne l'une des 3 plages ci-dessus (R10, R11, ou R12).

8/ En R15 = +R14.
C'est juste pour avoir la plage sélectionnée (sans la formule conditionnelle).

9/ En R16, une plage vide qui servira de relais lors de la Macro.

10/ Image n°1 : enfin, ailleurs (l'endroit n'a pas d'importance), disons en G20 :K25, une Image.
Cette image a dans la zone de formule : $A$1 :$E$6
L'image fait apparaitre le contenu de la plage A1 :E6.
( On voit donc un fond bleu, avec un soldat français dessus. )
Voilà, pour la description du fichier.

10/ Le BUT de la MACRO (appelée Z_Choix ) :
Le but est de modifier le contenu de la zone de formule de l'image 1.
En R9, la variable est actuellement « 2 ».
En R14, la formule donne pour résultat R11 (la plage n°2) : $G$1 :$K$6
Donc, en lançant la Macro, la zone de formule de l'image (qui est $A$1 :$E$6) va se changer en $G$1 :$K$6.
L'image va donc faire apparaitre la plage n°2 : $G$1 :$K$6 (avec un fond gris et un soldat allemand).

11/ Mon Problème...
En R9, si je change la variable par « 3 », la Macro colle toujours comme nouvelle plage : "$G$1:$K$6".
Elle ne tient pas compte de mon changement de variable ...

12/ La MACRO
Sub Z_Choix()
' Z_Choix Macro
    Range("R15").Select
    Selection.Copy
    Range("R16").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Range("R16").Select
    ActiveCell.FormulaR1C1 = "$G$1:$K$6"
    Range("R17").Select
    ActiveSheet.Shapes("Image 1").Select
    Selection.Formula = "$G$1:$K$6"
    Range("R16").Select
    Selection.ClearContents
    Range("A10").Select
End Sub


13/ Ce serait peut-être plus simple si je pouvais joindre le fichier ?

En tout cas , merci de me répondre !!
jordane45 21662 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 juillet 2018 Dernière intervention - 10 avril 2014 à 14:31
la Macro colle toujours comme nouvelle plage : "$G$1:$K$6".
C'est un peu normal... vu que DANS le code tu as indiqué :
ActiveCell.FormulaR1C1 = "$G$1:$K$6" 


il faut que dans ta macro tu récupère dynamiquement la plage de cellule qui t'intéresse (valeur se trouvant e En R14,):

Dim PlageCible  as string
PlageCible = Range("R14").value

'....

'....
ActiveCell.FormulaR1C1 = PlageCible 

Commenter la réponse de Bruno_65
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - Modifié par jordane45 le 10/04/2014 à 19:00
0
Merci
Bonjour et encore merci !

On avance, mais ce n'est toujours pas complètement ça ...

1/ Ok, j'ai compris que la sélection initiale était mal faite.

2/ Cependant, il faut ensuite copier la plage cible "R14"
dans la zone de formule de l'image 1.

3/ actuellement, la Macro est deveue plus courte mais toujours inexacte...
En fait cela me copie la cible en A10... et non pas dans la zone formule de image 1 ...

4/ Macro :

Sub Z_Choix()
'
' Z_Choix Macro
'
    Dim PlageCible  As String
    PlageCible = Range("R14").Value
  
<gras>    ActiveSheet.Shapes("Image 1").Select

    ActiveCell.FormulaR1C1 = PlageCible</gras>
    Range("A10").Select
End Sub
jordane45 21662 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 juillet 2018 Dernière intervention - 10 avril 2014 à 19:00
Je t'ai demandé d'utilisé la coloration syntaxique (les balises de code) lorsque tu poste du code sur le forum...
Merci de le faire à l'avenir.
( j'édite ton message précédent pour les mettre... merci de faire attention).
jordane45 21662 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 juillet 2018 Dernière intervention - 10 avril 2014 à 19:04
Je ne t'ai donné qu'un exemple...
a toi de l'adapter à tes besoins...

ActiveSheet.Shapes("Image 1").Select
Selection.Formula = PlageCible


Je rappel qu'il existe un mode "pas à pas" qui permet de faire défiler la macro ligne par ligne et ainsi regarder ce que le code fait.. ce que valent les variables....
N'hésites pas à l'utiliser pour essayer de comprendre.
jordane45 21662 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 juillet 2018 Dernière intervention - 10 avril 2014 à 19:05
Je précise également que je n'ai pas réécrit TOUT ton code... je t'ai juste donné une instruction..
Je ne vois pas pourquoi tu as supprimé les trois quart de ta macro pour n'y mettre que mes deux lignes...
Forcément.. ça ne marchera pas.....!!
Commenter la réponse de Bruno_65
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 11 avril 2014 à 10:10
0
Merci
Ok !
Je n'ai pas réussi à faire le bon code,
mais en tout cas, Merci pour ton aide et ta patience !
au revoir, et bonne journée !
Commenter la réponse de Bruno_65
Bruno_65 39 Messages postés jeudi 10 avril 2014Date d'inscription 18 mai 2015 Dernière intervention - 29 sept. 2014 à 12:23
0
Merci
Ok, finalement j'y suis parvenu ! ... J'ai mis du temps, mais ... c'est (très !) bien ! MERCI !!!
Commenter la réponse de Bruno_65

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.