Microsoft 365 Calcul d'une somme entre deux bornes Vba

Piment

XLDnaute Junior
Bonjour à tous, Soan,
Je crée un nouveau fil de discussion car je n'ai pas eu d'aide sur mon précédent fil.
Avant tout, merci aux internautes qui ont eu la gentillesse de m'aider sur ce Forum, qui n'a pas son pareil.
Je fais appel à nouveau à vos compétences.
Ceux qui m'ont précédemment aidé sur ce fichier verront que je l'ai quelque peu fait évoluer.
Je pense être dans la dernière ligne droite.
Donc, voici ma difficulté:
Dans la feuille VentilationCouts, je voudrais que la colonne C 7 additionne les lignes se trouvant entre les deux zones vertes: additionne les dépenses de chaque "Cellule DGS" "Cellule Secrétariat..." ect...
Les Services additionnent toutes les "Cellules" qui sont à l'intérieur du Service: "Cellule DGS", "Cellule Secrétariat...", "Cellule Police..." ect.
Les Directions additionnent tous les services qui sont à l'intérieur de la Direction.
J'a beaucoup cherché, mais je n'y arrive pas.
J'ai une erreur #Nom? en C7 gérée par la ligne de code de la formule de calcul de l'USF Nouveau_Numero.
Je suis bloqué sur cette ligne de code, et donc pas beaucoup avancé.
Aussi, je serais heureux de pouvoir bénéficier d'une aide de la communauté.
Ci-joint le fichier.
Merci à vous.
 

Pièces jointes

  • 2021 Contrôle Facturation - Copie.xlsm
    276.8 KB · Affichages: 18

BrunoM45

XLDnaute Barbatruc
Bonjour Piment,

En dehors du fait que je vois des numéros de portables qui semblent valides et qui peuvent permettre d'identifier des personnes :eek:

Dans votre code, il faut changer la ligne
Code:
Trouver(, (UneColonne - 1)).Formula = "=SUM(Range(Cells(MaPrLigne.Value,UneColonne), Cells(MadernLigne.Value,UneColonne)))"
Par
VB:
Trouver(, (UneColonne - 1)).Formula = "=SUM(" & Range(Cells(MaPrLigne.Value, UneColonne), Cells(MadernLigne.Value, UneColonne)) & ")"

Sinon la formule sur la feuille n'est forcément pas bonne
Code:
=SOMME(Range(Cells(MaPrLigne.Value;UneColonne); Cells(MadernLigne.Value;UneColonne)))
Range et Cells n'est pas reconnu en tant que fonction

@+
 

Piment

XLDnaute Junior
Bonjour BrunoM45,
Merci beaucoup de m'avoir consacré un peu de temps.
Les numéros sont totalement arbitraires.
Je vous l'accorde, j'en arrive à la conclusion que la formule n'est pas bonne.
J'ai modifié selon votre code, et maintenant il m'indique :"Objet requis".
Si vous voulez bien m'accorder un peu de votre temps afin de me permettre de boucler ce fichier.
Comment écrire cette ligne de code?
J'ai beaucoup essayé, mais en vain.
Merci d'avance.
 

BrunoM45

XLDnaute Barbatruc
Re,

Effectivement, je n'ai pas testé et pas fait attention que "MaPrLigne" et "MaDernLigne" n'ont pas de type

Pour mettre
Makefile:
MaPrLigne.Value
il faut que ce soit un objet type range

Sinon il faut modifier le code de ces 2 lignes
Code:
  PremLigne = Selection.End(xlDown).Select
  derlig = Selection.End(xlDown).Select
Il faut remplacer le ".Select" par un ".Row", mais selon l'instruction les 2 auront la même valeur !?

Il faut aussi modifier la ligne incriminée comme suit
Code:
Trouver(, (UneColonne - 1)).Formula = "=SUM(" & Range(Cells(MaPrLigne, UneColonne), Cells(MadernLigne, UneColonne)).Address & ")"

@+
 

Piment

XLDnaute Junior
J'ai testé votre nouvelle ligne de code et il me renvoie: "Erreur défini par l'application ou par l'objet."
Je me doute également que le problème vient des codes de recherche de la PremLigne et derlig du groupe.
Je n'ai pas trouvé d'autres façons de faire définir la plage de calcul.
De la manière dont j'ai procédé, je ne récupère pas leurs valeurs: je me positionne juste dessus. Hors pour faire le calcul de leurs sommes il me faut leurs valeurs non!
Alors comment faire?? Je suis perdu!!!
Si vous voulez bien m'aider.
Merci à vous
 

