XL 2016 Inserer ligne dans une feuille et trier toutes les feuilles d'un classeur

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 !

jalucyne

XLDnaute Occasionnel
Bonjour aux membres du forum,
Comment dans un classeur :
1) insérer un nouveau nom dans chaque feuille à partir de la feuille liste de Noms?
2) Effectuer un tri Alphabétique dans Liste de noms ET trier toutes colonnes de toutes les autres feuilles du classeur?
Sans doute macro tris….
(Fichier joint noms fictifs)
 

Pièces jointes

Bonjour jalucyne,

Prenez votre temps et tâchez de comprendre ces 2 macros dans ThisWorkbook :
Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim P As Range
If Sh.ListObjects.Count Then Set P = Sh.ListObjects(1).Range _
    Else Set P = Sh.[A5].Resize(Sh.UsedRange.Rows.Count, Sh.Cells(5, Sh.Columns.Count).End(xlToLeft).Column)
If Intersect(Target, P.Resize(, 2)) Is Nothing Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
P.Sort P(1), xlAscending, Header:=xlYes 'tri alphabétique
On Error Resume Next 'si aucune SpecialCell
Intersect(P.Offset(2).Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow, P).Delete xlUp 'supprime les noms vides
If P(2, 1) = "" Then P.Rows(2).SpecialCells(xlCellTypeConstants).ClearContents 'traitement particulier de la 2ème ligne
On Error GoTo 0
P.RemoveDuplicates Array(1, 2), Header:=xlYes 'supprime les doublons
Application.EnableEvents = True 'réactive les évènements
With Sh.UsedRange: End With 'actualise la barre de défilement verticale
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim t, d As Object, i&, P As Range, derlig&, x$, s
'---liste des noms et prénoms (avec séparateur)---
With Sheets("Liste Noms")
    If Sh.Name = .Name Then Exit Sub
    If .ListObjects.Count Then t = .ListObjects(1).Range.Resize(, 2) _
        Else t = .[A5].Resize(.UsedRange.Rows.Count, 2) 'matrice, plus rapide
    Set d = CreateObject("Scripting.Dictionary")
    For i = 2 To UBound(t)
        If t(i, 1) <> "" Then d(t(i, 1) & Chr(1) & t(i, 2)) = ""
    Next
End With
'---traitement de la feuille activée---
If Sh.ListObjects.Count Then Set P = Sh.ListObjects(1).Range Else _
    Set P = Sh.[A5].Resize(Sh.UsedRange.Rows.Count, Sh.Cells(5, Sh.Columns.Count).End(xlToLeft).Column)
derlig = P.Rows.Count
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
For i = 2 To derlig
    x = P(i, 1) & Chr(1) & P(i, 2)
    If d.exists(x) Then d.Remove x Else P(i, 1) = ""
Next
If d.Count Then
    t = d.keys
    For i = 0 To UBound(t)
        s = Split(t(i), Chr(1))
        P(derlig + i + 1, 1) = s(0)
        If UBound(s) Then P(derlig + i + 1, 2) = s(1)
    Next
End If
'---mise à jour---
Workbook_SheetChange Sh, P 'lance la macro
End Sub
Fichier joint.

Remarques :

- il ne faut pas créer de liaisons entre la 1ère feuille et les autres pour les noms et prénoms

- pour les 3 dernières feuilles (Rdv) il faut du texte en AG5 pour que la colonne AG soit traitée.

A+
 

Pièces jointes

Dernière édition:
Bonjour jalucyne, le forum,

Je viens de modifier le code du fichier précédent, en particulier pour le traitement de la 2ème ligne.

Par ailleurs dans ce fichier (2) j'ai ajouté une MFC sur les colonnes A:AG des 3 dernières feuilles (Rdv).

En effet leurs tableaux ne sont pas organisés en tableau Excel, la MFC colore les lignes.

Bonne journée.
 

Pièces jointes

Dernière édition:
Re,

Je viens encore de modifier le code de mes fichiers (1) et (2) aux posts #2 et #4, utilisez le dernier code...

Pour ce qui est de ceci :
Oups…. Re bonjour Job75, dans le fichier initial il y a 3 feuilles d'explication des contenus: Notice, Liste Cptences, Maitr.Satisf.
Si je les insère cela bug….
Problème?
Amicalement
Jalucyne
c'est enfantin, insérez au début de chacune des 2 macros cette ligne de code :
Code:
If Sh.Name = "Notice" Or Sh.Name = "Liste Cptences" Or Sh.Name = "Maitr.Satisf." Then Exit Sub
A+
 
Re ,Désolé de te déranger Job75, en suivant ta proposition (Alt F11) j'arrive à cette page ….vide...
upload_2018-9-10_12-25-46.png
upload_2018-9-10_12-25-46.png
 
Re OUPS….
Visiblement il faut que je trouve une formation VBA....
Je suis plus à l'aise sans les Macros….
Bon j'ai trouvé la bonne page, il suffisait d'être plus attentif aux conseils de Job75.
Je lui présente mes excuses.
Mais maintenant suivant ses instructions:

Insérez au début de chacune des 2 macros cette ligne de code :
Code (Text):
If Sh.Name = "Notice" Or Sh.Name = "Liste Cptences" Or Sh.Name = "Maitr.Satisf." Then Exit Sub

Ok, j'ai testé au début de la page….mais création d'erreur, j'avoue ne pas trouver avant quelles phrases coller.
En espérant ne pas être trop insistant.
Cordialement
Jalucyne
PS: Incompétent ne me gène pas mais insistant me generait beaucoup vis à vis de vous tous
 
- 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

Discussions similaires

  • Question Question
XL 2021 listbox
Réponses
18
Affichages
285
Réponses
4
Affichages
106
Réponses
17
Affichages
471
Retour