Tableau VBA - problème

Tilous

XLDnaute Nouveau
Bonjour à tous,

Je suis coincée avec la manipulation des tableaux,

Je veux stocker des adresses obtenues d'une boucle dans un tableau, puis réutiliser ces adresses pour faire une moyenne.

Voici mon code, il ne marche pas car au lieu de m'inscrire une moyenne, il me donne un nombre énorme en hexadécimal, j'ai beu essayer de formater la cellule en pourcentage rien à faire... peut être qu'il me ramène du texte au lieu de la donnée en format numérique...

Sub difference()
'Vérification des cases à cocher activées en mettant les résultats dans les cellules pour les regrouper
Dim ligne
Dim ligne2
Dim i
Dim Compteur As Integer
Dim Obj As OLEObject
Dim c
Dim firstAddress
Dim tableau_moy()


'Efface les données de la plage si existent
Range("K19:M65000").ClearContents

'Initialisation des variable pour incrémenter de 1 pour les noms des cases à cocher
i = 1

'initialisation du compteur pour qu'ils affichent les résultats
'les cases à cocher de la première période sont dans la colonne D et débute à la ligne 20
Compteur = 19
ligne = 20
ligne2 = ligne

'Inscription des titres pour calcul des différences de produits identiques des période #1 et #2
[K19] = "Codes"
[L19] = "Moyenne #1"
[M19] = "Moyenne #2"
[N19] = "Différence"

Dim var_debut
Dim var_fin
Dim cell_tab
Dim couper As String
Dim moyenne
Dim formule As String
cell_tab = 1

'boucle sur les objets de la Feuil1 pour trouver les cases à cocher actives
For Each Obj In Me.OLEObjects

'verifie s'il s'agit d'un CheckBox
If TypeOf Obj.Object Is MSForms.CheckBox Then
i = i + 1
Compteur = Compteur + 1
'Vérification si la case est true
If Obj.Object.Value Then
Me.Cells.Range("K" & ligne) = Me.Cells.Range("D" & Compteur).Value

'pour délimiter ma période connue situé dans les cellules V4 et V5
var_debut = Replace([V4], "$M$", "")
var_fin = Replace([V5], "$M$", "")

'Je cherche le code selon la ligne des cellules V4 et V5

With Worksheets("base de données").Range("$A$" & var_debut, "$A$" & var_fin)

'je recherche la valeur la première fois pour mettre la moyenne

Set c = .Find(Feuil1.Cells.Range("K" & ligne).Value, LookIn:=xlValues, lookat:=xlWhole)

'si la valeur existe pour la première fois

If Not c Is Nothing Then

'je stocke l'adresse de la valeur trouvée dans une variable

firstAddress = c.Address

'je répète

Do

' je manipule les données pour obtenir que le numéro de ligne pour aller chercher le rendement brut dans la colonne M
couper = Replace(c.Address, "$A$", "M")

ReDim Preserve tableau_moy(cell_tab)
tableau_moy(cell_tab) = Feuil2.Cells.Range(couper)

If c.Address = firstAddress Then

'Calcul de la moyenne
formule = "=AVERAGE(" & tableau_moy(cell_tab) & ")"
Me.Cells.Range("M" & ligne2) = formule
ligne2 = ligne2 + 1
cell_tab=cell_tab + 1

End If

'je cherche le suivant

Set c = .FindNext(c)

'je recommence tant que la valeur est la même et que l'adresse est différente de la première

Loop While Not c Is Nothing And c.Address <> firstAddress

End If

End With
ligne = ligne + 1
End If
End If
Next Obj
End Sub

Merci de m'aider
 

ERIC S

XLDnaute Barbatruc
Re : Tableau VBA - problème

Bonjour

j'ai ouvert et refermé deux fois ton fil avant de TROUVER LE COURAGE de te répondre.

Penses-tu que cela donne envie, pour t'aider, d'être obligé de décrypter ton code, sans avoir un fichier pour tester ?

Si tu veux des réponses rapides (ce forum donne en général des réponses), mets-toi à notre place.

Joins un fichier exemple, avec si possible un cas concret en disant je devrais trouver xxx et ma macro donne yyyy
 

Tilous

XLDnaute Nouveau
Re : Tableau VBA - problème

Bonjour Éric,

Désolée...

Voici le ficher, suite à l'ouverture, il faut cliquer sur le bouton à droite nommé Comparer période 1 et 2. qui listera les produits des deux périodes.

Ensuite, il faut cocher un ou plusieurs éléments puis cliquer sur l'autre bouton Différence de moyennes des périodes qui lance le sub pour le calcul de la moyenne de la première période, je devrai aussi trouver les mêmes éléments cochés s'ils existent dans la deuxième période en onscrivant la moyenne sinon j'afficherai 0%. Et pour clore je dois faire le calcul de la différence des deux prériodes.

