Microsoft 365 Convertir Formule en Macro

Paulo27

XLDnaute Nouveau
Bonjour à tous,

Je souhaite convertir la formule du fichier en PJ en Macro.
La formule se trouve dans la case 2 de la colonne M (feuille "Données Excel")
Merci de votre aide précieuse :)
 

Pièces jointes

  • Trame Facturation.xlsm
    47.7 KB · Affichages: 13

xUpsilon

XLDnaute Accro
Bonjour,

Je suis en train d'y jeter un oeil, mais passer une fonction INDEX(EQUIV()) en VBA lorsque l'EQUIV porte sur plusieurs colonnes, c'est une galère.
En gros, tu es obligé de passer par un "Evaluate", qui est dépendant de la langue de ton Excel.

Il serait peut-être plus simple d'expliquer ce que tu veux faire, comment et pourquoi.

Bonne journée,
 

vgendron

XLDnaute Barbatruc
Hello all

j'ai regardé également
déjà la question c'est:
tu veux que VBA ecrive la formule? ou que VBA fasse le calcul et ecrive le résultat?

ta formule fait référence à un autre fichier
à mon avis, je pense que tu devrais t'orienter vers power query...
 

Paulo27

XLDnaute Nouveau
Bonjour à tous les 2,
Tout d'abord, merci de votre retour.
Je vous joint 2 fichiers.
Le fichier "source" ou l'index est renseigné est "Tarif Stockage pour aide"
Le fichier à utiliser et où renseigner la macro est "Trame facturation pour aide"

Je dois facturer du stockage pour divers clients et tous n'ont pas les mêmes conditions.
L'idée est une macro qui va chercher, pour chaque ligne de la feuille "Donnée Excel" :
- Le client correspondant
- Le type d'article
- La durée de stockage
- La quantité

Quand toutes ces valeurs sont trouvées/correspondent, cela renvoi la colonne F avec la ligne correspondante.

On peux en discuter de vive voix au besoin car je sais bricoler dans VBA mais pas écrire la formule complètement....

Merci de votre aide ;)
 

Pièces jointes

  • Tarifs Stockage pour aide.xlsx
    13.7 KB · Affichages: 4
  • Trame Facturation pour aide.xlsm
    21.2 KB · Affichages: 2

xUpsilon

XLDnaute Accro
Re,

Voyons voir avec le fichier ci-joint. Testé chez moi et fonctionne (j'ai remplacé la durée de stockage par un nombre fixé, ici 5)
Pour déclencher la macro, double cliquer en colonne N en face de la ligne à calculer. Le résultat revient s'écrire dans la colonne M.

Tiens moi au courant,
 

Pièces jointes

  • Trame Facturation pour aide.xlsm
    27.2 KB · Affichages: 2

Paulo27

XLDnaute Nouveau
Hello xUpsilon,

Je viens de modifier le fichier ou ajouter quelques lignes afin de savoir si c'est fonctionnel.
En revanche, j'ai une erreur de macro quand je double clique sur une cellule en "L".

Aussi, y'a t'il une possibilité de cliquer sur un bouton pour mettre tout le tableau à jour au lieu de double cliquer sur chaque ligne ?

Merci de ton aide!
 

Pièces jointes

  • Trame Facturation pour aide.xlsm
    125.8 KB · Affichages: 1

xUpsilon

XLDnaute Accro
Re,

Je pense que je commence à comprendre ce que tu veux.
En fait tu veux simplement retourner :
- 0 si la durée de stockage est inférieure au minimum de jours de stockage de la feuille "Tarifs"
- x€ avec x étant la valeur en colonne F trouvée sur la ligne qui contient le même client + type que la ligne concernée, sachant que si la quantité est > 50 alors le tarif est différent

Si j'ai correctement compris, alors que renvoyer lorsqu'on ne trouve pas la combinaison client + type + qté dans la table tarifs ?

Bonne journée,
 

chaelie2015

XLDnaute Accro
Bonjour à tous,

Je souhaite convertir la formule du fichier en PJ en Macro.
La formule se trouve dans la case 2 de la colonne M (feuille "Données Excel")
Merci de votre aide précieuse :)
Bonsoir
une proposition
VB:
Sub VotreNomMacro()
    Dim DerniereLigne As Long
    Dim i As Long
    
    DerniereLigne = Cells(Rows.Count, "A").End(xlUp).Row ' Supposant que les données sont dans la colonne A, ajustez si nécessaire
    
    For i = 2 To DerniereLigne ' Supposant que les données commencent à la ligne 2
        If IsEmpty(Range("ExtractionSAP[" & i & "]")) Then
            ' Faites quelque chose si la cellule est vide
            ' ...
        ElseIf Range("Type[" & i & "]") = "Concentré" Et [@[Durée de stockage]] >= (Application.WorksheetFunction.Index(Feuilles("Facturation").Range("D:D"), Application.WorksheetFunction.Match([@Client] & [@[Type]], Feuilles("Facturation").Range("B:B") & Feuilles("Facturation").Range("C:C"), 0))) Then
            ' Mettez en œuvre la condition pour le type Concentré
            ' ...
        ElseIf Range("Type[" & i & "]") = "Vrac" Et [@[Durée de stockage]] >= (Application.WorksheetFunction.Index(Feuilles("Facturation").Range("D:D"), Application.WorksheetFunction.Match([@Client] & [@[Type]], Feuilles("Facturation").Range("B:B") & Feuilles("Facturation").Range("C:C"), 0))) Then
            ' Mettez en œuvre la condition pour le type Vrac
            ' ...
        ElseIf Range("Type[" & i & "]") = "Composant" Et [@[Durée de stockage]] >= (Application.WorksheetFunction.Index(Feuilles("Facturation").Range("D:D"), Application.WorksheetFunction.Match([@Client] & [@[Type]], Feuilles("Facturation").Range("B:B") & Feuilles("Facturation").Range("C:C"), 0))) Then
            ' Mettez en œuvre la condition pour le type Composant
            ' ...
        ElseIf [@[Durée de stockage]] < (Application.WorksheetFunction.Index(Feuilles("Facturation").Range("D:D"), Application.WorksheetFunction.Match([@Client] & [@[Type]], Feuilles("Facturation").Range("B:B") & Feuilles("Facturation").Range("C:C"), 0))) Then
            ' Mettez en œuvre la condition lorsque [@[Durée de stockage]] est inférieur à la valeur correspondante
            ' ...
        Else
            ' Mettez en œuvre d'autres conditions ou actions ici
            ' ...
        End If
    Next i
