Adresse cellule modifiée

Bonjour,

je n'arrive pas à mettre le classeur joint car trop volumineux

objectif comparaison de cellule ou de sélection entre feuille 1 et 2 ou 3 et 4.

1- pour chaque cellule modifiée (count=1) je lance sub verifcellbycell dans workbook sheetchange

Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)

a = 1

b = 2

c = 3

e = 4

If Target.Count = 1 Then

If mdp1 = True And Sheets(a).ProtectContents = False _

And Sheets(b).ProtectContents = False And Sheets(c).ProtectContents = False _

And Sheets(e).ProtectContents = False Then

verificationcellbycell

End If

End If

If Target.Count > 1 Then

If mdp1 = True And Sheets(a).ProtectContents = False _

And Sheets(b).ProtectContents = False And Sheets(c).ProtectContents = False _

And Sheets(e).ProtectContents = False Then

verificationselectionbyselection

End If

End If

End Sub

Puis dans verifcellbycell

Sub verificationcellbycell()

a = 1

b = 2

c = 3

e = 4

If ActiveSheet.Index = a Then

Set d = Sheets(b)

ElseIf ActiveSheet.Index = b Then

Set d = Sheets(a)

End If

If ActiveSheet.Index = c Then

Set d = Sheets(e)

ElseIf ActiveSheet.Index = e Then

Set d = Sheets(c)

End If

If ActiveSheet.Index = a Or ActiveSheet.Index = b Then

If d.Cells(ligne, colonne).Value = "" Or Cells(ligne, colonne).Value = "" Then

d.Cells(ligne, colonne).Interior.ColorIndex = xlNone

Cells(ligne, colonne).Interior.ColorIndex = xlNone

Exit Sub

End If

End If

If ActiveSheet.Index = a Or ActiveSheet.Index = b Then

If d.Cells(ligne, colonne).Value = Cells(ligne, colonne).Value Then

Cells(ligne, colonne).Interior.ColorIndex = 4

Else

Cells(ligne, colonne).Interior.ColorIndex = 3

End If

End If

If ActiveSheet.Index = c Or ActiveSheet.Index = e Then

If d.Cells(ligne, colonne).Value = "" Or Cells(ligne, colonne).Value = "" Then

d.Cells(ligne, colonne).Interior.ColorIndex = xlNone

Cells(ligne, colonne).Interior.ColorIndex = xlNone

Exit Sub

End If

End If

If ActiveSheet.Index = c Or ActiveSheet.Index = e Then

If Cells(ligne, colonne).Value = d.Cells(ligne, colonne).Value Then

Cells(ligne, colonne).Interior.ColorIndex = 4

Else

Cells(ligne, colonne).Interior.ColorIndex = 3

End If

End If

End Sub

par ex : si je suis dans la feuille 1, je souhaiterais comparer la valeur de la cellule modifiée de la feuille 1 à la même dans la feuille 2 et changer la couleur suivant les tests

mais je n'arrive pas à récupérer l'adresse de la cellule modifiée dans le sub verifcellbycell ! (je n'arrive pas à récupérer dans les variables ligne et colonne la valeur de la ligne et colonne de la cellule modifiée)

2- mon fichier est super long à l'ouverture et fermeture car assez volumineux (5,5Mo). Pourtant 5 macros pas compliquées. Mais j'ai des sub qui affiche ou masque des lignes et colonnes. cela peut provenir de cela ?

ex : affichage colonne

Sub affichagecolonne()

a = 1

b = 2

Sheets(a).Range("BG:BN").EntireColumn.Hidden = False

Sheets(b).Range("BG:BN").EntireColumn.Hidden = False

Sheets(a).Select

Range("C5").Select

End Sub

Merci pour votre aide,

merci

jasserin

edit Dan : enlevé Urgent du titre du sujet. Merci de lire les règles du forum

Bonjour

Ce que je ferais pour ton 1er problème

Macro dans ThisWorkbook

Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)

  If mdp1 = True And Sheets(1).ProtectContents = False _
            And Sheets(2).ProtectContents = False And Sheets(3).ProtectContents = False _
            And Sheets(4).ProtectContents = False Then
    If Target.Count = 1 Then
      verificationcellbycell Target
    Else
      verificationselectionbyselection
    End If
  End If
End Sub

Macro dans un module standard

Sub verificationcellbycell(Cellule As Range)
Dim Ws As Worksheet

  Select Case ActiveSheet.Index
    Case 1
      Set Ws = Sheets(2)
    Case 2
      Set Ws = Sheets(1)
    Case 3
      Set Ws = Sheets(4)
    Case 4
      Set Ws = Sheets(3)
  End Select

  If Cellule = "" Or Ws.Range(Cellule.Address) = "" Then
    Cellule.Interior.ColorIndex = xlNone
    Ws.Range(Cellule.Address).Interior.ColorIndex = xlNone
  ElseIf Cellule = Ws.Range(Cellule.Address) Then
    Cellule.Interior.ColorIndex = 4
  Else
    Cellule.Interior.ColorIndex = 3
  End If
