formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

chroberto

XLDnaute Nouveau
Bonsoir à toutes et tous,
formule SOMMEPROD( ) dans toutes les cases de ce tableaux.(fichier joint allégé...)

Le problème c'est que dans mon fichier définitif, j'aurais 5 ou 6 autres onglets qui nécéssiteront les mêmes formules matricielles.
Ceci représenterait un nombre trop important de formule lourdes pour le fichier et le PC,

Question:
Quoi mettre en place pour alléger le PC et le fichier, ne pas ralentir de trop le calcul des formules? un code VBA!
Ci oui lequel? (j'avais penser un code VBA pour saisir dans toutes les cases la formule, donc le résultat et ensuite un copier/coller (valeur) pour alléger tout ça) le tout en macro avec un bouton. Est-ce une bonne idée, car je débute seulement en VBA.
Sinon autres proposition,,,

Dans l'onglet "AD": saisie de nvelles lignes suivant l'activitée de l'entreprise... c'est pour cette raison que j'ai mis les matrices en dynamique.
merci par avance de votre aide
 

Pièces jointes

  • exemple_forum_VBA.zip
    20.7 KB · Affichages: 66
Dernière édition:

youky(BJ)

XLDnaute Barbatruc
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

Bonjour chroberto,
J'ai pas encore ouvert ton fichier mais déja il est très facile de remplacer les formules par leurs valeurs en procédent ainsi . . .
selectionnne ton tableau et copier ensuite de suite collage spécial et "que les valeurs"
A bientot
 

CISCO

XLDnaute Barbatruc
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

Bonjour

J'ai l'impression que tu peux supprimer le *1 dans toutes les formules SOMMEPROD puisque tu as "supprimé" l'affichage des 0, mais, malheureusement, cela ne changera pas grand chose à ton problème.

@ plus
 

JCGL

XLDnaute Barbatruc
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

Bonjour à tous,

As-tu essayé avec un TCD ?

Je ne trouve pas les mêmes chiffrres...

A+ à tous
 

Pièces jointes

  • JC exemple_forum_TCD.xls
    121.5 KB · Affichages: 99

youky(BJ)

XLDnaute Barbatruc
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

Re:
Voici ton fichier avec une macro et un bouton
Reviens si besoin de + d'explication
Tu dois activer les macros au lancement du fichier
A+
 

Pièces jointes

  • exemple_forum_VBA2.zip
    27.7 KB · Affichages: 92
  • exemple_forum_VBA2.zip
    27.7 KB · Affichages: 97
  • exemple_forum_VBA2.zip
    27.7 KB · Affichages: 94

chroberto

XLDnaute Nouveau
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

bonjour tout le monde, (youky(BJ), JCGL, CISCO) :)

premièrement : merci à tous pour avoir jeté un oeil sur mon pb.

deuxièmement : JCGL si tu ne trouve pas les même valeur entre mon tableau de suivi et ton TCD c'est tout simplement car dans l'onglet "AD" il y a des codes clients qui ne se trouve pas dans mon tableau (réduction du fichier oblige!!!) mais ton oeil avertit en vaut deux...bien vu l'aveugle!!!! :D

troisièmement : youky merci pour ton code VBA, il semble fonctionner parfaitement pour ce fichier d'exemple...maintenant j'aimerai le tester sur mon fichier complet mais pour celà il faudrait que tu m'explique ton code si possible...(merci par avance)
J'ai vu les plages de données que tu délimitais mais je n'ai pas trop compris le nom des feuilles (pkoi "Feuil8" par exemple) et le principe de recherche dans ton code n'a plus rien à voir avec mon SOMMEPROD()?
Enfin est-ce que tu pourrais me faire une ptite explication rapide de ton code.
merci à plus tard...
 

youky(BJ)

XLDnaute Barbatruc
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

Bonjour à tout le fil,
J'ai amélioré la macro dans ce fichier pour prendre en compte la vrai dimension du tableau
J'ai mis pas mal d'explications dans les cadres roses à droite
A+
 

Pièces jointes

  • exemple_forum_VBA2.zip
    29.6 KB · Affichages: 98
  • exemple_forum_VBA2.zip
    29.6 KB · Affichages: 84
  • exemple_forum_VBA2.zip
    29.6 KB · Affichages: 90

chroberto

XLDnaute Nouveau
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

merci youky(BJ), ton code VB est au pti oignon!!!
je l'ai mis en place sur d'autre feuille de mon fichier et ça fonctionne nickel.
UN GRAND MERCI :)
maintenant si je veux devenir de plus en plus autonome à l'avenir... ambition de chaque Exelnaute!!! j'aimerai bien que tu m'explique juste l'intitulé de tes lignes de commande ci-dessous
Code:
 For k = 2 To Feuil4.[A65000].End(3).Row
