VBA:Incrémenter formule avec une plage de cellule variable

Bonjour à tous,

Je souhaiterai appliquer une formule en colonne A (ici une recherche V) tant qu'il y a des valeurs dans ma colonne B (nombre de cellule variable peut aller de B2 à B.... ou simplement B2)

J'ai lu plusieurs choses sur ce forum mais rien de fonctionne.

J'ai essayé :

'DL = Range("B" & Rows.Count).End(xlUp).Row 'Derniere ligne de la colonne A

'F = "=VLOOKUP(RC[12],[Communes_44_IG.xlsx]communes!R1:R1048576,5,FALSE)" 'Formule ) mettre la formule après le F = (venant de la macro automatique par exemple)

Range("a2").Formula = "=VLOOKUP(RC[12],[Communes_44_IG.xlsx]communes!R1:R1048576,5,FALSE)" 'Emplacement de la 1ere cellule recevant la formule

Range("A2").AutoFill Destination:=Range("A2:" & Range("B" & Rows.Count).End(xlUp).Row), Type:=xlFillDefault 'incrémentation jusqu'à la derniere ligne

J'ai essayé :

ActiveCell.FormulaR1C1 = _

"=VLOOKUP(RC[12],[Communes_44_IG.xlsx]communes!R1:R1048576,5,FALSE)"

Range("A2:A" & Range("B" & Rows.Count).End(xlUp).Row).FillDown

ce 2è essai me ramène le titre de la colonne A quand je n'ai qu'une donnée en B2

Merci pour votre aide.

PS : mon fichier pour ma recherche V s'appelle Communes_44_IG.xlsx

41essai-forum.xlsx (8.69 Ko)

Salut,

Je n’ai pas très bien compris ce que tu désires réaliser, mais regarde le fichier ci-joint. A chaque fois que tu modifies une cellule de la colonne B (Sauf la cellule B1), ça actualise la colonne A en fonction des données inscrites sur la Feuil2 (que les données recherchées soient sur une autre feuille ou dans un autre fichier, ça ne change pas grand-chose, donc simplifions nous la vie pour l’instant en restant sur le même classeur).

Si tu effaces plusieurs cellules de la colonne B, ça s’actualise aussi.

Est-ce un début de solution ?

131essai-forum-v1.xlsm (18.99 Ko)

Merci Yvouille pour ton aide.

Le code VBA que tu m'a écrit est complexe pour moi (je suis plutôt novice en VBA).

Pourrais tu me le traduire ligne à ligne pour que je puisse progresser et comprendre ce que je fais ?

Merci beaucoup.

Re,

J'étais de bonne humeur, j'ai commenté mon code comme rarement

Amicalement.

323essai-forum-v2.xlsm (20.64 Ko)

Bonjour,

Je m'insère dans cette discussion pour poser une question. Si les infos pour remplir la Feuil1 se trouve dans un autre fichier au-lieu de se trouver dans la Feuil2 du même fichier, comment le code peut-être adapté ?

Merci.

Salut Philippe,

C’est toujours délicat de traiter deux demandes en parallèle, mais comme la demande de Cysalea était quand même identique à la base (base de données dans un autre classeur), pourquoi ne pas te répondre quand même ? Est-ce que ton fichier contenant la base de données est ou peut être ouvert au moment du lancement de la macro et doit-il être fermé (ou rester fermé) à la fin de la macro ?`

Dans l’espoir que Cysalea revienne sur ton fil à l’occasion.

Salut Yvouille

Oui le fichier peut être ouvert au moment du lancement de la macro et peut fermé à l'issue de l'exécution de la macro en posant la question par une boîte de message. Ainsi si je réponds NON il reste ouvert ce qui me permet éventuellement de contrôler le résultat et si je réponds OUI il se ferme en le sauvardant si des modifications on eu lieu.

Cordialement.

@ philippe.p@

Comme indiqué sur ton autre fil, on continue la discussion là-bas.

@ cysalea

J'espère avoir de tes nouvelles une fois

Merci Yvouille pour ta traduction du code VBA.

C'est plus clair.

Par contre je n'arrive toujours pas à l'adapter à mon exemple car je ne comprend pas la signification de :

Private Sub Worksheet_Change(ByVal Target As Range)

car pour moi une macro commence par Sub.

Sinon, l'idée est là mais je souhaiterai quand même faire ma recherche V avec un fichier à part et non pas avec une feuille du même classeur.

Peux tu encore m'aider?

Merci d'avance

Salut,

cysalea a écrit :

car pour moi une macro commence par Sub.

Ah, tu en es seulement là

Mais non, j’espère que tu comprennes la plaisanterie, car c’en était juste une.

Private Sub Worksheet_Change(ByVal Target As Range) est une macro événementielle qui se déclenche à chaque modification de la feuille (à chaque évènement Worksheet_Change). Il y a d’autres évènement comme ‘’Double-clic’’, ‘’Sélection d’une feuille’’, ‘’Fermeture d’un classeur’’, etc. qui peuvent tous déclencher d'autres macros événementielles.

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

Le nouveau fichier ci-joint ‘’Essai_forum_V3’’ est couplé avec le nouveau ‘’Fichier source’’.

Tel qu’est prévue ma macro actuellement, il faut absolument que ces deux fichiers se trouvent dans le même dossier. Si ce n’est pas possible, il faudra corriger le code en conséquence.

Puis, à chaque modification de la ‘’Feuil1’’ du fichier de base, la macro événementielle Worksheet_Change contrôle si le ‘’Fichier source’’ est ouvert et l’ouvre si non. Ensuite, elle va rechercher la valeur désirée dans ce fichier séparé au lieu d’aller la chercher sur la ‘’Feuil2’’ comme dans la version précédente.

A la fin de la macro, le ‘’Fichier source’’ reste ouvert. Faudrait-il le refermer automatiquement ?

Amicalement.

60essai-forum-v3.xlsm (16.48 Ko)

"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

21essai-forum-v4.xlsm (15.93 Ko)
10communes.xlsx (9.17 Ko)

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

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, 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.

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 !

Et merci encore de ton aide précieuse.

Salut,

@ mdo100

Bien sûr que je m’en souviens

https://forum.excel-pratique.com/excel/mettre-dans-une-cellule-un-texte-via-une-ref-t39991.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

Chaleureusement.

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 , 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.

15communes.xlsx (9.17 Ko)

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

Ta solution dans le fichier ci-joint.

Cordialement.

110essai-forum-v6.xlsm (23.97 Ko)

Merci beaucoup Yvouille pour ta grande aide !

Ca marche

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

Merci encore !!

Rechercher des sujets similaires à "vba incrementer formule plage variable"