Somme Si avec deux devises

crashtwo

XLDnaute Nouveau
Bonjour à tous.

J'ai besoin d'aider car je suis vraiment plus à jour sur Excel.

Pour situer, je réalise un document qui regroupe des commandes.
Je souhaite trouver 2 formules quasi identiques pour automatiser le calcul des coûts qui sont en 2 monnaies : € et $ dans une même colonne.

Plus dans le detail. :
1 colonne, de I2 à I32, avec des valeurs chiffrées en € et en $ (pour les commandes) et une seconde colonne, de N2 à N32, avec le même type de valeurs (en € et $) pour le coût des déplacements.

2 cellules en dessous de cette colonne :
- La premiere est O32.
C'est la cellule que je dédie à la somme des commandes + coût déplacement uniquement en €
- La seconde est P32.
C'est la cellule que je dédie à la somme de toutes les commandes + coût déplacement uniquement en $

Mon souhait est donc de réaliser dans la cellule O32 une somme qui exclu les valeurs en $
Et faire la meme chose en P32 mais excluant les valeurs en €
Pour au final connaitre les deux totaux en € et $.

J'ai essayé avec une somme SI, mais je n'ai pas réussi à intégrer la condition : "si la cellule est en € ou en $"

D'avance, merci.
 

frangy

XLDnaute Occasionnel
Bonjour à tous,

Une autre proposition avec 2 fonctions VBA.
La première pour identifier les valeurs en euro et la seconde pour celles en dollar.
Il reste à adapter le code selon le format réel des données.

VB:
Function Somme_Euro(Plage As Range) As Double
Dim Cel As Range
Dim Cumul As Double
    For Each Cel In Plage
        If Cel.NumberFormat = "#,##0.00 $" Then
            Cumul = Cumul + Cel.Value
        End If
    Next Cel
    Somme_Euro = Cumul
End Function
VB:
Function Somme_Dollar(Plage As Range) As Double
Dim Cel As Range
Dim Cumul As Double
    For Each Cel In Plage
        If Cel.NumberFormat = "[$$-409]#,##0.00" Then
            Cumul = Cumul + Cel.Value
        End If
    Next Cel
    Somme_Dollar = Cumul
End Function
Cordialement.
 

Fichiers joints

frangy

XLDnaute Occasionnel
Ce n’est pas avec une image que nous pourrons effectuer des tests. Pour nous permettre de vérifier le format de tes données, il faut un fichier contenant des informations qui reflètent la réalité (données anonymes, bien sûr).

Cordialement.
 

frangy

XLDnaute Occasionnel
@Victor21 et @chris

Vous aurez compris que le cumul n'est utile que pour s'assurer que l'ensemble des données a été pris en compte.
Il n'a pas pour finalité de fabriquer des eurodollars.
(j'ai hésité avant de répondre :) )

Cordialement.
 

mapomme

XLDnaute Barbatruc
Bonsoir à toutes et tous :), salut @frangy ;),

Une fonction qui somme n'importe quelle devise même le Yen. Voir formules en H3:I6. Le format importe peu à condition que dans l'affichage apparaisse le symbole monétaire ou le code devise international.

VB:
Function Somme_Devise(plage As Range, Optional pepete As String) As Currency
Dim cumul As Currency, pattern, xcell
  If IsMissing(pepete) Then pattern = "*" Else pattern = "*" & pepete & "*"
  For Each xcell In plage
    If IsNumeric(xcell) Then If xcell.Text Like pattern Then cumul = cumul + xcell
  Next xcell
  Somme_Devise = cumul
End Function
 

Fichiers joints

Dernière édition:

crashtwo

XLDnaute Nouveau
Ton fichier en retour.
J'ai encore besoin de votre aide par rapport à ce travail.
Donc, j'aurais besoin toujours que les € ou $ vont à gauche ou droite, mais il faut ajouter le calcul quand ce n'est pas une journée complète mais des heures par un taux horaire. Et aussi qu'au niveau de la démobilisation, si c'est en $ ou €.
Je ne sais pas si c'est faisable. Mais ce serait top si vous saviez m'aider.
 

Fichiers joints

mapomme

XLDnaute Barbatruc
Bonsoir @crashtwo,

mais il faut ajouter le calcul quand ce n'est pas une journée complète mais des heures par un taux horaire. Et aussi qu'au niveau de la démobilisation, si c'est en $ ou €.
J'ai codé une autre fonction : Est_Devise (plage , pepete)

Cette fonction prend deux arguments en entrée :
  1. plage qui doit être une plage d'une seule ligne ou d'une seule colonne
  2. pepete qui est le symbole monétaire qu'on recherche (cet argument est facultatif - s'il est absent, on considère toutes les devises)

Cette fonction renvoie un tableau de même dimension que la plage d'entrée. Chaque élément de ce tableau vaut TRUE (VRAI) si la cellule correspondante de la plage est au format de la devise recherchée. Dans le cas contraire, l'élément du tableau en retour contiendra FALSE (FAUX).
Cette fonction peut donc être très utile au sein de la fonction SOMMEPROD pour déterminer si chaque cellule d'une plage est au format de la devise recherchée.

Pour l'exemple, voir les formules des cellules N35, N38, N41 et O35, O38, O41.

Le code de la fonction Est_Devise est dans module1:
VB:
Function Est_Devise(plage As Range, Optional pepete As String)
Dim t, pattern, j&, i&, n&, xcell
  If IsMissing(pepete) Then pattern = "*" Else pattern = "*" & pepete & "*"
  If plage.Count = 1 Then
    Est_Devise = (plage.Text Like pattern)
  ElseIf plage.Rows.Count = 1 Then
    t = plage.Value
    For Each xcell In plage
      n = n + 1
      t(1, n) = xcell.Text Like pattern
    Next xcell
    Est_Devise = t
  ElseIf plage.Columns.Count = 1 Then
    t = plage.Value
    For Each xcell In plage
      n = n + 1
      t(n, 1) = xcell.Text Like pattern
    Next xcell
    Est_Devise = t
  Else
    Est_Devise = CVErr(xlErrRef)
  End If
End Function
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Bonsoir.
Information: Si le format d'une cellule est monétaire, la propriété Value du Range qui la représente est servie en Currency, bien que sa vraie valeur demeure stockée en Double dans Excel. Il serait donc possible de faire simplement Est_Devise = VarType(Plage.Value) = vbCurrency.
Il reste cependant à distinguer le $ du € dans le format de nombre.
 

crashtwo

XLDnaute Nouveau
Merci pour l'aide. Dommage qu'on ne sache pas faire cela en seulement deux cases. Mais je vais utiliser ce tableau en cachant le petit tableau.
 

crashtwo

XLDnaute Nouveau
Top merci, par contre, je fais la même chose que ta formule et ça me met: "NOM!", tu saurais m'expliquer pourquoi?
 

Discussions similaires


Haut Bas