VBA - Boucle selon variable et aide code

Bonjour à tous,

Il y a quelques mois, je demandais de l’aide sur un fichier afin d’améliorer la vitesse d’exécution d’une macro. Le résultat de ce fichier correspond au fichier en pièce jointe « Fichier d'import VOLD». C’est Galopin qui m’avait bien bien aidé 😊

Aujourd’hui, j’aimerais adapter ce code aux nouveaux paramètres et critères qui n’étaient pas gérés par ce fichier, et avoir un rendu différent en terme de display de colonnes, mais cela est plus anecdotique que ce qui me pose vraiment problème.

Le fonctionnement souhaité est globalement le même, mais je ne sais pas trop comment m’y prendre:

Dans l’ancien fichier « Fichier d'import VOLD» la macro associée au bouton « STEP 4 » permettait de donner le nombre de lignes qui allait devoir être rempli dans l’onglet « IMPORT », et cela selon l’invoice Number présent dans l'onglet "EXPORT".

Ainsi, un invoice number présent dans l’onglet « EXPORT » pouvait générer 2 ou 3 lignes selon le faut qu’il y ait ou non de la taxe, cf colonne « TAXE » de l’onglet « EXPORT »

Aujourd’hui, je veux que le ce nombre de ligne puisse être variable, c’est-à-dire de 2 lignes jusqu’à 6 lignes en fonction du nombre de taxe.

image1

Exemple ci-dessous :

  • NB Tax = 2 donc 2 ligne devront être générées (en plus des 2 de bases)
    • Taxe 1 <> 0 è montant à prendre en compte, à associé à la colonne « GLA Tax 1 »
    • Taxe 2 <> 0 è montant à prendre en compte, à associé à la colonne « GLA Tax 2 »
    • Taxe 3 et Specific Tax = 0 ==> pas de ligne générée donc

Problématiques

  1. Je bloque déjà sur la première partie, c’est-à-dire la macro Invoice generation ou j’ai une erreur d’exécution 424 alors que j’ai repris le code de l’ancien fichier J’ai essayer de changer la valeur de la ligne « ArrS = [TExp].Resize([TExp].Rows.Count, 19).Value » mais je pense que l’erreur vient d’autre chose. J'ai essayer de compter le nombre de colonne dans l'onglet EXPORT dans l'ancien fichier et d'adapter la valeur 19, mais à vrai dire j'ai du mal à comprendre cette ligne.
  2. Ensuite, avez-vous une idée pour que la boucle dans cette même macro puisse générer de 2 à 6 lignes au lieu du précédent fichier qui faisait que 2 ou 3 lignes ? Je n’arrive pas à comprendre où était la condition qui permettrait de préparer le nombre de lignes par factures.
  3. L’autre point qui me semble plus complet est d’associer le fait qu’il faut prendre que les montants avec une taxe <> 0, et d’associer le bon numéro de « GLA » associé au type de taxe.

Pour ensuite travailler sur la macro filling, j’ai essayé de modifier l’onglet « EXPORT » afin de supprimer au maximum les formules dans le CODE et de reprendre les informations de l’onglet « EXPORT », cela me permettra de changer plus facilement une variable si nécessaire.

==> Pour visualiser ce que je souhaite avoir comme rendu, j'ai fait un exemple dans l'onglet "IMPORT (NEW)" afin d'expliquer le rendu final pour les 2 premières factures de l'onglet "EXPORT"

Si des courageux ont pris le temps de tout comprendre, déjà bravo

Merci pour votre aide !

A+

Bonjour,

Déjà pour commence, dans le Gestionnaire de nom il faudrait renommer Table1 en TExp car pour l'instant TExp n'existe pas... Ensuite le 19 effectivement c'était le nombre de colonne. Si ça doit être à géométrie variable effectivement on pourrait peut-être trouver une autre formule ou variabiliser le nombre de colonnes...

Pour récupérer ce nombre c'est :

ArrS = [TExp].Resize([TExp].Rows.Count, [TExp].Columns.Count).Value

Variabiliser également le nombre de taxes... Oui ça devrait aussi pouvoir se faire mébon... Pff... En ce moment je suis pas trop dispo et il faudrait que je me réinfuse tout le process pour répondre avec précision au point 2. A vu de nez on prenait systématiquement 3 lignes, non ? Mais je peux me tromper je n'ai fait que survoler.

Si c'est le cas on en prendra 6 au lieu de 3 :

i = UBound(ArrS) * 6

Pour chaque ligne YAKA récupérer le "Nb Tax" colonne AA sur ton fichier joint après faut voir comment ça se passe dans la vie réelle... (pas certain !)

Et puis après pour le point 3 et suivant c'est nébuleux...

A+

Bonjour galopin,

Merci pour ton aide et tes retours. Dans un premier temps j'ai modifié tout en Table1, mais c'est noté je me souvenais pas qu'il s'agissait d'un nom donné à la table, je comprends donc pourquoi cela ne fonctionnait pas. J'ai modifié le fichier, je vais passer outre le nombre de taxe, c'est-à-dire que par défaut je vais mettre 6 lignes. pour chaque facture Je pourrais ensuite à la fin rajouter une formule qui supprimera toutes les lignes égales à 0 en termes de montant.

Pour le point 3 concernant le montant j'ai également simplifié, j'associe chacune des lignes à une colonne différente de l'onglet Export (qui elle a bien un son propre montant), comme ça c'est beaucoup plus simple.

