XL 2010 Macro pour mettre en surbrillance (jaune) des doublons (RESOLU)

ymanot

XLDnaute Occasionnel
Bonjour à tous.
J'ai un document dans lequel je répartis des élèves à partir d'une feuille " TRI" dans différentes classes selon la saisie que j'effectue en colonne A.
A partir du code ci-dessous qui agit sur toute les feuilles nommée '3E"
j'aimerai insérer une macro mettant en surbrillance jaune, les doublons trouvés dans la comparaison entre les colonnes C et la plage (P:T) sans polluer la macro existante.

VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
With Sheets("tri 3E").[A1].CurrentRegion
    If Application.CountIf(.Columns(1), Sh.Name) = 0 Then Exit Sub
    Application.ScreenUpdating = False
    Sh.Cells.Delete 'RAZ
    .AutoFilter 1, Sh.Name 'filtre automatique
    .Copy Sh.[A1] 'copier-coller
    .AutoFilter
End With
Sh.Columns.AutoFit 'ajustement largeurs
End Sub

Ensuite dans ma feuille "récapitulatif" j'ai crée des macros automatiques via les boutons "recalcule" et " actualiser" qui permettent de recalculer l'ensemble des modifications. Car jusque là je n'ai pas réussi à automatiser les réajustements selon les variations opérées dans chacune des classes. Quelqu'un est il en mesure d'intégrer les calculs dans une macro en direct ?

vous en remerciant
Ymanot
 

Pièces jointes

  • repartitions classes pour excel download v1.xlsm
    129.1 KB · Affichages: 11
Solution
re,

pour le deuxième point, impossible de tester, références à des fichiers externes non fournis
voici vos deux macros modifiées, les select ne servent quasiment jamais à rien et empêchent l'adressage direct, ils sont à proscrire plus de 99% du temps.
VB:
Sub calculheterog()
'
' calculheterog Macro
'

'
    With Worksheets("récapitulatif")
        .Range("D3:D4").FormulaR1C1 = "=SUM('3e3'!R[-1]C[2]:R[26]C[2])"
        .Range("E3:E4").FormulaR1C1 = "=SUM('3e4'!R[-1]C[1]:R[26]C[1])"
        .Range("F3:F4").FormulaR1C1 = "=SUM('3e5'!R[-1]C:R[26]C)"
        .Range("G3:G4").FormulaR1C1 = "=SUM('3e6'!R[-1]C[-1]:R[26]C[-1])"
        .Range("H3:H4").FormulaR1C1 = "=SUM('3e7'!R[-1]C[-2]:R[26]C[-2])"
        .Range("I3:I4").FormulaR1C1 =...

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour ymanot, le forum

j'aimerai insérer une macro mettant en surbrillance jaune, les doublons trouvés dans la comparaison entre les colonnes C et la plage (P:T) sans polluer la macro existante.
encore faudrait t'il comprendre ce que vous désirez, dans votre fichier exemple, il n'y a que des A en colonne C et que des zéros en résultats de formule dans les colonnes P à T, merci de fournir un exemple fonctionnel pour le traitement ou de fournir des explications plus détaillées.
Ensuite dans ma feuille "récapitulatif" j'ai crée des macros automatiques via les boutons "recalcule" et " actualiser" qui permettent de recalculer l'ensemble des modifications. Car jusque là je n'ai pas réussi à automatiser les réajustements selon les variations opérées dans chacune des classes.
pour ce point, deux solutions :
1-reprendre en formules les calculs
2-puisque les macros fonctionnent, les déclencher lors d'un événement change dans une des feuilles concernées

Bien cordialement, @+
 

ymanot

XLDnaute Occasionnel
Bonjour Yeahou,

Les "A " c'etait pour anonymiser les noms de familles et oui comme j'ai aussi supprimé les noms dans les colonnes P à T, ma demande est devenue incohérente....damn).
Considerant "baba" en colonne C et "baba" dans une des colonnes de P à T il faudrait que cela soit en surbrillance jaune.

cdlt
ymanot
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re,

pour le deuxième point, impossible de tester, références à des fichiers externes non fournis
voici vos deux macros modifiées, les select ne servent quasiment jamais à rien et empêchent l'adressage direct, ils sont à proscrire plus de 99% du temps.
VB:
Sub calculheterog()
'
' calculheterog Macro
'

'
    With Worksheets("récapitulatif")
        .Range("D3:D4").FormulaR1C1 = "=SUM('3e3'!R[-1]C[2]:R[26]C[2])"
        .Range("E3:E4").FormulaR1C1 = "=SUM('3e4'!R[-1]C[1]:R[26]C[1])"
        .Range("F3:F4").FormulaR1C1 = "=SUM('3e5'!R[-1]C:R[26]C)"
        .Range("G3:G4").FormulaR1C1 = "=SUM('3e6'!R[-1]C[-1]:R[26]C[-1])"
        .Range("H3:H4").FormulaR1C1 = "=SUM('3e7'!R[-1]C[-2]:R[26]C[-2])"
        .Range("I3:I4").FormulaR1C1 = "=SUM('3e8'!R[-1]C[-2]:R[26]C[-3])"
        .Range("J3:J4").FormulaR1C1 = "=SUM('repartition 2018 2019'!R[-1]C[-5]:R[160]C[-5])/6"
    End With
End Sub

Sub CALCULSEX()
'
' CALCULSEX Macro
'

