Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

deux conditions

  • Initiateur de la discussion Initiateur de la discussion marti018
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

marti018

Guest
bonjour le forum, bonjour tout le monde...
je vous écris car j'ai besoin d'aide...
je cherche à mettre en place dans un tableau une macro qui en fonction de deux conditions fait la somme de la cellule à droite de la cellule cible dans un total...
J'ai écris un bout de code mais je ne sais pas comment mettre bout à bout ces deux conditions..

voilà merci d'avance.....bravo pour ce super forum!!
 

Pièces jointes

Re : deux conditions

😀 merci beaucoup hervé cela marche à la perfection j

uste pour information pourquoi mettre
PHP:
arget = UCase(Target(1))
target (1) j'avoue que je n'ai pas compris pourquoi "1"

bon fin d'aprem et encore merci.....a+++😀
 
Re : deux conditions

Bonjour tout le monde,

Ici Tata Olive ou Petite Olive... Merci Hervé d'avoir exercé tes talents pour aider notre ami MARTI qui était au bord du goufre. Je savais que tu saurais l'empêcher de sauter.
 
Re : deux conditions

bises brigitte, bonjour marti

pourquoi target(1) ?

simplement parce que tu as fusionné tes cellules (tres mauvaise idée d'ailleurs).

donc le code doit rechercher la premier cellule de la fusion d'ou le 1.

salut
 
Re : deux conditions

merci petite olive encore quelques secondes et je sautais du haut de mon clavier!!

Hervé pourquoi est-ce une si mauvaise idéee de fusionner des cellules, il s'agit de la barre de tititre et cela me permet de déterminer la dernière colonne...c'est pas cool du tout alors,???😕

heu hervé une tout petite question...toute petite

quand tu écris:
PHP:
If bon = True Then
    bon = False
    Exit Sub

voilà je sais que cela a une utilité mais je ne sais pas laquelle..


merci à tout les deux pour votre aide...
 
Re : deux conditions

re

la fusion des cellules peut parfois poser des problèmes en vba, le code ne sachant pas sur qu'elle cellule de la fusion il doit pointer.

pour le boolean.


comme tu le sais une evenementielle change se déclenche des qu'une cellule est modifiée, ton code testait la valeur de l'activecell, puis modifiait celle-ci relancant ainsi l'évenementielle.
Code:
Select Case UCase(Target)
Case "M"
Target = "M"

tu as essayé de contourner ce souci à grand coup de on error et de enableevents

ceci peut etre dangereux à court terme.

il suffit d'utiliser un boolean de test (c'est JMPS qui me l'a appris) qui va autoriser l'evénementielle à se lancer : true=on peut pas, false= on peut

le plus simple pour comprendre ce type de mécanisme, est de mettre un point d'arret en début de macro, de changer une valeur en ligne 9, et de suivre le code en pas à pas.

voilà, en espérant avoir été clair 🙁

salut
 
Re : deux conditions

😱 😱
bonjour le forum

je reprends ce fil car je me heurte à un probleme concernant le code que j'ai pu créer précedement..le code marchait parfaitement mais il ne correspondait plus à ce que les personnes qui s'en servent au jour le jour en attendaient..

en effet pour reprendre, grace à petite olive( bonjour!!🙂 ) et hervé (bonjour🙂 ) mon code me permetait de calculer la somme des heures facturées et flashées (il faut voir le fichier joint pour comprendre)
pour cela deux conditions étaient nécessaires, d'une part la couleur de la cellule cible puis le contenu de la cellule cible( un X majuscule)

or désormais j'aimerai que mon code fasse la somme des cellules de même couleur ( je précise que je me sers de vba plutot que d'une formule car le nombre de mes colonnes est variable)

donc j'ai modifié mon code et cela done ça :
PHP:
Option Explicit
Dim bon As Boolean
        
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Coul_1 As Long
Dim Coul_2 As Long
Dim Coul_3 As Long
Dim Coul_4 As Long
Dim Coul_5 As Long
Dim ligne As Range
Dim totalM As Double
Dim totalO As Double
Dim totalI As Double
Dim couleur As Long
Dim c As Range
Dim dercolonne As Integer
Dim derligne As Integer
Dim plage As Range
Dim colonnerenvoi As Integer

If bon = True Then
    bon = False
    Exit Sub
    
Else
    If Target.Row = 9 Then
        bon = True
        Target = UCase(Target(1))
        Select Case Target(1)
            Case "M"
                Coul_1 = 37     'titre
                Coul_2 = 5      ' G
                Coul_3 = 33     ' D
                Coul_4 = 37     ' colG
                Coul_5 = 34     'col D
            Case "O"
                Coul_1 = 4     'titre
                Coul_2 = 50      ' G
                Coul_3 = 35     ' D
                Coul_4 = 35     ' colG
                Coul_5 = 4     'col D
            Case "I"
                Coul_1 = 3     'titre
                Coul_2 = 3      ' G
                Coul_3 = 38     ' D
                Coul_4 = 38     ' colG
                Coul_5 = 3     'col D
            Case Else
                Coul_1 = -4142     'titre
                Coul_2 = -4142      ' G
                Coul_3 = -4142     ' D
                Coul_4 = -4142     ' colG
                Coul_5 = -4142     'col D
        End Select
        'Titre
        Cells(Target.Row - 3, Target.Column).Interior.ColorIndex = Coul_1
        Cells(Target.Row + 1, Target.Column).Interior.ColorIndex = Coul_2
        Cells(Target.Row + 1, Target.Column + 2).Interior.ColorIndex = Coul_3
        Range(Cells(11, Target.Column).Address & ":" & _
              Cells(62, Target.Column).Address).Interior.ColorIndex = Coul_4
        Range(Cells(11, Target.Column + 2).Address & ":" & _
              Cells(62, Target.Column + 2).Address).Interior.ColorIndex = Coul_5
    
        If Coul_5 = -4142 Then MsgBox ("Remise à blanc!")
    End If
End If

dercolonne = Range("iv10").End(xlToLeft).Column
derligne = Range("a65536").End(xlUp).Row
colonnerenvoi = Range("iv6").End(xlToLeft).Column
Set plage = Range("c11", Cells(derligne, dercolonne))
'MsgBox plage.Address
If Not Intersect(Target, plage) Is Nothing Then
    Set ligne = Range(Cells(Target.Row, "C"), Cells(Target.Row, dercolonne))
    For Each c In ligne
        couleur = c.Interior.ColorIndex
        If couleur = 37 Or couleur = 35 Or couleur = 38 Then
                Select Case Cells(9, c.Column)
                    Case "M": totalM = totalM + c
                    Case "I": totalI = totalI + c
                    Case "O": totalO = totalO + c
                End Select
        End If
    Next c
    Cells(Target.Row, colonnerenvoi - 2) = totalM
    Cells(Target.Row, colonnerenvoi - 1) = totalI
    Cells(Target.Row, colonnerenvoi) = totalO
End If
End Sub
mais alors que je pensais avoir réussi.... ben....non

j'ai un message d'erreur: erreur d'excécution '13' incompatibilité de type

voilou
 

Pièces jointes

Dernière modification par un modérateur:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
227
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…