col = Application.Match(Feuil4.Cells(k, 3), Range("C3", Cells(3, dcol)), 0)
lig = Application.Match(Feuil4.Cells(k, 1), Range("A5:A" & bas), 0)
pourquoi tu nomme ainsi "feuille4" alors que mes feuilles à moi pocède d'autre nom?
(pour ma culture perso VBA)
je te remercie par avance pour cette petite information complèmentaire.
Mais sachez que je suis amplemant satisfait des réponses qui m'ont été apportées.

a + le FORUM
 

jeanpierre

Nous a quitté
Repose en paix
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

Bonjour,

youky(BJ) étant déconnecté, je me permets de te répondre

"pourquoi tu nomme ainsi "feuille4" alors que mes feuilles à moi pocède d'autre nom?"

Simplement parce que youky(BJ) utilise le code name de la feuille c'est-à-dire son nom avant ton propre changement.

Tu peux le voir sous VBE où tu trouveras "Feuil1" et à côté le nom que tu lui a attribué.

Bon AM.

Jean-Pierre
 

youky(BJ)

XLDnaute Barbatruc
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

Bonsoir à Jean-pierre
que je remercie pour s'impliquer dans le fil et avoir donné les meilleurs explications.
Je voudrais seulement expliquer le pourquoi de l'utilisation du codename plutot que le name de la feuil. . . .
j'ai réalisé quelques fichiers pour la grande distribution dont je faisais parti, je me suis vite rendu compte que pas mal de gens renomaient à leur guise les onglets et mes macros ont vite plantées. il fallait vite faire un choix, soit tout verrouiller(pas toujours facile) ou contourner le problème.
Le codeName . . . . ho ! ! ! ! miracle est venu à mon secours.
Depuis je me suis rendu compte que personne n'allait bidouiller ce codename en VBA
donc les gens peuvent renommer leurs onglets à leurs guises sans perturber la macro.

Je regrette seulement une chose jean-Pierre c'est que ce codename ne soit pas plus employé.(apparement je suis l'un des seuls à l'employer)
Au plaisir d'un prochain fil . . .
 

chroberto

XLDnaute Nouveau
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

Bonjour le fil,
youky(BJ) ce code que tu m'as réalisé est exactement ce que je recherchais, en plus il est adaptable pour toutes mes autres feuilles qui seraient sur le même principe... à un poil près!
Je m'explique: dans ton code tu paramètres "bas" et "dcol" pr qu'ils recherchent automatiquement la zone qui sera à remplir ensuite mais par contre dans ta ligne d'instruction "effacement des précédentes données" tu as conservé les paramètre de ton code initial (avant modif adapté pr ttes feuilles).
comment puis-je modifier mon : Range("C5:p" & bas) pour qu'il ne s'arrête pas à "P" mais pas non plus à ma dernière ligne 5 (car j'ai 2 colonne de sommes).
en gros ce serait la même colonne que la variable "dcal".

merci de me renseigner sur la modif à apporter...
je suis ouvert à toute aide, pas uniquement à celle de youky(BJ) :)

a+ le fil...

Code:
Sub PLAY()
bas = [A65000].End(3).Row
dcol = [IV3].End(xlToLeft).Column
[U][B]Range("[COLOR="Red"][B]C5:P[/B][/COLOR]" & bas).ClearContents[/B][/U]
For k = 2 To Feuil4.[A65000].End(3).Row
col = Application.Match(Feuil4.Cells(k, 3), Range("C3", Cells(3, dcol)), 0)
lig = Application.Match(Feuil4.Cells(k, 1), Range("A5:A" & bas), 0)
On Error Resume Next
Cells(lig + 4, col + 2) = Cells(lig + 4, col + 2) + 1
If Err > 0 Then Err.Clear
Next
End Sub
 

Pièces jointes

  • chroberto_17-12-10h30.zip
    20.3 KB · Affichages: 56

youky(BJ)

XLDnaute Barbatruc
Re : formule SOMMEPROD( ) trop lourdes...besoin d'aide pr l'alléger

Bonjour chroberto,
Voici j'ai modifié 2 lignes
Pour trouver la dcol j'utilise la ligne 4 et j'enleve -2
j'ai pas testé mais ça doit le faire
A+
Code:
Sub PLAY()
'crée par christophe ROBERT le 16 décembre 2009
bas = [A65000].End(3).Row
dcol = [[COLOR="red"]IV4[/COLOR]].End(xlToLeft).Column [COLOR="red"]- 2[/COLOR]
Range("C5[COLOR="Red"]", Cells(bas, dcol)).[/COLOR]ClearContents
For k = 2 To Feuil4.[A65000].End(3).Row
col = Application.Match(Feuil4.Cells(k, 3), Range("C3", Cells(3, dcol)), 0)
lig = Application.Match(Feuil4.Cells(k, 1), Range("A5:A" & bas), 0)
On Error Resume Next
Cells(lig + 4, col + 2) = Cells(lig + 4, col + 2) + 1
If Err > 0 Then Err.Clear
Next
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 884
Membres
103 404
dernier inscrit
sultan87