VBA:Incrémenter formule avec une plage de cellule variable Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
c
cysalea
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 26 janvier 2017
Version d'Excel : 2010

Message par cysalea » 31 janvier 2017, 08:43

"Une macro événementielle concernant une feuille doit être placée dans le code de la feuille et non pas dans un module."

ça je ne le savais pas !

Alors comment faire ?

Je te joint un fichier (essai_forum_v4)avec ma macro et quelques explications

Je te joints également mon fichier "source" qui s'appelle "communes.xlsx"

Merci pour tes explications et ton aide.

Amicalement
Communes.xlsx
C'est le fichier source
(9.17 Kio) Téléchargé 3 fois
Essai_forum_V4.xlsm
(15.93 Kio) Téléchargé 5 fois
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'058
Appréciations reçues : 83
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 31 janvier 2017, 21:23

Bonsoir,

Tu es un petit rigolo quand même (ou une petite rigolote) ! Tu me fournis enfin - après 6 messages - tes fichiers avec ta macro. Donc tout mon boulot jusqu’à maintenant ou presque tombe à l’eau :? :?

J’ai ouvert tes deux fichiers et j’ai lancé la macro manuellement puisque tu n’as aucun bouton en place qui permette de voir sur quelle feuille tu es au démarrage. Un message apparait – sur l’image ci-dessous – et je ne sais pas avec quelle information compléter cette InputBox !?!

Si tu as besoin d’aide, pourquoi tellement jouer à cache-cache ?? Aide-moi à t’aider.

N’indique pas tes informations dans les fichiers ni dans l’explorateur VBA ; si dans deux ou trois messages je veux revoir les informations que tu m’as données précédemment, je ne veux pas devoir rouvrir 1, 2 ou 3 fichiers pour les retrouver, reste sur le fil pour cela.

Cordialement.
Capture.JPG
Yvouille

Valais de Coeur
Avatar du membre
mdo100
Membre dévoué
Membre dévoué
Messages : 915
Appréciations reçues : 39
Inscrit le : 25 mai 2013
Version d'Excel : 2010 FR

Message par mdo100 » 1 février 2017, 07:25

Bonjour à toutes et tous,
Bonjour Yvouille,
Yvouille a écrit : J'étais de bonne humeur, j'ai commenté mon code comme rarement
Je m'immisce dans ce fil, pour te remercier d'avoir commenté le code que tu as fourni à cysalea, cela va beaucoup m'aider moi aussi.
Yvouille a écrit :Le nouveau fichier ci-joint ‘’Essai_forum_V3’’ est couplé avec le nouveau ‘’Fichier source’’.
Et c'est la première fois que je fais joujou avec 2 fichiers, du coup comme tu le faisais remarquer:
Yvouille a écrit :A la fin de la macro, le ‘’Fichier source’’ reste ouvert. Faudrait-il le refermer automatiquement ?
Alors, j'ai cherché avec l'enregistreur de macro, comment répondre à cette question, et du coup j'en suis arrivé a mette à la fin de ton code cette ligne à la fin de la macro événementielle: Après
End With
Windows("Fichier source.xlsx").Close 'Fermeture du Fichier source
Et avant:
End Sub
Ça fonctionne parfaitement, :D on a même pas le temps de voir l'ouverture/fermeture du fichier source.

Est-ce que je deviens bon ;;) Yvouille, quand je pense à ma première question sur ce forum à laquelle tu avais répondu le 25 mai 2013.... "L'échelle est haute mais je grimpe..."

Bonne journée.
Cordialement.
c
cysalea
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 26 janvier 2017
Version d'Excel : 2010

Message par cysalea » 1 février 2017, 09:39

Merci pour toutes tes remarques Yvouille.

Ne tient pas compte de mon InputBox, je m'arrangerai pour la rajouter ensuite.
(En fait elle me sert à importer un fichier .lst issu d'une requête hebdomadaire sur une base de données, mon fichier de résultat comporte une date.
D'où mon InputBox pour que ma macro fonctionne chaque semaine).

Je rajouterai également un bouton de lancement de cette macro après.

Sinon, je renote les remarque que j'ai fait dans l'explorateur VBA :

'Tirer la formule sur la colonne jusqu'à la dernière cellule non vide en colonne M
Range("A2:A" & Range("M" & Rows.Count).End(xlUp).Row).FillDown
'-----------------------------------------------------
' et c'est là que ça bug!!!
' ma formule fonctionne bien sauf quand je n'ai qu'une ligne de résultat
' elle me remet en A2 : SITE

'Du coup, je ne sais pas comment intégrer la macro évènementielle à ce module ou à la feuille
' correspondante de mon fichier

'Par contre mes 2 fichiers ne sont pas dans le même dossier

En fait, je résume :
- mon fichier communes.xlsx est toujours le même (fichier source)
- mon fichier essai_forum varie chaque semaine
je veux rapatrier dans essai_forum en colonne A =SITE mes information du fichier communes (colonne E=SITE)
càd tant qu'il y à une valeur en colonne M de essai_forum, la formule doit s'appliquer en colonne A

J'espère cette fois avoir été plus claire ! :D
Et merci encore de ton aide précieuse.
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'058
Appréciations reçues : 83
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 1 février 2017, 22:49

Salut,


@ mdo100
Bien sûr que je m’en souviens :)
excel/mettre-dans-une-cellule-un-texte- ... 39991.html



