Formule liée à une liste changeante

Bonjour,

J'ai un fichier Excel comportant l'extraction mensuel du carnet de commande d'un ERP.

J'ai créé une macro associée à un bouton afin de créer automatiquement une colonne montant HT (reste à livrer * montant unitaire), donnée que je n'ai pas à l'export de l'ERP... La problématique est qu'en fonction de l'export la liste des commandes peut être plus ou moins longue, je souhaiterais donc une formule pour calculer ce montant mais qui s'adapte en fonction de ma liste pour y affecter ma macro.

Je sais pas si je suis clair ?

Voir fichier joint

17carnet-test-v2.xlsm (23.71 Ko)

bonjour,

il suffit d'adapter les fonction que vous avez fait avec :

Range("A" & Rows.Count).End(xlUp).Row   'retourne la dernière ligne non null de la colonne A

Range("IV1").End(xlToLeft).Column ' retourne la dernière colonne utiliser 

Merci pour votre réponse rapide.

J'ai intégré votre code au code de ma macro mais j'ai un message d'erreur qui apparaît : "Erreur de compilation", pouvez-vous me dire ce que cela signifie ?

Je précise que la macro "ajout colonne" a été réalisé à l'aide de l'enregistreur de macro, car je ne sais pas écrire en langage VBA.

une petite question :

le nombre de colonne risque d'augmenter ou non ? (colonne A à L)

car dans votre expliquer vous dite que le nombre de commande varie en fonction des export (seulement le nombre de ligne )


La fonction Suppression supprime tout les donnée présent dans la feuille ?

Seulement le nombre de ligne, les colonnes seront toujours les mêmes à l'export.

C'est ensuite ma macro qui vient rajouter 4 colonnes dont celle de montant HT que j'ai pris à titre d'exemple.


Fichier joint, feuille "Exemple2", voici mon fichier d'export avec le nombre de colonne exact.

10carnet-test-v2.xlsm (31.71 Ko)

Je n'avais pas fait attention à votre deuxième question.

Oui le bouton "suppression" supprime toute les données afin de permettre un nouvel import des données de l'ERP.

voila le code qui permet de crée la colonne L : Montant HT et de calculer pour tout les ligne leurs montant :

Sub AjoutColonne()
'
' AjoutColonne Macro
'
Dim lastLigne As Integer
Range("L1").Value = "Montant HT" 
lastLigne = Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To lastLigne      'de la 2eme ligne jusqu'au deniere (vu que le 1er ligne c'est le nom de la colonne : Montant HT )
  If Range("L" & i).Value = "" Then      'si la case est vide
    Range("L" & i).Value = Range("J" & i) * Range("K" & i)   'on additionne montant unitaire et le prix
  End If
Next i

End Sub

pour tout supprimer :

Sub Suppression()
'
' Suppression Macro
'
   Columns("A:L").Delete Shift:=xlToLeft
End Sub

je crois que y a même plus simple ^^

Super ça fonctionne, merci beaucoup.

Je n'ai plus qu'à faire la même chose pour mes autres zones de calcul !

Merci pour vos codes, plus optimisés que ceux proposés avec l'enregistreur de macro.


Une dernière petite chose

Sur ma vrai version de travail, la création des colonnes doit se faire au milieu de celle d'export.

Quelle fonction doit-on coder pour pouvoir dire que je veux l'ajout tout en décalant les colonnes vers la droite ?

j'ai pas très bien compris la question ^^

vous voulez décaler la colonne L en fonction du nombre de colonne importer ?

En faite la colonne a créer "montant ht" dans mon vrai fichier, elle est créé au milieu des autres colonnes d'export. Hors sur le fichier que je vous ai envoyé elle toujours en dernière position. Du coup avec le code actuel, la colonne est bien créé mais me supprime la colonne qui suit d'import. En gros il faudrait donc que je code : création d'une colonne et décalage des colonnes de l'erp pour pas écraser les données.

Suis je plus clair peut être maintenant ?

Bonjour,

il suffit d'ajouter :

  Columns("L:L").Insert Shift:=xlToRight 'remplacer "L" par le nom de la  colonne que vous voulez inserer 

Désolé du retard, j'ai pas eu le temps de me remettre sur mon fichier.

Merci encore pour votre code ça marche parfaitement !

A un prochaine échange peut-être.

Rechercher des sujets similaires à "formule liee liste changeante"