Excel - macro

Résolu/Fermé
iokLaiok Messages postés 31 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 17 août 2010 - 5 août 2008 à 09:17
iokLaiok Messages postés 31 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 17 août 2010 - 7 août 2008 à 13:46
Salut à tous!

J'ai fait un tableur Excel qui me renvoit des résultats chiffrés. Sur une autre page, j'ai fait un tableau (une échelle en fait).
J'aimerai que quand le tableur me donne la valeur "33", une flèche apparaisse dans la plage définie "30 à 40". Les plages de mon échelle sont de simples cases colorées. Je pensai mettre comme "indicateur" une flèche des formes automatiques, mais c'était juste une idée...

Est-ce que quelqu'un sait si c'est possible de faire ça sur Excel? Et si oui, comment?????

Un grand merci d'avance à vous tous!
A voir également:

5 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 686
5 août 2008 à 09:49
bonjour

Est-ce que quelqu'un sait si c'est possible de faire ça sur Excel?

Tu peux toujours te dire qu'il suffit d'avoir l'idée car si avec les formules c'est difficile à réaliser, avec VBA, il suffit souvent de le programmer.

Pour que cela soit adapté à ton cas, essaies de nous mettre un petit exemple de ton tableur banalisé sur https://www.cjoint.com/
puis tu nous mets ici le lien généré par le site.
0
iokLaiok Messages postés 31 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 17 août 2010 3
5 août 2008 à 11:00
Re!

Alors je t'ai fait un ptit tableur du genre de celui avec lequel je travaille. J'ai mis 2-3 coms en bleu.
Voici le lien : https://www.cjoint.com/?ifk17Hjeyr

Euh, comme je suis un peu une pourrite, je ne connais pas le VBA.
Est ce que si tu arrives à solutionner mon problème, tu pourra bien m'expliquer très en détail comment qu'on fait????

Merci d'avance de prendre du temps pour m'aider, très sympa ce forum!!!!!

A+!
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 686
5 août 2008 à 15:53
bonjour

Regardes si c'est ce que tu voulais : https://www.cjoint.com/?ifpWpIuxIQ

J'ai nommé ces deux zones pour qu'elles puissent être déplacées.
situation	=Résultats!$B$8
situations	=Echelle!$A$4


Une macro s'exécute lorsque tu vas sur l'onglet Résultats
En fonction de la valeur du résultat la flèche est positionnée.

Si tu veux d'autres précisions faut demander.
0
iokLaiok Messages postés 31 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 17 août 2010 3
5 août 2008 à 16:08
Ben oui, c'est exactement ça qu'il me fallait!!!!!!! Je te remercie, c'est vraiment super!

Maintenant, comment est-ce que je peux faire pour faire la même chose sur mon document? je peux pas te le mettre directement en ligne, c'est un truc de boulot......
Peux tu m'expliquer comment ça fonctionne, que je puisse l'adapter à mon document? Dans la mesure du possible...

Merci beaucoup pour ton aide, en tout cas!
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 686
5 août 2008 à 16:20
bonjour

Dans ton document tu copies la macro qui se trouves dans la feuille résultat (mode d'emploi)

Tu nommes les 2 zones concernées dans la zone nom ou menu insertion / noms / définir

Tu vérifies que ta flèche a le même nom et sinon tu corriges dans la macro ainsi que le nom des onglets et la situation de la flèche (D16) s'il y a lieu.
0
iokLaiok Messages postés 31 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 17 août 2010 3
6 août 2008 à 10:19
Hello!

Alors j'ai essayé et ça fonctionne (extra ce VBA, faut vraiment que je m'y mette...)

Seule chose que je voudrais encore corriger: En fait, dans mon échelle, j'ai 8 valeurs "échelons" différentes (contre 3 dans l'exemple présenté). Du coup avec ton code, je n'ai pas assez de position pour ma flèche... Il faudrait que la flèche se déplace donc sur 8 cases.
Peux tu me corriger?

Option Explicit

Private Sub Worksheet_Activate()
Dim i As Integer
For i = 0 To 7
If Sheets("Tabelles").[situations].Offset(i, 0).Value = Sheets("Calcul").[situation].Value Then Exit For
Next i
Shapes("AutoShape 1").Left = [N4].Offset(i * 7, 0).Left
Shapes("AutoShape 1").Top = [N4].Offset(i * 7, 0).Top
End Sub

Merci vraiment pour ton aide!
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 686
6 août 2008 à 11:59
bonjour


For i = 0 To 7

Ceci est bien vu et devrait fonctionner.

Shapes("AutoShape 1").Left = [N4].Offset(i * 7, 0).Left
Shapes("AutoShape 1").Top = [N4].Offset(i * 7, 0).Top


