Microsoft 365 Convertir Formule en Macro

  • Initiateur de la discussion Initiateur de la discussion Paulo27
  • Date de début Date de début

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

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

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

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,
 

Discussions similaires

  • Résolu(e)
Microsoft 365 Formule
Réponses
9
Affichages
374
Réponses
3
Affichages
614
Réponses
16
Affichages
1 K
Réponses
1
Affichages
177
  • Question Question
Microsoft 365 Mini macro en VBA
Réponses
1
Affichages
162
  • Question Question
XL 2019 Excel 2019
Réponses
13
Affichages
563

Statistiques des forums

Discussions
315 290
Messages
2 118 090
Membres
113 428
dernier inscrit
x.bertret