@ cysalea
Je ne suis pas assez doué afin de pouvoir travailler à l’aveugle. Alors soit tu peux me fournir un fichier utilisable qui m’amène à ton problème, soit je dois abandonner. Désolé :?

Tu aurais donc le choix entre me fournir ton fichier réel mais qui fonctionne correctement, y compris ses InputBox - après l'avoir rendu anonyme si nécessaire - soit créer un fichier dans lequel tu isoles ton problème. Autrement tu dois compter sur quelqu’un de plus doué que moi.

Concernant ton problème de formule tirée vers le bas, je ne comprends déjà pas pourquoi tu inscrits une information dans la cellule A1 par l’instruction ActiveCell.FormulaR1C1 = "SITE" puis qu’immédiatement après tu supprimes cette première saisie pour la remplacer par autre chose par l’instruction
ActiveCell.FormulaR1C1 ="=VLOOKUP(RC[12],R1:R1048576,5,FALSE)".

Ensuite, lorsque tu veux incrémenter cette formule vers le bas, tu passes par l’instruction Range("A2:A" & Range("M" & Rows.Count).End(xlUp).Row).FillDown et tu dis que tu as là un problème s’il n’y a qu’une seule ligne. Essaie alors de remplacer cette dernière instruction par celle-ci :
If Range("M" & Rows.Count).End(xlUp).Row > 1 then Range("A2:A" & Range("M" & Rows.Count).End(xlUp).Row).FillDown

Concernant ma proposition de macro événementielle, c’était juste une idée sur la base de tes premières informations, mais je pense que ça compliquerait finalement un peu les choses dans ton cas (bien que je ne comprenne toujours pas très bien ce que tu désires réellement) et je pense qu’il est mieux de déclencher ta macro par l’évènement ‘’Clic sur un bouton’’ tant que tu ne maitrises pas le reste du problème.

A l’aveugle, je ne peux rien faire de mieux. Désolé pour toie qui n’a pas été beaucoup plus claire :D :D

Chaleureusement.
Yvouille

Valais de Coeur
c
cysalea
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 26 janvier 2017
Version d'Excel : 2010

Message par cysalea » 2 février 2017, 17:26

Bonjour Yvouille et merci encore de prendre du temps pour me répondre.

Je te joins un fichier "Essai_forum_V5" qui cette fois je l'espère conviendra.
Je te joins également à nouveau mon fichier source inchangé "communes" (il doit être placé sous d:\essai)

J'ai isolé mon problème comme tu me l'a suggéré.

La macro fonctionne (compléter la colonne A=site avec les données issues de la colonne E du fichier "commune")

Mais quand il n'y a qu'une ligne, ça ne marche pas.

J'ai essayé avec :
Range("A2:A" & Range("M" & Rows.Count).End(xlUp).Row).FillDown
et avec ta solution :
 If Range("M" & Rows.Count).End(xlUp).Row > 1 then Range("A2:A" & Range("M" & Rows.Count).End(xlUp).Row).FillDown
mai rien ne fonctionne :oops: , l'entête de colonne = SITE s'affiche au lieu de AAAAA ou BBBBB.

Peut être pourras tu encore me venir en aide ?

Merci de ta gentillesse.
Communes.xlsx
fichier source
(9.17 Kio) Téléchargé 7 fois
Essai_forum_V5.xlsm
Macro
(20.14 Kio) Téléchargé 1 fois
Avatar du membre
Yvouille
Passionné d'Excel
Passionné d'Excel
Messages : 9'058
Appréciations reçues : 83
Inscrit le : 6 avril 2007
Version d'Excel : 2016

Message par Yvouille » 2 février 2017, 19:17

Mon Dieu ! Que c'est souvent très simple d'aider un membre, lorsqu'il se décide de nous fournir un fichier qui tienne la route :D

Ta solution dans le fichier ci-joint.

Cordialement.
Essai_forum_V6.xlsm
(23.97 Kio) Téléchargé 11 fois
Yvouille

Valais de Coeur
c
cysalea
Nouveau venu
Nouveau venu
Messages : 7
Inscrit le : 26 janvier 2017
Version d'Excel : 2010

Message par cysalea » 3 février 2017, 15:43

Merci beaucoup Yvouille pour ta grande aide !

Ca marche :D :D :D

Je suis ravie et en plus j'ai encore appris quelque chose.

Merci encore !!
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message