XL 2010 Pb macro (valider ou non cellule)

MelissaJoubert

XLDnaute Junior
Bonjour à tous !!

J'ai à nouveau besoin de votre aide pour la création d'un macro :D

Je vous envoi mon fichier excel pour que vous compreniez mieux :)
(je vous conseil de l'ouvrir avant de lire la suite sinon vous allez rien comprendre je pense )

On va se préoccuper seulement de l'onglet "feuil1".
J'aimerai que lorsque je coche la case, le PU dans le tableau correspondant ne se compte pas dans le PU moyen "I6".

Exemple:
Si je coche la case du premier tableau "C14", le PU de la case " I13" ne va pas se comptabilisé dans mon PU moyen situé en I6.

J'espere que vous comprenez mon problème :p

Par contre en I6 j'ai mis une formule simple mais il me faudrait également un macro pour toujours m'ajouter les données rempli dans les cases PU car dans ma page je vais rajouter des petits tableaux donc il faudrait que mes prix s'ajoute à chanque fois.

Exemple : Si j'ajoute un tableau en cliquant sur "ajouter", quand je vais remplir ma case PU, la valeur que je vais rentrer doit être comptabilisé dans mon PU moyen automatiquement.

Merci à vous j'ai vraiment besoin de votre aide :) !!
 

Pièces jointes

  • test3.xlsm
    58.8 KB · Affichages: 32

cathodique

XLDnaute Barbatruc
Bonjour, un essai. Dans un module standard le code ci-dessous
VB:
Sub Calcul_Moyenne()
    With Sheets("Feuil1")
        dl = .Range("I" & Rows.Count).End(xlUp).Row
        Set moyenne = .Range("I12")
        For i = dl To 10 Step -6
            If IsNumeric(.Cells(i, 9)) And .Cells(i, 9) <> 0 Then
                moyenne = Application.WorksheetFunction.Average(.Cells(i, 9))
            End If
        Next i
    End With
End Sub
Ensuite appeler la procédure à la fin de "Private Sub Worksheet_Change(ByVal Target As Range)"
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False

'MsgBox Target.Interior.ColorIndex
If Target.Column = 4 And Target.Interior.ColorIndex = 6 Then 'colonne D sur une cellule jaune...
    'on cherche la position du tableau dans la feuille données
    With Sheets("Données").Range("B:B")
        'MsgBox Target.Item(1)
        Set c = .Find(Target.Item(1)) ', LookIn:=xlValues, XlLookAt:=xlWhole)
        If Not c Is Nothing Then
            'recopie du tableau
            .Range("B" & c.Row - 1 & ":G" & c.Row + 2).Copy Destination:=Target.Offset(-1, 1) 'va comprendre pourquoi il faut mettre B alors que le tableau commence en C......?????
        Else
            Target.Offset(-1, 1).Resize(4, 5).ClearContents 'si numéro pas trouvé: on efface
        End If
    End With
End If
Call Calcul_Moyenne    '**********ICI*********
Application.EnableEvents = True
End Sub
 

MelissaJoubert

XLDnaute Junior
Bonjour ,

Merci pour ta réponse rapide !!
Bonjour, un essai. Dans un module standard le code ci-dessous

Une fois que j'ai créé ce macro, je l'affecte à quoi ?

Ensuite appeler la procédure à la fin de "Private Sub Worksheet_Change(ByVal Target As Range)"

Pour cela, j'ajoute juste la dernière parti sur le macro et c'est tout ?

Car ça ne fonctionne pas donc j'ai du faire les mauvaises manipultaion :p

Merci beaucoup :D
 

MelissaJoubert

XLDnaute Junior
Bonjour à tous ,

Désolé cathodique, je n'ai pas l'habitude des forums et donc je ne sais pas trop comment ça fonctionne !!!

J'ai une nouvelle a vous faire parvenir :D
Je vous met comme toujours mon fichier en pièce jointe pour une meilleure compréhension :)

On va se préoccuper seulement de l'onglet "feuil2"

J'aimerai tout d'abord modifier mon code qui appartient à mon onglet, pour ma case "affaire".
Lorsque je clique dessus un nouveau cadre ce copie colle mais j'aimerai que la case garde la même mise en forme que celle que je copie.

Ensuite mon deuxième problème:
J'ai également créé un code pour la case avec le "." dans l'onglet "feuil2".
J'ai réussi à faire un code qui dit que lorsque je clique dessus, tout ce que j'ai en jaune deviens gris et inversement. Sauf que le problème c'est que j'ai associé à ce code des cellules particulaire et donc quand je rajoute un nouveau cadre, ce code ne fonctionne plus pour le cadre d'en dessous.