J'espère que tu pourras m'aider.

Bonne journée!
 

Pièces jointes

  • exemple test2.xlsm
    265.4 KB · Affichages: 66
  • exemple test2.xlsm
    265.4 KB · Affichages: 70
  • exemple test2.xlsm
    265.4 KB · Affichages: 75
Dernière édition:

ERIC S

XLDnaute Barbatruc
Re : Tableau VBA - problème

Bonjour

désolé pour le retard, j'ai été pris hier et ce matin j'ai merdé comme un chef...

Bref

des pbs pour activer tes macros (bibliothèque....) je n'ai pas cherché à le faire mais du coup avec le fichier j'ai regardé ton code

en ce qui concerne les calculs de rendement, j'ai toujours peur quand on fait des moyennes de moyennes, mais je ne sais pas ce que tu cherches

Comme tu as calculé les zones de la base en fonction des dates, il est possible de faire simplement un somme.si dividé par un nb.si et tu obtiens une moyenne, voir proposition ci-dessous

Code:
            'pour délimiter ma période connue situé dans les cellules V4 et V5, + V9 et V10
            var_debut = Replace([V4], "$M$", "")
            var_fin = Replace([V5], "$M$", "")
            var_debut1 = Replace([V9], "$M$", "")
            var_fin1 = Replace([V10], "$M$", "")
            'Je cherche le code colonne L selon la ligne des cellules V4 et V5
            Range("L" & ligne).FormulaR1C1 = _
                "=SUMIF('base de données'!R" & var_debut & "C1:R" & var_fin & "C1,RC11,'base de données'!R" & var_debut & "C13:R" & var_fin & "C13)/COUNTIF('base de données'!R" & var_debut & "C1:R" & var_fin & "C1,RC11)"
            'Je cherche le code colonne M selon la ligne des cellules V9 et V10
            Range("M" & ligne).FormulaR1C1 = _
                "=SUMIF('base de données'!R" & var_debut1 & "C1:R" & var_fin1 & "C1,RC11,'base de données'!R" & var_debut1 & "C13:R" & var_fin1 & "C13)/COUNTIF('base de données'!R" & var_debut1 & "C1:R" & var_fin1 & "C1,RC11)"
            'Je cherche le code colonne N selon L et M
                'quel calcul? quand on manipule des %, cela me fait penser à une potée : choux + carottes
 

Tilous

XLDnaute Nouveau
Re : Tableau VBA - problème

Bonjour Eric,

Merci de ton aide!

Je vais regarder cela ce soir pour voir si je devrais le modifier à ta proposition, mais en fin de compte hier j'ai réussie avec un tableau après plusieurs essaies... il me reste à faire la recherche du code pour la deuxième période et d'ajouter le résultat dans la colonne M puis de faire la différence entre les deux périodes pour chacun des produits cochés.

Ouf, après ça c'est de faire le ménage de mon code qui je dois admettre avec toutes mes misères en aura grandement besoin.

Je te joins le fichier pour que tu regardes ce que j'ai réussie à faire et qui finalement me ramène les bonne données, il me reste à formater mes cellulles en pourcentage pour la présentation.

Aussi j'ai un bug lorsque je clique sur la feuille base de données et que je retourne dans ma feuille tableau de bord. les listes devraient se mettre à jour, mais lorsque je reclique sur le bouton comparer, je dois fermer mon classeur et le réouvrir sinon j'ai une erreur, saurais-tu comment régler ce problème?

Voilà un grand merci pour ton aide et j'espère finalement voir le bout de mon tunnel avec ce fichier...

Bonne journée

Louise
 

Pièces jointes

  • exemple test2.xlsm
    274 KB · Affichages: 47
  • exemple test2.xlsm
    274 KB · Affichages: 56
  • exemple test2.xlsm
    274 KB · Affichages: 48

ERIC S

XLDnaute Barbatruc
Re : Tableau VBA - problème

Bonjour

Il y a des choses à retravailler je pense car par exemple ton utilisation des combobox (macro change) est activée dès que quelque chose bouge. Je ne sais pas chez toi mais chez moi, on voit que cela ralentit....

je t'ai proposé en message perso de débugger par contact mail direct au lieu du forum, et dans ce cas, tu actualiserais le forum avec la solution finale, l'optimisation via le forum risquerait de polluer le fil

A toi de voir
 

Tilous

XLDnaute Nouveau
Re : Tableau VBA - problème

Bonjour Éric ça me va extrèmement bien!

Je commence à désespérer avec tout ce code, vraiment je me mets en doute... j'ai la ferme impression que ce sera mon dernier mandat VBA!

Merci de bien vouloir m'aider.

Louise
 

Statistiques des forums

Discussions
312 163
Messages
2 085 860
Membres
103 005
dernier inscrit
gilles.hery