Macro VBA avec i allant de 1 à x

Bonjour le forum,

Je travaille sur Excel 2016 Office 365

J'ai mis en place une petite macro qui me permet d'aller chercher les composants d'une référence via un tableau.

La macro fonctionne bien mais elle est simpliste et pas "belle". En effet comme je n'ai jamais utiliser VBA et jamais étudié cette application j'enregistre mes macro et je bidouille des choses simple dans VBA mais je ne vais pas plus loin.

Dans mon cas par exemple la macro va chercher les 10 composants de chaque ref interne à chaque fois même si il n'y en pas 10.

Dans le fichier joint vous pouvez voir dans l'onglet annexe comment je souhaite faire fonctionner la macro. En gros on inscrit la ref interne on se place sur la cellule en dessous et on clique sur la macro. Cette macro est suffisante quand on crée le tableau cependant si on souhaite le modifier car une nomenclature à changé par exemple la macro va écraser les lignes en dessous et il va falloir tout écrire à nouveau. Pour palier à ça j'ai pensé à un petit code mais je ne maîtrise pas la syntaxe. Voilà ce que j'ai commencé à écrire :

Dim x As Integer

x = ActiveCell.FormulaR1C1 = "COUNTIFS('BOM' !R2C1:R174C13,R[-1]C[+1])"

For i = 1 To x

ActiveCell.FormulaR1C1 = "=VLOOKUP(R[-1]C,'TCD BOM'!R2C1:R108C11,COLUMN()+0,0)"

ActiveCell.Offset(1, 0).Select

Pour information, l'onglet 1 est la feuille dans laquelle je veux faire tourner ma macro. L'onglet BOM me permet d'avoir le nombre de composant avec la formule COUNTIFS et l'onglet BON TCD me permet de faire tourner ma macro avec la formule RECHERCHEV.

Le problème est que je ne sais pas où intégrer le i dans ma formule countifs et je n'ai aucune si je suis sur la bonne voie ou non.

Si vous avez des solutions n'hésitez pas.

Bien cordialement,

Lucas

Bonjour, il y a une problème avec ton fichier, il doit être corrompus car je n'arrive pas à l'ouvrir !

Bonjour,

Je n'ai pas ouvert ton fichier, mais déjà il y a des choses à revoir :

1. Sur une ligne, tu ne peux pas avoir plusieurs égalités, du genre "x = y = z", donc cette instruction n'est pas valide :

x = ActiveCell.FormulaR1C1 = "COUNTIFS('BOM' !R2C1:R174C13,R[-1]C[+1])"

2. Tu fonctionnes effectivement à partir de l'enregistreur, alors qu'il est presque toujours possible de faire mieux et plus simple :

--> Pas de "ActiveCell", il suffit de préciser la cellule de travail (exemple : Range("A1") ou Cells(1, 1))

--> Pas besoin d'écrire des fonctions Excel dans des cellules du tableur pour obtenir une valeur :

Range("A1").FormulaR1C1 = "SUM('BOM' !R2C1:R174C13)"
x = Range("A1").Value
'équivaut à :
x = Application.Sum(Sheets("BOM").Range("A2:M174"))

3. Exemple d'utilisation d'une boucle For :

Dim i As Integer '<-- Nombre entier compris entre +/- 32 767
For i = 1 To DerLig
   Range("A" & i) = "Je suis avant la ligne " & i + 1
Next i

Le mieux à mon avis, est de commencer par consulter les sections de cours VBA du site : https://www.excel-pratique.com/fr/vba.php

Bonjour à tous,

Désolé de la réponse tardive mais j'ai pas mal de travail en ce moment.

Je vais remettre le fichier en ligne en espérant que cette fois-ci cela va fonctionner;

17exemple-macro.xlsx (43.49 Ko)

Je sais que je dois essayer de me mettre sur ces cours pour commencer mais entre la charge de travail et les délais imposés par les supérieurs ont a pas toujours le temps pour faire ce que l'on veut

Je vais essayer de me remettre sur cette macro demain en espérant que j'arriverais à ma solution ^^.

Pour ce qui est de l'activeCell je suis un peu obligé de l'utiliser car les tableaux que l'on va construire n'auront pas tous le même nombre de ligne et les espaces entre les références ne seront pas au même endroit.

Merci pour vos réponses en tout cas.

Bien cordialement,

Lucas

Rechercher des sujets similaires à "macro vba allant"