Ici non, tu as un interligne entre chaque déplacement de flèche et donc faut garder le 2 et pas mettre 7 : nombre de lignes de décalage (i) multiplié par deux pour sauter une ligne à chaque fois.
0
iokLaiok Messages postés 31 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 17 août 2010 3
6 août 2008 à 13:55
Super, c'est parfait comme ça, exactement ce que je voulais, merci beaucoup!

POur mon info, pourquoi dois tu mettre la ligne .Top ET la ligne .Left?
Si j'ai bien compris le 1er argument est l'incrément de position vertical et le 2ème horizontal. Si on donne la case de départ N4 et le pas d'incrémentation dans les 2 sens, pourquoi il y a besoin de définir le haut et la gauche?
Effectivement, si je n'en mets qu'un (.Left) la flèche ne bouge qu'horizontalement...
Donc en fait tu as toujours le même texte sur tes 2 lignes, sauf .Left et .Top...


Sais-tu où je pourrai me documenter sur VBA et Access? Un truc digeste...? J'ai déjà fait du C et C++, mais y a 7 ans (aïe...), donc besoin (et envie!) de me remettre dans le bain.......

Merci pour ton aide et à bientôt!
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 686 > iokLaiok Messages postés 31 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 17 août 2010
6 août 2008 à 22:52
bonjour

Tu as raison et on peut n'utiliser que l'incrémentation mais cela pose un problème.

Si tu changes la hauteur des lignes cela ne fonctionne plus car l'incrémentation utilise les pixels.

En se positionnant sur le coin gauche et haut d'une cellule après avoir décalé le nombre de lignes nécessaires, on est toujours en phase quelle que soit la hauteur des lignes et dans ton exemple elles étaient fluctuantes.

Pour le VBA, il y a un truc qui fonctionne bien c'est l'aide de l'éditeur et au moins c'est à jour même si c'est incomplet.
Je dois reconnaître qu'il faut un certain apprentissage pour comprendre le cheminement mais c'est très intéressant lorsque l'on à intégré l'utilisation.

Tu as quelques sites intéressants :
© Laurent Longre 1999-2007 , ]
le club d'entraide des développeurs francophones
©2006-2008 Didier Fourgeot - myDearFriend!
Wiki de MichelXld
XLwiki
et de nombreux autres créés par des passionnés, mais si tu parcours ceux-ci tu vas bien te remettre dans le bain.
0
iokLaiok Messages postés 31 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 17 août 2010 3
6 août 2008 à 15:13
... euh, j'abuse un peu...

En fait j'utilise cette macro pour 3 échelles différentes (la 1ère et la 3ème ont 8 échelons, la 2ème 7). Ca marche au poil pour les 2 premières, mais pas pour la 3ème! Et je ne trouve pas pourquoi, bien sûr... Argh!
Peut être peux tu me débuger? J'ai vérifié les noms des cases et C'est pas ça qui cloche....

En souligné ce que le débugeur me met en jaune:

Private Sub Worksheet_Activate()
Dim i As Integer
For i = 0 To 7
If Sheets("Tabelles").[Echelle_Energie].Offset(i, 0).Value = Sheets("Calcul").[Classe_Energie].Value Then Exit For
Next i
Shapes("Flèche_Energie").Left = [I4].Offset(i * 2, i + 1).Left
Shapes("Flèche_Energie").Top = [I4].Offset(i * 2, i + 1).Top

Dim j As Integer
For j = 0 To 6
If Sheets("Tabelles").[Echelle_Eau].Offset(j, 0).Value = Sheets("Calcul").[Classe_Eau].Value Then Exit For
Next j
Shapes("Flèche_Eau").Left = [I38].Offset(j * 2, j + 1).Left
Shapes("Flèche_Eau").Top = [I38].Offset(j * 2, j + 1).Top

Dim k As Integer
For k = 0 To 7
If Sheets("Tabelles").[Echelle_GES].Offset(k, 0).Value = Sheets("Calcul").[Classe_GES].Value Then Exit For
Next k
Shapes("Flèche_GES").Left = [I66].Offset(k * 2, k + 1).Left
Shapes("Flèche_GES").Top = [I66].Offset(k * 2, k + 1).Top



End Sub


Merci beaucoup si tu peux me décoincer!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 686
6 août 2008 à 22:17
bonjour

Il faudrait avoir l'erreur générée pour être sûr mais comme la syntaxe parait correcte, je pense que tu as donné un nom à une plage et pas à une seule cellule.
Dans ce cas on ne peux adresser une plage avec cette instruction : à vérifier.
0
iokLaiok Messages postés 31 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 17 août 2010 3
7 août 2008 à 13:46
Effectivement c'était une histoire de nom... Ce matin, à tête reposée, je l'ai trouvée en 2 minutes... Comme tu dis, "Toujours zen" !

Merci beaucoup pour ton aide, mon tableur fonctionne au poil!
Merci aussi pour les sites proposés, je vais m'y plonger prochainement. Ca me plaît bcp!!!

J'espère bien vous retrouver une prochaine fois sur ce forum, toi et tes bons conseils...
A+!
0