Et mon dernier problème :
J'ai créé un macro "calcul PU moyen" mais il ne fontionne pas donc j'aimerai qu'il fonctionne ahah !!

Merci de votre aide, si vous ne comprenez pas certaine chose n'hésiter pas à me le demander :D
 

Pièces jointes

  • test6.xlsm
    70 KB · Affichages: 29

vgendron

XLDnaute Barbatruc
Hello

J'aimerai tout d'abord modifier mon code qui appartient à mon onglet, pour ma case "affaire".
Lorsque je clique dessus un nouveau cadre ce copie colle mais j'aimerai que la case garde la même mise en forme que celle que je copie.
on l'avait pas déjà fait sur les tableaux de la feuille 1 ?
suffit de reprendre la meme solution


J'ai également créé un code pour la case avec le "." dans l'onglet "feuil2".
J'ai réussi à faire un code qui dit que lorsque je clique dessus, tout ce que j'ai en jaune deviens gris et inversement. Sauf que le problème c'est que j'ai associé à ce code des cellules particulaire et donc quand je rajoute un nouveau cadre, ce code ne fonctionne plus pour le cadre d'en dessous.
normal. quelque soit la target (cellule cliquée) tu modifies toujours les memes cellules des lignes 21 à 27

il faut adapter cette zone à partir de la target..
voir code

J'ai créé un macro "calcul PU moyen" mais il ne fontionne pas donc j'aimerai qu'il fonctionne ahah !!
idem, il me semble que je t'avais déjà fait une proposition et j'avais meme notifié que le calcul de la moyenne tel qu'il est n'est pas correct. et que j'ai corrigé.. ?? non??
 

Pièces jointes

  • test6 (1).xlsm
    67.1 KB · Affichages: 29

vgendron

XLDnaute Barbatruc
je viens de retrouver le calcul Moyenne
à adapter donc pour le calcul PU moyen

VB:
Sub Calcul_Moyenne()
    With Sheets("Feuil1") 'dans la feuille "Feuil1"
        dl = .Range("I" & Rows.Count).End(xlUp).Row 'on cherche la dernière ligne contenant un PU (= 1ere ligne du dernier tableau)
        For i = dl To 13 Step -6 'on parcourt tous les PU en partant du dernier jusqu'au premier situé en ligne 13
            If .Cells(i + 1, 3) = "y" Then 'si il y a un "y" en face du PU
                somme = somme + .Cells(i, 9)
                nb = nb + 1
            End If
        Next i
        If somme <> "" Then
            .Range("I7") = somme / nb
        Else
            .Range("I7") = "calcul impossible" 'aucun tableau n'est pris en compte
        End If
    End With
   
End Sub


le calcul "faux" fait
pour les valeurs trouvées 1 puis 2 puis 3
moyenne(1,2) = 1.5
puis moyenne (1.5,3)=2.25

alors que la moyenne attendue est
moyenne (1,2,3)=2
 

MelissaJoubert

XLDnaute Junior
J'ai modifié pour l'appliquer à la feuil2 mais ça ne marche pas je trouve pas mon erreur :

code (visual basic):

Sub calcul_PU_moyen()
With Sheets("Feuil2")
dl = .Range("P" & Rows.Count).End(xlUp).Row
Set moyenne = .Range("P22")
For i = dl To 23 Step -13
If .Cells(i + 1, 5) = "." Then
somme = somme + .Cells(i, 9)
nb = nb + 1
End If
Next i
If somme <> "" Then
.Range("P7") = somme / nb
Else
.Range("P7") = "calcul impossible"
End If
End With
End Sub
 

vgendron

XLDnaute Barbatruc
problèmes d'indices et de step

dans ta feuille 2, les PU sont toutes les 9 lignes. et pas 13
et la colonne P, c'est Cells(i,16) au lieu de Cells (i,9)
et ta recherche de "." ou ".." est en colonne B plus E---> Cells(i,2) au lieu de Cells(i,5)

VB:
Sub calcul_PU_moyen()
    With Sheets("Feuil2")
        dl = .Range("P" & Rows.Count).End(xlUp).Row
        Set moyenne = .Range("P22")
        For i = dl To 23 Step -9
            If .Cells(i + 1, 2) = "." Then
                somme = somme + .Cells(i, 16)
                nb = nb + 1
            End If
        Next i
        If somme <> "" Then
            .Range("P7") = somme / nb
        Else
            .Range("P7") = "calcul impossible"
        End If
    End With
End Sub
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260