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
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