End Sub
NB : remplacer 'Facturation' par le nom de la feuille appropriée où se trouvent vos données de facturation.
A+
 

xUpsilon

XLDnaute Accro
Bonsoir
une proposition
VB:
Sub VotreNomMacro()
    Dim DerniereLigne As Long
    Dim i As Long
   
    DerniereLigne = Cells(Rows.Count, "A").End(xlUp).Row ' Supposant que les données sont dans la colonne A, ajustez si nécessaire
   
    For i = 2 To DerniereLigne ' Supposant que les données commencent à la ligne 2
        If IsEmpty(Range("ExtractionSAP[" & i & "]")) Then
            ' Faites quelque chose si la cellule est vide
            ' ...
        ElseIf Range("Type[" & i & "]") = "Concentré" Et [@[Durée de stockage]] >= (Application.WorksheetFunction.Index(Feuilles("Facturation").Range("D:D"), Application.WorksheetFunction.Match([@Client] & [@[Type]], Feuilles("Facturation").Range("B:B") & Feuilles("Facturation").Range("C:C"), 0))) Then
            ' Mettez en œuvre la condition pour le type Concentré
            ' ...
        ElseIf Range("Type[" & i & "]") = "Vrac" Et [@[Durée de stockage]] >= (Application.WorksheetFunction.Index(Feuilles("Facturation").Range("D:D"), Application.WorksheetFunction.Match([@Client] & [@[Type]], Feuilles("Facturation").Range("B:B") & Feuilles("Facturation").Range("C:C"), 0))) Then
            ' Mettez en œuvre la condition pour le type Vrac
            ' ...
        ElseIf Range("Type[" & i & "]") = "Composant" Et [@[Durée de stockage]] >= (Application.WorksheetFunction.Index(Feuilles("Facturation").Range("D:D"), Application.WorksheetFunction.Match([@Client] & [@[Type]], Feuilles("Facturation").Range("B:B") & Feuilles("Facturation").Range("C:C"), 0))) Then
            ' Mettez en œuvre la condition pour le type Composant
            ' ...
        ElseIf [@[Durée de stockage]] < (Application.WorksheetFunction.Index(Feuilles("Facturation").Range("D:D"), Application.WorksheetFunction.Match([@Client] & [@[Type]], Feuilles("Facturation").Range("B:B") & Feuilles("Facturation").Range("C:C"), 0))) Then
            ' Mettez en œuvre la condition lorsque [@[Durée de stockage]] est inférieur à la valeur correspondante
            ' ...
        Else
            ' Mettez en œuvre d'autres conditions ou actions ici
            ' ...
        End If
    Next i
End Sub
NB : remplacer 'Facturation' par le nom de la feuille appropriée où se trouvent vos données de facturation.
A+
Bonjour,

Sauf erreur de ma part :
- on ne peut pas placer deux range concaténées par & dans un Worksheetfunction.Match
- on ne peut pas référer à une feuille via Feuilles("Facturation"), ce sera Worksheets. Sans parler qu'il faut définir avant Worksheets le classeur dans lequel on travaille. On aura donc Workbooks("Blabla").Worksheets("Facturation").Range

Bonne journée,
 

Statistiques des forums

Discussions
312 211
Messages
2 086 300
Membres
103 173
dernier inscrit
Cerba95