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

image

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 Sub

Et 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,

Ce n'est pas la sub qui créée cette MFC c'est qu'elle existe déjà dans votre feuille

image

Il suffit de la modifier ou supprimer !

Bonne journée

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..." ==>

image

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 ?

image image

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

Bonjour Bart' et merci beaucoup

J'ai 2 erreurs de blocage de la feuille quand je clique sur le bouton "importer..." :

image

J'ai rajouté 2 unprotect et j'ai encore une erreur sur la ligne surlignée quand je réponds "oui" ou "non" aussi, à la msgbox ==>

image

Merci...

Bonne journée

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 Sub

En 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 Sub

ou alors je ne dois modifier, que la ligne 6 ?

Et ça va corriger aussi le message en surbrillance jaune sur ma feuille ?

image

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 ==>

image

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 Sub

Merci 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 ... .

Rechercher des sujets similaires à "sub qui cree mfc perturbe existante"