J'ai fait à peu près toutes les modifications, mais j'ai du toucher a un paramètres car soit: ma macro ne s'exécute pas - du moins rien n'est complété et modifié quand je lance la macro filling / ou soit j'ai à nouveau une erreur d'exécution (au moment où j'ai rajouté des formules pour la colonne 8: GL Account et pour la colonne 16)

Egalement, j'ai du modifier: "If ArrI(iR, 1) = 1 Then" pour changer la valeur en 2 mais je ne suis pas du tout sur. En effet, avec la valeur 1, rien était recherché, cela ne prenait pas de numéro de facture mais le libellé de la colonne de l'onglet "Import"

Je pense ne plus être très loin du résultat attendu, après ce sera des ajustements mais si j'arrive à remplir presque toutes les colonnes jusqu'à la fin, ça fonctionnera sans soucis.

Merci

A+

Bonsoir,

Désolé mais là tu parles tout seul, dans le vague, Je ne sais même pas si tu sais de quoi tu parles :

Si dans certains forum on aime à dire que quand une question est bien posée, elle déjà à moitié résolue, là on cherche en vain la question...

Dans tous les cas c'est imprécis tu abordes plusieurs sujets à la fois mais on ne sais pas dans quelle macro ?

J'ai cherché en vain "If ArrI(iR, 1)" dans ton classeur d'ailleurs il n'y a même pas de "ArrI" déclaré ou non...

En revanche il traîne encore des [Table1]...

Bon de toute façon moi ce type de codage me convient pas : Pas d'option Explicit donc des variables non déclarées.

Des variables déclarées mais qui ne me disent rien Ws1, Ws2... Pfff...

WsE, WsI, WsC, WsP c'est pas plus clair ?

Pas un seul With (sauf dans le commentaires) sur les quelques 600 lignes de codes.

Pour moi la cause est entendue : J'ai déjà ma dose de cheveux blanc donc je passe la main.

A+

Hello,

Voici ce qui me bloque aujourd'hui et mes commentaires à jour, ce devrait être plus concis

Problème:

  • Macro filling qui ne s'exécute pas/ pour lesquels je ne détecte pas ce qui ne fonctionne pas
Commentaires:
  • le reste des macro = pas besoin de regarder, c'est pas si important, j'essaierai d'améliorer le codage mais aujourd'hui ce n'est pas ma priorité, d'autant plus que le code n'est pas propre
  • voici comment est défini "ArrI":
image2
  • j'ai renommé TExp par Table1, c'est pour ça qu'il reste des [Tables1]

Si quelqu'un peut me débloquer sur pourquoi la macro ne fonctionne "filling" ce serait d'une aide très bienvenue :)

Egalement, j'ai du modifier: "If ArrI(iR, 1) = 1 Then" pour changer la va

C'est l'inconvénient de citer du code sans la balise </> J'ai cherché "If ArrI(iR, 1) = 1 Then" et non

If ArrI(iR, 1) = 1 Then"

Pour moi cette macro fonctionne Elle s'arrête simplement quand elle ne trouve pas l'argument de VLOOKUP :

    'COLUMN 08: GL Account

    For iR = 2 To UBound(ArrI)

         If ArrI(iR, 1) = 1 Then
             ArrI(iR, 8) = (Application.WorksheetFunction.VLookup(ArrI(iR, 15), WsE.Range(rngBT), 18, 0))

         ElseIf ArrI(iR, 1) = 2 Then
             ArrI(iR, 8) = (Application.WorksheetFunction.VLookup(ArrI(iR, 15), WsE.Range(rngBT), 21, 0))
'Sur cette dernière ligne :ArrI(iR, 15 = "XXX-20210000003776C" (introuvable dans rngBT

A+

Bonjour,

En effet il y avait un problème avec cette ligne introuvable dans l'onglet "EXPORT"; je l'ai réglé donc je n'ai plus d'erreur concernant l'exécution.

Ce que je ne comprends pas: pourquoi l'exécution de la MACRO Filling ne remplit pas mon onglet "IMPORT" ?

Je ne comprends pas ce qui est mal indiqué dans le code:

dans l'onglet "IMPORT" je veux que la Macro "Filling" remplisse chacune des colonnes, en faisant en Vlookup à partir de la valeur de la 15ème colonne de l'onglet "IMPORT".

Ainsi pour ce numéro de facture:

image3

Le code devrait remplir la colonne Company ; InvoiceType, Entry date etc... selon les colonnes associées dans l'onglet "Export"

image4

Mais rien ne se passe quand j'exécute le code. Comme si le vlookup fonctionnait (puisque je n'ai plus d'erreur) mais que les différents codes pour remplir la donnée ne fonctionnaient pas. C'est ça que je n'arrive pas à comprendre alors que je compare le code avec celui du fichier VOLD qui fonctionne bien.

exemple pour remplir le nom de la Company qui le devrait être "AAAA" - 3ème colonne de l'onglet EXPORT qui devrait être complétée dans la 2ème colonne de l'onglet "IMPORT"

ArrI(iR, 2) = Application.WorksheetFunction.VLookup(ArrI(iR, 15), WsE.Range(rngBT), 3, 0)

Merci

Il manque toute la fin de la macro...

C'est bien beau de charger ArrI mais si tu n'en fait rien il s'évapore dès que la macro se termine.

A vue de nez il manque à minima quelque chose comme :

Next
WsI.Range("A2:S" & iLR) = ArrI
'... revoir d'après la macro d'origine 
End if

Non testé.

A+

Hello,

En effet ça fonctionne désormais. Encore un grand merci pour ton aide galopin!

J'ai réussi à faire toutes les modifs souhaitées :)

A+

Damien

Rechercher des sujets similaires à "vba boucle variable aide code"