Je demande votre aide, le problème est que si je rajoute un nouveau nom (en dessous des autres, voir exemple en rouge) dans l’onglet salarié(e) et que je clic sur le bouton trier pas de problème là-dessus. Mais dans les 2 autres onglets le nouveau nom rentré prend la MFC du nom en place et du coup me décale toutes mes MFC des autres noms. Je n’ai pas pensé à ça quand j’ai conçu le tableau et je ne sais pas comment m’y prendre. C’est par les colonnes I, O, V et W que les MFC s’appliquent. En quelques mots je veux que quand je rentre un nouveau nom et mit en ordre alphabétique qu’il ne soit sans MFC. Bien entendu normalement toutes les feuilles son protégées. Merci pour votre aide
Cela dit le fonctionnement normal des tableaux structurés se fait sans lignes vides.
Dans le fichier joint j'ai donc supprimé les lignes vides et revu la macro :
VB:
Sub Ttier()
Dim i&, x$, n&
[Tableau5].Parent.Protect "toto", UserInterfaceOnly:=True 'mot de passe à adapter
With [Tableau1]
.Sort .Columns(1), xlAscending, .Columns(2), , xlAscending, Header:=xlYes 'tri sur colonne A
For i = 1 To .Rows.Count
If .Cells(i, 1) <> "" Then
x = .Cells(i, 1) & " " & .Cells(i, 2) '3 espaces
If Application.CountIf([Tableau5].Columns(1), x) = 0 Then
n = [Tableau5].Rows.Count - ([Tableau5].Cells(1) <> "")
[Tableau5].Cells(n, 1) = x
End If
End If
Next
End With
[Tableau5].Sort [Tableau5].Cells(1), xlAscending...
Bonjour Clamatt,
En dehors du problème de MFC, un truc me chiffonne dans votre fichier.
En page "VISITE MEDICALE & MUTUELLE " la colonne A est indexée sur la feuille Salariées avec des formules du genre "='SALARIÉS(E)'!D3" . Par contre toutes les autres colonnes sont "en dur" et ne font l'objet d'aucune formule.
Donc si la liste de Salariée change alors la liste NomPrénom change mais pas les autres colonnes.
Comment assurez vous la cohérence des données entre le Nom et les autres données de la ligne ?
Bonjour Clamatt,
En dehors du problème de MFC, un truc me chiffonne dans votre fichier.
En page "VISITE MEDICALE & MUTUELLE " la colonne A est indexée sur la feuille Salariées avec des formules du genre "='SALARIÉS(E)'!D3" . Par contre toutes les autres colonnes sont "en dur" et ne font l'objet d'aucune formule.
Donc si la liste de Salariée change alors la liste NomPrénom change mais pas les autres colonnes.
Comment assurez vous la cohérence des données entre le Nom et les autres données de la ligne ?
Bonjour sylvanu,
merci de vous pencher son mon cas et oui, ça fait parti aussi du problème, il y a dans l'onglet " VISITE MEDICALE & MUTUELLE" les colonnes H- M- P - Y(masquée) avec des formules. le but est de n'avoir aucune MFC quand je rentre un nouveau nom (après ce nom sera mis en forme)
Je pense m'être mal exprimé. Votre fichier tel qu'il ne peut pas marcher.
Le moindre tri de la feuille Salariés vous fera perdre toute cohérences dans la feuille Visite.
En d'autres termes si vous touchez à la feuille Salariés ( or ajout ), comme un tri, une suppression de ligne ... votre feuille Visite devient totalement fausse.
C'est à mon avis le premier point à résoudre.
Par ex, avant tri :
Après tri :
Vous voyez bien que toutes les données sont fausses.
Il ne faut pas de formules de liaison en colonne A de la feuille "VISITE MEDICALE & MUTUELLE ".
Il suffit d'utiliser cette macro :
VB:
Sub Ttier()
Dim P As Range, i&, x$
Set P = [Tableau5]
P.Parent.Protect "toto", UserInterfaceOnly:=True 'mot de passe à adapter
With [Tableau1]
.Sort .Columns(1), xlAscending, .Columns(2), , xlAscending, Header:=xlYes 'tri sur colonne A
For i = 1 To .Rows.Count
If .Cells(i, 1) <> "" Then
x = .Cells(i, 1) & " " & .Cells(i, 2) '3 espaces
If Application.CountIf(P.Columns(1), x) = 0 Then P.Columns(1).Find("", , xlValues) = x 'entrée dans la 1ère cellule vide
End If
Next
End With
P.Sort P(1), xlAscending, Header:=xlYes 'tri sur colonne A
P.Parent.Activate 'facultatif
End Sub
Nota 1 : la feuille "VISITE MEDICALE & MUTUELLE " est protégée comme demandé.
Nota 2 : la colonne D de la feuille "SALARIÉS(E)" était inutile, je l'ai supprimée.
Nota 3 : en colonne B de la feuille "TABLEAU de BORD" format personnalisé mmm-aa;; pour masquer les valeurs zéro.
Il ne faut pas de formules de liaison en colonne A de la feuille "VISITE MEDICALE & MUTUELLE ".
Il suffit d'utiliser cette macro :
VB:
Sub Ttier()
Dim P As Range, i&, x$
Set P = [Tableau5]
P.Parent.Protect "toto", UserInterfaceOnly:=True 'mot de passe à adapter
With [Tableau1]
.Sort .Columns(1), xlAscending, .Columns(2), , xlAscending, Header:=xlYes 'tri sur colonne A
For i = 1 To .Rows.Count
If .Cells(i, 1) <> "" Then
x = .Cells(i, 1) & " " & .Cells(i, 2) '3 espaces
If Application.CountIf(P.Columns(1), x) = 0 Then P.Columns(1).Find("", , xlValues) = x 'entrée dans la 1ère cellule vide
End If
Next
End With
P.Sort P(1), xlAscending, Header:=xlYes 'tri sur colonne A
P.Parent.Activate 'facultatif
End Sub
Nota 1 : la feuille "VISITE MEDICALE & MUTUELLE " est protégée comme demandé.
Nota 2 : la colonne D de la feuille "SALARIÉS(E)" était inutile, je l'ai supprimée.
Nota 3 : en colonne B de la feuille "TABLEAU de BORD" format personnalisé mmm-aa;; pour masquer les valeurs zéro.
Cela dit le fonctionnement normal des tableaux structurés se fait sans lignes vides.
Dans le fichier joint j'ai donc supprimé les lignes vides et revu la macro :
VB:
Sub Ttier()
Dim i&, x$, n&
[Tableau5].Parent.Protect "toto", UserInterfaceOnly:=True 'mot de passe à adapter
With [Tableau1]
.Sort .Columns(1), xlAscending, .Columns(2), , xlAscending, Header:=xlYes 'tri sur colonne A
For i = 1 To .Rows.Count
If .Cells(i, 1) <> "" Then
x = .Cells(i, 1) & " " & .Cells(i, 2) '3 espaces
If Application.CountIf([Tableau5].Columns(1), x) = 0 Then
n = [Tableau5].Rows.Count - ([Tableau5].Cells(1) <> "")
[Tableau5].Cells(n, 1) = x
End If
End If
Next
End With
[Tableau5].Sort [Tableau5].Cells(1), xlAscending, Header:=xlYes 'tri sur colonne A
[Tableau5].Parent.Activate 'facultatif
End Sub
Tableau5 s'agrandit au fur et à mesure que des noms sont ajoutés.
Cela dit le fonctionnement normal des tableaux structurés se fait sans lignes vides.
Dans le fichier joint j'ai donc supprimé les lignes vides et revu la macro :
VB:
Sub Ttier()
Dim i&, x$, n&
[Tableau5].Parent.Protect "toto", UserInterfaceOnly:=True 'mot de passe à adapter
With [Tableau1]
.Sort .Columns(1), xlAscending, .Columns(2), , xlAscending, Header:=xlYes 'tri sur colonne A
For i = 1 To .Rows.Count
If .Cells(i, 1) <> "" Then
x = .Cells(i, 1) & " " & .Cells(i, 2) '3 espaces
If Application.CountIf([Tableau5].Columns(1), x) = 0 Then
n = [Tableau5].Rows.Count - ([Tableau5].Cells(1) <> "")
[Tableau5].Cells(n, 1) = x
End If
End If
Next
End With
[Tableau5].Sort [Tableau5].Cells(1), xlAscending, Header:=xlYes 'tri sur colonne A
[Tableau5].Parent.Activate 'facultatif
End Sub
Tableau5 s'agrandit au fur et à mesure que des noms sont ajoutés.