Un sub qui me crée une MFC et qui perturbe ma MFC existante
Bonsoir,
Un sub qui me créé une formule dans MFC et qui perturbe ma MFC en rose car elle me met un $D3 alors que je dois remettre à chaque fois un $AB3...
La preuve, c'est que lorsque je supprime cette MFC en jaune et dès que je clique sur le bouton "Importer Liste des...", elle se recréée
Voici le code VBA de ce sub dans le module 7 :
Sub Importer_5_Ateliers()
'option 1 = tout le monde
Importer_Noms_Prenoms Range("Tabel8").ListObject 'lancer cette macro avec ce TS comme variable
End Sub
Sub Importer_Noms_Prenoms(LO_Dest As ListObject, Optional sSexe As String)
Dim bEE As Boolean, i
Application.ScreenUpdating = False
With LO_Dest 'TS destination
.Parent.Unprotect "seb" 'enlever protection de sa feuille
On Error Resume Next
.Parent.AutoFilter.Range.AutoFilter 'enlever flter éventuellement
On Error GoTo 0
If .ListRows.Count > 0 Then 'TS n'est pas vide, alors demander pour le vider
Beep
If vbYes = MsgBox("ce TS n'est pas vide" & vbLf & "Vider encore ?" & vbLf & vbLf & "Attention, OUI = Vider", vbYesNo, UCase(.Name)) Then
.DataBodyRange.Delete 'vider
End If
End If
End With
With Range("tabel1").ListObject 'TS source
.Parent.Unprotect "seb" 'enlever protection de sa feuille
On Error Resume Next
.Parent.AutoFilter.Range.AutoFilter 'enlever filtre eventuel
On Error GoTo 0
.Range.AutoFilter 2, "<>" 'filtrer les noms "non-vides"
If Len(sSexe) Then .Range.AutoFilter 4, sSexe 'filtrer le sexe
bEE = Application.EnableEvents 'drapeau pour savoir l'état de "EnableEvents" à ce moment (VRAI ou FAUX)
If bEE Then Application.EnableEvents = False 'si le drapeau est VRAI, alors temporairement mettre les events en FAUX
i = .ListColumns("Nom").Range.SpecialCells(xlVisible).Count 'nombre de cellules visibles de la colonne Nom, entête inclu
If i > 1 Then 'plus qu'une cellule, entête inclu, donc il y a des femmes avec nom "non-vide" à copier
.ListColumns("Nom").DataBodyRange.Resize(, 3).SpecialCells(xlVisible).Copy LO_Dest.ListRows.Add.Range 'copier 3 colonnes (nom,prenom,sexe) de ces femmes
With LO_Dest 'TS destination
.Range.RemoveDuplicates Array(1, 2, 3), Header:=xlYes 'supprimer les doublons
With .Range
.Sort .Range("A1"), xlAscending, .Range("B1"), , xlAscending, Header:=xlYes 'trier nom&prenom
End With
End With
End If
If bEE Then Application.EnableEvents = True 'si le drapeau est VRAI, alors temporairement remettre les events dans l'état original (=TRUE)
LO_Dest.Parent.Protect "seb" 'réinstaller protection dans la feuille de la destination
.Range.AutoFilter 'enlever filtre dans le source
.Parent.Protect "seb" 'réinstaller protection dans la feuille du source
End With
End SubEt je n'ai pas besoin du message ci-dessous car je veux importer dans n'importe quelles conditions, même si des noms sont déjà présents :
If vbYes = MsgBox("ce TS n'est pas vide" & vbLf & "Vider encore ?" & vbLf & vbLf & "Attention, OUI = Vider", vbYesNo, UCase(.Name)) Merci à vous
Bonne soirée
Sur le bouton "Débloquer ou Quitter", tapez vodoraix pour tt débloquer.
Et mot de passe pour débloquer les feuilles ==> seb
Bonjour Vodoraix, salut JExceL2Fr,
@JEexcL2Fr, je suis content que tu confirmes ce que j'avais déjà constaté et dont j'avais déjà donné la solution
https://forum.excel-pratique.com/excel/en-vba-ne-selectionner-dans-un-tableau-que-les-lignes-avec-un... samedi à 9:07. Si tu fais ces choses là, les MFCs "fantômes" seront supprimées. Ce n'est pas VBA qui les crée !
Bonsoir Bart' & JExceL2fr... merci beaucoup à vous 2
JExceL2fr, ce que tu me dis de faire n'avait pas été suffisant puisque j'ai écrit dans le sujet que j'ai modifié et supprimé et ça revient quand même !
Si tu m'écris ça, c'est que tu t'es basé sur tes connaissances théoriques et sans tester les pbs que je dénonce...
___________________________________
Bart', évidemment, j'avais suivi tes 4 points avant de poster ce nouveau sujet. C'était la moindre des choses, par respect pour ton travail et tes précieux conseils :
- Sélectionnes les lignes entières de 4-200(ou plus jusqu'à 1.048.000+) et puis dans le ruban, pour les MFCs, tu supprimes toutes les MFCs de la plage sélectionnée.
- maintenant tous ces doublons sont disparus et il y a encore 8 MFCs, je suppose, si "PDF" est encore là, que celle avec "PDF" est inutile et tu la supprimes aussi.
- ce qui me surprenait c'est qu'il y a encore des lignes vertes dans cette feuille et ce n'étaient pas les MFCs qui étaient la cause, donc tu supprime aussi toutes les surlignements à partir de la ligne 3 (maintenant) à 200 (ou plus), pour que ce sont que les MFCs qui font les différences.
- puis pour chaque TS, indépendent, tu sélectionne sa première ligne, copie (CTRL+C) et tu colles "spécial" les "formats" vers le reste du TS
Et croyez le ou pas, pour la feuille "5 ateliers", j'ai fait à plusieurs reprises ces 4 manips et rien ne change !!!
J'ai toujours la même chose : je ne suis pas fou quand même ! ou peut-être si ==> Car y'a qu'un fou qui ne dirait pas qu'il est fou !!! lolllllllllllllllllllllllllllllllll
En même temps un vrai fou ne dirait pas non plus, "je suis fou !"
Merci quand même à vous 2...
Bonne soirée
dans le gestionnaire des MFCs pour le 2ième tableau oubien pour toute la feuille (choisir dans le menu déroulant en haut, voir capture d'écran de @JExceL2Fr, que je salue, de hier), il y a encore cette MFC, supprimez-la dans cette liste. Elle n'était pas effective dans le premier tableau, donc elle n'était pas dans sa liste.
Bonjour Bart' et merci
Comme je l'avais écrit dans le sujet, il ne s'agit que des MFC de Tabel8 (2ème tableau)
Oui, JExceL2Fr avait fait une capture pour les MFC des 2 tableaux or sur le 1er tableau, tout va bien. Et oui, j'ai supprimé au moins 10 fois cette MFC en passant par tes 4 points que tu m'avais conseillé de faire mais ça n'y fait rien, j'ai tjrs la même chose quand je clique sur le bouton "Importer..." ==>
En fait je viens de relire toutes mes réponses et j'avais déjà tout indiqué
Bonne soirée
Merci
donc, tu l'as supprimé, elle n'est plus dans la liste de la feuille entière, mais un moment plus tard (t'as fait quoi exactement) elle est là de nouveau ...
vui Bart', c'est ce que j'ai expliqué dans le message d'hier, 20h04...
Le moment plus tard, comme tu écris, c'est quand je clique sur le bouton "Importer..." ==> les mauvaises MFC reviennent....
Excel est plein de surprises, ces MFCs viennent du tableau "tabel1" et sont supprimées par une nouvelle ligne ".DataBodyRange.FormatConditions.Delete 'supprimer les MFCs qui viennent du TS source"
Bonjour Bart' et merci beaucoup pour ta persévérance légendaire
Les MFC ne sont plus perturbées, impeccable !
Mais je ne peux plus en créer d'autres car lorsque je clique sur le bouton, celles du Tabel8 que je recrée, sont systématiquement entièrement effacées
Merci à toi
Bonne journée
si tu réponds "non" au msgbox, les anciens noms ne sont pas supprimés, mais puis on ajoute des nouveaux noms en dessous + on supprime les doublons. Je suppose qu'ici, ce sont 2 fois les mêmes noms, donc vous pensez que vous voyez que les nouveaux, non, ce sont les anciens que vous voyez là, les nouveaux "doublons" sont supprimés. Un essai, supprimez/modifiez le contenu de la colonne "sexe" (=AB) de ces personnes, puis lancez la macro, répondez "non" et vous verrez 2 fois vos noms mais avec des sexes différents.
J'ai tout compris, tes explications mais ça n'est pas vraiment ça mon souci. Je te présente le problème d'une autre façon, étape par étape :
- J'ai besoin d'effacer toutes les données car un autre événement à une nouvelle date commence, et j'ai d'autres sportifs qui n'ont plus rien à voir avec les noms précédents.
- Je fais donc un RAZ des 2 tableaux en cliquant sur le bouton :
Mon tableau n°1 "TBL_5Ateliers" conserve bien toutes ses MFC !!!
Mon tableau "Tabel8" conserve également, pour le moment, toujours ses MFC !
Mais lorsque je clique sur le bouton "Importer..." ==> mon tableau "Tabel8" ne contient plus du tout mes MFC, elles ont disparu (voir 2ème capture ci-dessous) !
Merci Bart'...... à +
Et pour aller dans le sens de tes explications précédentes, j'aimerais aussi pour plusieurs motifs, que lorsque je clique dans le"msbox" ==> oui ==> que mes MFC soient également conservées et pas supprimées. C'est possible ?
re,
une nouvelle macro paramétrée "Sub Importer_Noms_Prenoms(Source As Range, LO_Dest As ListObject, Optional sSexe As String)" avec 3 paramètres, le premier est nouveau !
- la source : la plage ou une partie d'un tableau structuré (avec entête!) avec ces 3 colonnes : nom, prénom, sexe
- la destination : le tableau structuré
- optionel le sexe, donc "F", "H" ou rien
re,
j'avais modifié la macro "Sub M_Proteger(b As Boolean)" un peu, de manière qu'il ne faut plus toujours faire ce "unprotect" et "protect".
Donc je pense quand tu changes aussi cette macro, que tes modifications ne seront plus nécessaires
sh.Protect Password:=MdP, Contents:=True, AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
c-à-d ?
je change complètement la macro ?
Sub M_Proteger(b As Boolean) 'b=VRAI=feuilles protégées et events activés, b=FAUX=feuilles non-protégées et events désactivés
Dim sh
For Each sh In ThisWorkbook.Worksheets
If StrComp(sh.Name, "STATS", 1) <> 0 Then
If b Then 'VRAI=protèger
sh.Protect Password:=MdP, Contents:=True, AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
Else 'FAUX=non-protégé
sh.Unprotect Password:=MdP
End If
End If
Next
Application.EnableEvents = b 'simultané les events
End SubEn faisant ça ?
Sub M_Proteger(b As Boolean) 'b=VRAI=feuilles protégées et events activés, b=FAUX=feuilles non-protégées et events désactivés
Dim sh
For Each sh In ThisWorkbook.Worksheets
sh.Protect Password:=MdP, Contents:=True, AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
End Subou alors je ne dois modifier, que la ligne 6 ?
Et ça va corriger aussi le message en surbrillance jaune sur ma feuille ?
Depuis un certaine temps et plusieurs modifs, je ne peux plus faire de double clique dans le nom de famille du tableau "Tabel8", pour qu'il aille dans le Tableau n°1.
On dirait qu'une action a été modifiée...
Merci...
Bonne soirée
re,
c'est compliqué avec la protection
Bon, dans "Thisworkbook", t'as bloqué le lancement de "proteger" in "Workbook_Open". Cela permet de changer la protection de chaque feuille en
sh.Protect Password:=MdP, Contents:=True, AllowInsertingRows:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, userinterfaceonly:=True
Dans cette ligne, c'est surtout le "userinterfaceonly:=True" qui est important et qui donne la possibilité à VBA de changer des choses (MO ne permet pas tout, mais disons 90%) des choses sans changer en "unprotect". Cet "userinterfaceonly" n'est pas permanent, juste pour cette session, donc si tu fermes et réouvres, tu dois réactiver cela.
Comme cela n'était pas fait en ouvrant avec "workbook_open" et le passage par "proteger", VBA n'avait pas la permission de changer des choses sans enlever la protection et donc t'as vu ce bug 2 fois, je crois. Bon, je suppose que moi, j'avais passé par cette protection et dans mes essais, je n'ai pas eu ces bugs parce que tout le temps, mon fichier n'était pas fermé. Donc, dans thisworkbook et "workbook_open" je lance "proteger"
pffff, ce double-click n'est pas le mien ....
En tout cas merci beaucoup d'avoir voulu améliorer le code des importations.
On l'avait déjà avant, le userinterfaceonly:=True
Donc je remets le workbook_open dans son état normal et j'essaye de voir si tt va bien
Le double click, tu l'avais créé mais un autre l'avait modifié car j'avais qqes soucis sur certaines actions
________________________________________________________
Et abracadabra ==> Je n'ai plus aucune erreur sur aucune des 3 feuilles de pétanques.
________________________________________________________
Sauf que j'ai toujours une erreur pour un truc qui traîne depuis longtemps quand je fais un RAZ des tableaux sur les feuilles 9 ou 13 cibles, j'ai cette formule qui s'efface ==>
Alors que cette formule ne s’efface jamais sur la feuille "5 ateliers".
Je pense que ça vient de cette macro ci-dessous dans le module8, car elle n'est prévue que pour la feuille "5 ateliers" et je ne sais pas comment rajouter pour la "9 cibles" et la "13 cibles" ==>
Feuille "5 ateliers", c'est colonne 24 (le code VBA est ci-dessous)
Feuille "tir à 9 cibles", c'est colonne 14
Et feuille "tir à 13 cibles", c'est colonne 15
Sub Formule()
Application.ScreenUpdating = False
Set f1 = Sheets("Classmt par discipline+Général")
DerLig_f1 = f1.Range("A" & f1.Rows.Count).End(xlUp).Row
'enlever le mot de passe
f1.Unprotect Password:="seb"
Range("H5:H" & DerLig_f1).Formula2R1C1 = _
"=MAX(IF(('5 ateliers'!R3C1:R100C1=[@Nom])*('5 ateliers'!R3C2:R100C2=[@prenom])*('5 ateliers'!R3C3:R100C3=[@Sexe]),'5 ateliers'!R3C24:R100C24,""""))"
'Protéger la feuille
ActiveSheet.Protect Password:="seb", userinterfaceonly:=True
End SubMerci en tout cas pour ta patience
Bon dimanche
re,
les colonnes en trop, je les ai supprimé et j'ai ajouté 2 colonnes au lieu de cette colonne MFC, la première joint nom, prénom et sexe,la 2ième sert pour une MFC pour montrer les "inconnus" et les "plusieurs". Puis le double-click, c'est maintenant une macro paramétrée.
Vite fait, j'éspère que je n'ai pas oublié des choses, c'est dimanche soir ... .