'
    With Worksheets("récapitulatif")
        .Range("D6").FormulaR1C1 = "=COUNTIF('3e3'!R[-4]C[1]:R[23]C[1],""M"")"
        .Range("D7").FormulaR1C1 = "=COUNTIF('3e3'!R[-5]C[1]:R[23]C[1],""F"")"
        .Range("E6").FormulaR1C1 = "=COUNTIF('3e4'!R[-4]C:R[23]C,""M"")"
        .Range("E7").FormulaR1C1 = "=COUNTIF('3e4'!R[-5]C:R[23]C,""F"")"
        .Range("F6").FormulaR1C1 = "=COUNTIF('3e5'!R[-4]C[-1]:R[23]C[-1],""M"")"
        .Range("F7").FormulaR1C1 = "=COUNTIF('3e5'!R[-5]C[-1]:R[23]C[-1],""F"")"
        .Range("G6").FormulaR1C1 = "=COUNTIF('3e6'!R[-4]C[-2]:R[23]C[-2],""M"")"
        .Range("G7").FormulaR1C1 = "=COUNTIF('3e6'!R[-5]C[-2]:R[23]C[-2],""F"")"
        .Range("H6").FormulaR1C1 = "=COUNTIF('3e7'!R[-4]C[-3]:R[23]C[-3],""M"")"
        .Range("H7").FormulaR1C1 = "=COUNTIF('3e7'!R[-5]C[-3]:R[23]C[-3],""F"")"
        .Range("I6").FormulaR1C1 = "=COUNTIF('3e8'!R[-4]C[-3]:R[23]C[-4],""M"")"
        .Range("I7").FormulaR1C1 = "=COUNTIF('3e8'!R[-5]C[-3]:R[23]C[-4],""F"")"
    End With
End Sub

ensuite placez cette macro dans thisworkbook, avec la macro Private Sub Workbook_SheetActivate(ByVal Sh As Object) , cela déclenchera les macros à chaque changement dans une des feuilles de 3e. vos macros modifiées agiront sans qu'il y ait besoin de sélectionner la feuille auparavant
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Left(Sh.Name, 1) = "3" Then
    Call calculheterog
    Call CALCULSEX
End If
End Sub

pour le premier point, faites simplement une MFC, pas besoin de macro

Bien cordialement, @+
 

ymanot

XLDnaute Occasionnel
Bonjour,
j 'ai bien placé la macro comme suit

VB:
Option Explicit

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
With Sheets("tri 3E").[A1].CurrentRegion
    If Application.CountIf(.Columns(1), Sh.Name) = 0 Then Exit Sub
    Application.ScreenUpdating = False
    Sh.Cells.Delete 'RAZ
    .AutoFilter 1, Sh.Name 'filtre automatique
    .Copy Sh.[A1] 'copier-coller
    .AutoFilter
End With
Sh.Columns.AutoFit 'ajustement largeurs
End Sub
Sub calculheterog()
'
' calculheterog Macro
'

'
    With Worksheets("récapitulatif")
        .Range("D3:D4").FormulaR1C1 = "=SUM('3e3'!R[-1]C[2]:R[26]C[2])"
        .Range("E3:E4").FormulaR1C1 = "=SUM('3e4'!R[-1]C[1]:R[26]C[1])"
        .Range("F3:F4").FormulaR1C1 = "=SUM('3e5'!R[-1]C:R[26]C)"
        .Range("G3:G4").FormulaR1C1 = "=SUM('3e6'!R[-1]C[-1]:R[26]C[-1])"
        .Range("H3:H4").FormulaR1C1 = "=SUM('3e7'!R[-1]C[-2]:R[26]C[-2])"
        .Range("I3:I4").FormulaR1C1 = "=SUM('3e8'!R[-1]C[-2]:R[26]C[-3])"
        .Range("J3:J4").FormulaR1C1 = "=SUM('repartition 2018 2019'!R[-1]C[-4]:R[160]C[-5])/7"
        .Range("J3:J4").FormulaR1C1 = "=SUM('repartition 2018 2019'!R[-1]C[-5]:R[160]C[-5])/6"
    End With
End Sub

Sub CALCULSEX()
'
' CALCULSEX Macro
'

'
    With Worksheets("récapitulatif")
        .Range("D6").FormulaR1C1 = "=COUNTIF('3e3'!R[-4]C[1]:R[23]C[1],""M"")"
        .Range("D7").FormulaR1C1 = "=COUNTIF('3e3'!R[-5]C[1]:R[23]C[1],""F"")"
        .Range("E6").FormulaR1C1 = "=COUNTIF('3e4'!R[-4]C:R[23]C,""M"")"
        .Range("E7").FormulaR1C1 = "=COUNTIF('3e4'!R[-5]C:R[23]C,""F"")"
        .Range("F6").FormulaR1C1 = "=COUNTIF('3e5'!R[-4]C[-1]:R[23]C[-1],""M"")"
        .Range("F7").FormulaR1C1 = "=COUNTIF('3e5'!R[-5]C[-1]:R[23]C[-1],""F"")"
        .Range("G6").FormulaR1C1 = "=COUNTIF('3e6'!R[-4]C[-2]:R[23]C[-2],""M"")"
        .Range("G7").FormulaR1C1 = "=COUNTIF('3e6'!R[-5]C[-2]:R[23]C[-2],""F"")"
        .Range("H6").FormulaR1C1 = "=COUNTIF('3e7'!R[-4]C[-3]:R[23]C[-3],""M"")"
        .Range("H7").FormulaR1C1 = "=COUNTIF('3e7'!R[-5]C[-3]:R[23]C[-3],""F"")"
        .Range("I6").FormulaR1C1 = "=COUNTIF('3e8'!R[-4]C[-3]:R[23]C[-4],""M"")"
        .Range("I7").FormulaR1C1 = "=COUNTIF('3e8'!R[-5]C[-3]:R[23]C[-4],""F"")"
    End With
End Sub

Mais les calculs ne se lancent pas automatiquement
 

Discussions similaires

Statistiques des forums

Discussions
314 635
Messages
2 111 450
Membres
111 144
dernier inscrit
shura_77