Famille de feuilles de calcul Microsoft avec des outils pour l’analyse, le graphique et la communication des données.
Tu définis ce nom à au moins 3 endroits. Fais une rechercche sur Names.Add
Ce navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
Bonjour,
J'ai un classeur avec 4 feuilles. Sur la feuille 1, j'ai une BD. Dans cette feuille 1, j'ai une macro (qui n'utilise que les valeurs de la feuille 1 et ne fait des changements que sur la feuille 1) qui va sélectionner des enregistrements et me créer une liste qui me servira pour les 3 autres feuilles. À chaque changement sur la feuille 1 je peux lancer une macro en Private Sub Worksheet_Change, mais la macro va se lancer très souvent et elle dure plus de 2 secondes.
Ce que je voudrais, c'est que, lorsque je quitte la feuille 1, la macro se lance (l'équivalent de BeforeClose du classeur). Si je la lance à l'activation d'une nouvelle feuille la macro va revenir sur feuille 1 pour faire le traitement et donc je ne m'en sors plus.
J'espère avoir été assez clair,
Richard
Famille de feuilles de calcul Microsoft avec des outils pour l’analyse, le graphique et la communication des données.
Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.
Réponse acceptée par l’auteur de la question
Tu définis ce nom à au moins 3 endroits. Fais une rechercche sur Names.Add
Réponse acceptée par l’auteur de la question
Compris. Remplace la ligne :
.SetRange .Range("BA1:BJ" & NbActu)
par :
.SetRange Sheets("Adh").Range("BA1:BJ" & NbActu)
Daniel
Voici la macro rectifiée (à tester).
Sub listImg() ' feuille Adh
' If ActiveSheet.Name <> "Adh" Then Exit Sub
Application.ScreenUpdating = False
ActiveSheet.Unprotect Password:="ricH"
Application.EnableEvents = False
With Sheets("Then")
.Columns("BA:BJ").Delete Shift:=xlToLeft
NbTot = .Range("AH6") - 1
.Range("A1:J" & NbTot).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range( _
"AA29:AA30"), CopyToRange:=.Range("BA1"), Unique:=False
.Columns("BA:BJ").EntireColumn.AutoFit
NbActu = Application.WorksheetFunction.CountA(.Range("BB:BB"))
.Range("AZ1") = NbActu
.Sort.SortFields.Clear
.Sort.SortFields.Add2 Key:=.Range("BB2:BB" & NbActu) \_
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SortFields.Add2 Key:=.Range("BC2:BC" & NbActu) \_
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Sort
.SetRange .Range("BA1:BJ" & NbActu)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
nbAdh = .Range("AZ1")
End With
ActiveWorkbook.Names.Add Name:="adher", RefersToR1C1:="=Adh!R2C53:R" & nbAdh & "C61"
Application.EnableEvents = True
ActiveWindow.LargeScroll ToRight:=-100
End Sub
Elle se lance à la désactivation de la feuille BDD. Dans le module de cette feuille :
Private Sub Worksheet_Deactivate()
listImg
End Sub
Daniel
La macro suppose que la feuille Adh soit sélectiionnée, voici le code :
Sub listImg() ' feuille Adh
If ActiveSheet.Name <> "Adh" Then Exit Sub
Application.ScreenUpdating = False
ActiveSheet.Unprotect Password:="ricH"
Application.EnableEvents = False
Columns("BA:BJ").Select
Selection.Delete Shift:=xlToLeft
NbTot = Range("AH6") - 1
Range("A1:J" & NbTot).AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( \_
"AA29:AA30"), CopyToRange:=Range("BA1"), Unique:=False
Columns("BA:BJ").EntireColumn.AutoFit
NbActu = Application.WorksheetFunction.CountA(Range("BB:BB"))
Range("AZ1") = NbActu
ActiveWorkbook.Worksheets("Adh").sort.SortFields.Clear
ActiveWorkbook.Worksheets("Adh").sort.SortFields.Add2 Key:=Range("BB2:BB" & NbActu) \_
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Adh").sort.SortFields.Add2 Key:=Range("BC2:BC" & NbActu) \_
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Adh").sort
.SetRange Range("BA1:BJ" & NbActu)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
nbAdh = Worksheets("Adh").Range("AZ1")
ActiveWorkbook.Names.Add Name:="adher", RefersToR1C1:="=Adh!R2C53:R" & nbAdh & "C61"
Application.EnableEvents = True
ActiveWindow.LargeScroll ToRight:=-100
End Sub
Je filtre la BD à une autre place, je trie la BD filtrée et je crée une liste qui me servira pour les autres feuilles
Richard
Bonjour,
Tout dépend de ta macro. Si elle suppose que la première feuille est sélectionnée, alors oui, il faut modifier la macro. Le plus simple serait que tu postes le code de la macro.
Daniel