End Sub

Pour ton 2ème problème voir

https://forum.excel-pratique.com/applications/degraissez-le-mammouth-t4627.html

Bonjour,

Merci beaucoup banzai !

Pb résolu !

à bientôt

jasserin

Bonjour banzai64,

Juste une question dans l'appel de la macro verifcationcellbycell, il y a le mot target en suivant, peux tu m'expliquer pourquoi ?

merci beaucoup,

jasserin

Bonjour

Le moyen le plus simple de transmettre quelle cellule vient d'être modifiée

On pourrait utiliser une variable globale mais inutile dans ce cas

rebonjour banzai64,

autant battre le fer.... je conserve donc le mot target mais je ne pige pas...peux tu m'expliquer un peu plus ce que cet argument implique ? ou alors une doc sur ce type d'écriture pour l'appel d'une macro avec un argument associé ?

si je comprends bien, l'argument de workbook sheetchange (sh as object, byval as target) renvoie la feuille du changement dans sh et la cellule modifiée dans target. le fait de mettre dans l'appel de la macro verifcationcellbycell le mot target transmet l'adresse de ma cellule à la macro ? si c'est cela, je comprends pourquoi on m'a indiqué dernièrement de ne pas mettre de variable public car pour moi c'était le seul moyen (que je voyais) pour transmettre la valeur d'une variable de this workbook dans une macro.

Si tu peux confirmer ou corriger mon raisonnement..

parce que j'ai également une autre macro pour comparer des sélection. c'est à dire si dans la feuille 2 par exemple, je colle plusieurs cellules d'un même coup, je souhaiterais comparer la sélection collée dans la feuille 2 aux cellules de la même sélection dans la feuille 1. En fait, j’inscris dans la variable "u" l'adresse de la sélection collée dans la feuille 2 et je vais comparer chaque cellule de cette sélection avec celle de la feuille 1. cela bug à If Cellule = "" Or Ws.Range(Cellule.Address) = "" Then

message incompatibilité de type ???

Sub verificationselectionbyselection( cellule As Range)

u = Selection.Address

a = 1

b = 2

c = 3

e = 4

Select Case ActiveSheet.Index

Case a

Set Ws = Sheets(b)

Case b

Set Ws = Sheets(a)

Case c

Set Ws = Sheets(e)

Case e

Set Ws = Sheets(c)

End Select

For Each cell In Range(u)

If Cellule = "" Or Ws.Range(Cellule.Address) = "" Then

Cellule.Interior.ColorIndex = xlNone

Ws.Range(Cellule.Address).Interior.ColorIndex = xlNone

ElseIf Cellule = Ws.Range(Cellule.Address) Then

Cellule.Interior.ColorIndex = 4

Else

Cellule.Interior.ColorIndex = 3

End If

Next cell

End Sub

encore merci pour ton aide,

et désolé au grand manitou pour le mot urgent, j'avais pas lu..

merci

jassserin

Bonjour

jasserin a écrit :

si je comprends bien, l'argument de workbook sheetchange (sh as object, byval as target) renvoie la feuille du changement dans sh et la cellule modifiée dans target.

Exact : Mais Target peut représenter LES cellules modifiées

Macro à placer dans ThisWorkbook

Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)

  If mdp1 = True And Sheets(1).ProtectContents = False _
            And Sheets(2).ProtectContents = False And Sheets(3).ProtectContents = False _
            And Sheets(4).ProtectContents = False Then
    verificationcellbycell Target
  End If
End Sub

Macro à placer dans un module standard

Option Explicit

Sub verificationcellbycell(Cellule As Range)
Dim Ws As Worksheet
Dim Cel As Range

  If Cellule.Count > 1 Then
    For Each Cel In Cellule
      verificationcellbycell Cel
    Next Cel
    Exit Sub
  End If

  Select Case ActiveSheet.Index
    Case 1
      Set Ws = Sheets(2)
    Case 2
      Set Ws = Sheets(1)
    Case 3
      Set Ws = Sheets(4)
    Case 4
      Set Ws = Sheets(3)
  End Select

  If Cellule = "" Or Ws.Range(Cellule.Address) = "" Then
    Cellule.Interior.ColorIndex = xlNone
    Ws.Range(Cellule.Address).Interior.ColorIndex = xlNone
  ElseIf Cellule = Ws.Range(Cellule.Address) Then
    Cellule.Interior.ColorIndex = 4
  Else
    Cellule.Interior.ColorIndex = 3
  End If
End Sub

Comme cela tout les cas seront traités

super !

merci beaucoup pour la leçon. je prends note !

encore merci pour les explications

bonne fin de journée

Rechercher des sujets similaires à "adresse modifiee"