BrunoM45

XLDnaute Barbatruc
Re,

Voici le fichier 😉

En revanche j'ai supprimé le tableau structuré de la feuille "VentilationCouts" il me posait souci et pour moi, n'a aucune utilité 🤔

Lors de la création d'un nouveau numéro, je ne vois pas comment les données de consommation sont inscrites ?

@+
 

Pièces jointes

  • Piment_2021 Contrôle Facturation.xlsm
    269.5 KB · Affichages: 9

Piment

XLDnaute Junior
Bonjour BrunoM45
Merci à vous de m'avoir aidé sur ce coup.
Je regarde çà et je vous fait un retour.
Je prends bien note de la suppression du tableau structuré de la feuille "VentilationCoûts.
Il me faut vérifier que cette suppression n'entraine pas de problème dans mes autres codes, notamment ceux de l'USF "Modifier ou Ajouter des Dépenses".
Les données consommations sont inscrites par le biais de l'USF "Modifier ou Ajouter des Dépenses".
Ici il s'agit de créer un nouveau numéro dans le tableau de base: Feuille "Controle", et les codes permettent dans la foulée d'intégrer ce nouveau numéro dans le tableau de la feuille "VentilationCoût" en fonction de la Cellule, du Service et de la Direction, et dans la Feuille "Top10Conso".
J'ai pensé, à un moment, de faire ces calculs dans le module de l'USF "Modifier ou Ajouter des Dépenses", qui est utilisé à la réception des factures pour saisir les données de consommations.
Mais la création d'un nouveau numéro peut intervenir à n'importe quel moment dans le Mois, et je dois l'intégrer dès sa création par l'opérateur de téléphonie. J'aurais eu, à ce moment là un tableau dont les totaux n'auraient pas été à jour. D'où l'idée de lui faire faire les calculs dès la création du nouveau numéro: du coup j'ai mes tableaux actualisé.
Merci encore pour ta précieuse aide. Je m'étais senti un peu abandonné sur ce coup.
Je te fais un retour.
 

Piment

XLDnaute Junior
J'ai testé les modifications apportées, tout fonctionne exactement comme je le voulais, sauf la ligne de code:
Loop While Not MaPlage.Cells(DerLig + 1, 1) Like "3.831*" And Not MaPlage.Cells(DerLig + 1, 1) Like "10000*". Si j'insère un nouveau numéro à la dernière ligne du tableau: Divers, Service Libre, Cellule Libre, il provoque ce beug. J'attire ton attention qu'il y a une faute de frappe sur le nom de la cellule Libre (CelluleLibre); Il manque un espace entre cellule et Libre, dans la feuille "VentilationCouts". Je vais remettre la msgBox pour signaler l'erreur afin d'éviter le beug sur la ligne de code PremLig = Trouver.Row
Sinon tout fonctionne parfaitement.

Pourrais-tu corriger ce beug? Je vais maintenant essayer de m'approprier les nouvelles lignes de codes .
Milles Merci pour ton aide.
 

job75

XLDnaute Barbatruc
Bonjour Piment, Bruno,

Effectivement utiliser un tableau structuré est inutile puisque les formules diffèrent d'une ligne à l'autre.

Mais bon, voyez le fichier joint et cette fonction VBA :
VB:
Function SommeCouleur(Colonne As Range) As Double
Dim c As Range, coulPolice&, derlig&
Set c = Application.Caller.Offset(1)
coulPolice = c.Font.Color
derlig = c.Parent.UsedRange.Row + c.Parent.UsedRange.Rows.Count
While c.Font.Color = coulPolice And c.Row < derlig
    If IsNumeric(CStr(c)) Then SommeCouleur = SommeCouleur + CDbl(c)
    Set c = c(2)
Wend
End Function
Le code est dans Module5.

Formule en VentilationCouts!C7, à tirer sur C7:N7 et copier-coller en C11, C13, etc :
Code:
=SommeCouleur(C:C)
A+
 

Pièces jointes

  • 2021 Contrôle Facturation(1).xlsm
    267 KB · Affichages: 12

job75

XLDnaute Barbatruc
Vous avez digéré la formule en C7 ? Alors continuons.

Voyez ce fichier (2) avec la formule en C6 qui utilise cette autre fonction VBA :
VB:
Function SommeFormule(Colonne As Range) As Double
Dim c As Range, derlig&, f1$, f2$, f$
Set c = Application.Caller.Offset(1)
derlig = c.Parent.UsedRange.Row + c.Parent.UsedRange.Rows.Count
f1 = "=SommeFormule*"
f2 = "=SommeCouleur*"
While c.Row < derlig
    f = c.Formula
    If f Like f1 Then Exit Function
    If f Like f2 Then If IsNumeric(CStr(c)) Then SommeFormule = SommeFormule + CDbl(c)
    Set c = c(2)
Wend
End Function
En C5 formule sans VBA :
Code:
=SOMMEPROD((GAUCHE($A6:$A$1000;8)=$A5)*C6:C$1000)
De même en C4 :
Code:
=SOMMEPROD((NBCAR($A5:$A1000)=8)*C5:C1000)
La limite 1000 est à adapter au nombre de lignes maximum du tableau.
 

Pièces jointes

  • 2021 Contrôle Facturation(2).xlsm
    267.2 KB · Affichages: 5

Piment

XLDnaute Junior
Bonjour Bruno, Job45, le Forum
Je n'ai pas donné de nouvelles depuis un moment, car j'avais un gros, gros dossier à finaliser.
Comme j'ai un peu de temps en ce moment, j'ai repris mon projet.
Comme vous pourrez le constater, je l'ai fait quelque peu évoluer.
Comme je vous l'avais dit, je me suis appuyé sur les fichiers que vous avez eu la gentillesse de m'envoyer pour essayer de progresser dans mon apprentissage de VBA.
Dans le fichier joint vous verrez certainement des choses qui ne vont pas. Il est quelque peu brouillon, je vous l'accorde. Aussi, si vous le voulez bien, n'hésitez pas à me proposer des modification, notamment en épurant quelque peu ma production.
Je me permets de vous solliciter à nouveau pour m'aider à résoudre deux problèmes sur lesquels je bute:
1) Je n'arrive pas à trouver le bon code pour qu'il me fasse le calcul du reste à consommer (Cellule S17 du tableau de la feuille VentilationCouts. Il faudrait inverser la formule que j'ai écrite: [CODE=vb]LaForm4 = ("=SOMME(" & Range(Cells(MaPrLigne, MaPremCol), Cells(MaPrLigne, MadernColCalcul)).Address & ") -" & " (" & (Cells(MaPrLigne, MaCelConso)) & ") /" & "(" & (Cells(MaPrLigne, MaCelConso)) & ")")[/CODE]
Cete ligne de code se trouve dans les codes du bouton "Valider" de l'USF Nouveau_Numero.
2) Mes lignes de code de trie situées au même endroit ne font pas le tri comme il le faudrait.
Comme vous pouvez le constater, lors du tri, il me classe bien les noms et les Numéro de Tél qui y sont lié, mais mes formule de calcul restent liées à la première ligne.
J'ai beaucoup essayé, mais je n'y arrive pas.
Je vous serais très reconnaissant de me consacrer un peu de votre temps et de votre compétence.
Merci à vous.
 

Pièces jointes

  • 2022 Contrôle Facturation (5).xlsm
    263.2 KB · Affichages: 5

Piment

XLDnaute Junior
Bonjour BrunoM45, Job75,tbft, le Forum,
Je fais suite à mon post précédent(#45).
J'ai résolu mon mon problème de calcul. La bonne formule est la suivante:
VB:
 LaForm4 = (("=(" & (Cells(MaPrLigne, MaCelConso)) & " -" & " " & "SOMME(" & Range(Cells(MaPrLigne, MaPremCol), Cells(MaPrLigne, MadernColCalcul)).Address) & "))/" & "(" & (Cells(MaPrLigne, MaCelConso)) & ")")
.
Du Coup, mon problème de tri est aussi résolu.
J'essaye maintenant de faire les calculs pour les totaux de la ligne "Services".
J'aurais besoin d'un coup de pouce pour y arriver.
Merci de me consacrer un peu de votre temps.
 

Pièces jointes

  • Forum 2022 Contrôle Facturation (5).xlsm
    258.1 KB · Affichages: 5

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
290 754
Messages
1 910 207
Membres
176 538
dernier inscrit
Charlydebutant
Haut Bas