Microsoft 365 Macros bloquées (non actives) ???

ManuXZ

XLDnaute Junior
Bonjour,

(Env W10)

J'ai recopié depuis mon DD en local un fichier excel (crée l'an dernier sous office versions maj régulièrement) sur un nouveau fichier excel
(même emplacement, même environnement) )
mais lorsque j'ouvre ce dernier il m'affiche à l'ouverture un msg du genre:
" .macros désactivées.. / ...paramètres de sécurité...?.." donc impossible d'exécuter les macros ???!!!

je suis allé voir dans fichier/option/centre de confidentialité/paramètres macros/...
et "désactiver toutes les macros avec notification" est bien coché.
j'ai même essayé de cocher le : "Activer toutes les macros (non recommandé)" mais même problème !!!

J'ai cherché sur le Net et j'ai vu cette info:
".... c'est dû à la marque web du fichier " il faut faire (clic-D sur le fichier ss l'explorer)
et aller ds Propriétes/Onglet général/,
(ds Sécurité) et cocher la case "Débloquer"
mais mon pb c'est que je n'ai pas du tout cette case ...???
Quelle solution alors pour débloquer ce fichier (et ce pb suite à une simple recopie du fichier ) ???
Merci bcp pour votre aide. :))
 

Staple1600

XLDnaute Barbatruc
Re

Tu n'as que cela comme VBA dans ton classeur
Code:
Sub ListInscrits()
'
' ListInscrits Macro
'
' Touche de raccourci du clavier: Ctrl+t
'''

    Sheets("Filtre").Select
    Range("Base_adh_2022").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "A1:V7"), CopyToRange:=Range("A10:aa10"), Unique:=False
    ActiveWorkbook.Worksheets("Filtre").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Filtre").Sort.SortFields.Add Key:=Range("C11"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Filtre").Sort
        .SetRange Range("A10:aa252")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Sheets("ResulTri").Select
End Sub
Sub recherche_un_critere()
'
' recherche_un_critere Macro
' Recherche selon un ou plusieurs critères de la ligne 2
'
' Touche de raccourci du clavier: Ctrl+r
'
    Range("Base_adh_2022").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "A1:x2"), CopyToRange:=Range("A8:K8"), Unique:=False
End Sub

C'est donc d'autant plus facile de le récréer

Mais à partir d'un classeur vierge et en copiant les données en valeurs seules
Ensuite, tu réinsères les formules utilisées manuellement
 

ManuXZ

XLDnaute Junior
Re

Tu n'as que cela comme VBA dans ton classeur
Code:
Sub ListInscrits()
'
' ListInscrits Macro
'
' Touche de raccourci du clavier: Ctrl+t
'''

    Sheets("Filtre").Select
    Range("Base_adh_2022").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "A1:V7"), CopyToRange:=Range("A10:aa10"), Unique:=False
    ActiveWorkbook.Worksheets("Filtre").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Filtre").Sort.SortFields.Add Key:=Range("C11"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Filtre").Sort
        .SetRange Range("A10:aa252")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Sheets("ResulTri").Select
End Sub
Sub recherche_un_critere()
'
' recherche_un_critere Macro
' Recherche selon un ou plusieurs critères de la ligne 2
'
' Touche de raccourci du clavier: Ctrl+r
'
    Range("Base_adh_2022").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "A1:x2"), CopyToRange:=Range("A8:K8"), Unique:=False
End Sub

C'est donc d'autant plus facile de le récréer

Mais à partir d'un classeur vierge et en copiant les données en valeurs seules
Ensuite, tu réinsères les formules utilisées manuellement

Donc si je comprends bien, je crée une nouvelle enveloppe vierge(classeur) mais peux-tu me détailler la procédure pour récupérer tous les onglets en bas de mon classeur (il y en a pas mal) et
copier les données en valeurs seules ?
 

Staple1600

XLDnaute Barbatruc
Re,

@ManuXZ
Donc à partir d'un classeur vierge (avec une seule feuille)
La macro ci-dessous crééra tes onglets avec les noms de ton fichier exemple
Code:
Sub CREER_FEUILLES()
Dim NOM_F, i%
NOM_F = _
    Array("Découvertes", "Rallye", "Sortie", "Liste activités", "Lst  Adh 2022", _
    "ResulTri", "NbInscrits", "Filtre", "Lst  Adh 2021", "Lst  Adh 2020", _
    "Lst  Adh 2019", "Lst  Adh 2018", "Recherche", "NI", "Lst  Adh 2017", _
    "List adh 2016", "LST adh 2015", "NA 2016")
    For i = LBound(NOM_F) To UBound(NOM_F)
    Sheets.Add(After:=Sheets(Sheets.Count)).Name = NOM_F(i)
    Next
End Sub
NB: J'ai supprimé les espaces surnuméraires dans le nom des feuilles

Une fois les feuilles créées, si j'étais moi, je ferai un copié/collé manuel (en valeurs seules)
du contenu des feuilles du classeur source vers le nouveau classeur vierge

(On pourrait le faire en macro, mais c'est pour être sur d'avoir un nouveau classeur tout propre)
 

Staple1600

XLDnaute Barbatruc
Re

La piste est pourtant simple
Tu dis qu'un seul et unique classeur refuse d'exécuter les macros

Mais que sur tous les autres, les macros fonctionnent.

Donc la solution est: On reconstruit le fichier à partir d'un classeur vide
(d'autant plus que le code VBA présent dans ton classeur est vraiment réduit)
Seulement deux procédures
 

Staple1600

XLDnaute Barbatruc
Re

@ManuXZ Z
Ci-dessous la liste des noms de ton classeur, qu'il faudra recréer
On voit qu'un nom pointe sur G..gle Drive
Ne serait-ce pas là, la source du problème ?
Il se passe quoi si tu supprimes ce nom (sur une copie de ton classeur)
quand tu ouvres cette copie ?
Toujours le message d'erreur ?
ACTIVITES='Liste activités'!$B$3:$F$37
Bacti='Lst Adh 2022'!$Q$3:$V$288
Base_adh_2021='Lst Adh 2021'!$A$2:$AA$270
Base_adh_2022='Lst Adh 2022'!$A$3:$AA$301
Base_email='E:\Google Drive Patrice\AVF\Adhérents\[Liste des cinq groupes adhérents.xlsx]Tout Travail'!$A$2:$F$250
code_activ='Liste activités'!$B$3:$C$30
List_nom='Lst Adh 2022'!$C$4:$C$308
LST_adh2022='Lst Adh 2022'!$AA$4:$AA$288
nom_2021='Lst Adh 2021'!$C$2:$C$271
nom_2022='Lst Adh 2022'!$C$3:$C$302
 

Staple1600

XLDnaute Barbatruc
Re

@ManuXZ
je ne peux tester grand chose, vu que tes feuilles sont vides ;)
(je parle de tes codes VBA)

Néanmoins, j'ai enregistrer sous -> type: *.xlsb

J'ai ajouté cette macro de test dans un module
Code:
Sub test()
MsgBox Application.UserName
End Sub

Et aucun souci, la macro s'exécute.
 

Staple1600

XLDnaute Barbatruc
Re

@ManuXZ
Si je devais reconstruire un classeur, je m'aiderais aussi d'une macro de ce type
1) j'enregistre une copie du fichier "problématique" au format *.xlsx
2) A partir de mon classeur vierge, je lance la macro ci-dessous
Code:
Sub Exporter_Feuilles_EN_CSV()
Dim S_WBK As Workbook, WSH As Worksheet, CSV_WB As Workbook
    Set S_WBK = Workbooks.Open("C:\Users\STAPLE\Documents\fichier_TEST.xlsx")
'ici adapter le chemin vers la copie du fichier du point 1)
    sPath = S_WBK.Path & "\"
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    For Each WSH In S_WBK.Worksheets
        WSH.Copy
        Set CSV_WB = ActiveWorkbook
        CSV_WB.SaveAs Filename:=sPath & WSH.Name & ".csv", FileFormat:=xlCSV, CreateBackup:=False, Local:=True
        CSV_WB.Close SaveChanges:=False
    Next WSH
S_WBK.Close SaveChanges:=False
End Sub
j'obtiens alors autant de fichiers CSV qu'il y a de feuilles dans la copie *.xlsx du classeur.

Ensuite, j'ouvre chaque CSV et je copie les données dans les feuilles correspondantes du classeur auquel j'ai ajouté les feuilles avec la macro du message#21
(CTRL+A puis CTRL+C puis CTRL+SHIFT+V (sur O 365 permet directement le collage en valeurs seules)

On peut aussi cogiter une macro pour importer les fichiers *.CSV dans les feuilles correspondantes
(en comparant le nom des onglets et le nom des fichiers CSV)
 

Staple1600

XLDnaute Barbatruc
Re

@ManuXZ
Pour suivre mon idée
(j'ai adapté un code qui dormait dans archives)

Donc ici, on importe les fichiers CSV (en sélectionnant) directement dans un nouveau classeur
(sans avoir à se préoccuper du nom des feuilles)
Code:
Sub Importation_CSV()
Dim S_WBK As Workbook, WSH As Worksheet, N_WSH As Worksheet, CSV_WB As Workbook
Dim f_CSV As Variant, vArr As Variant, a, j&
Application.ScreenUpdating = False
'Sélection multiple des CSV
f_CSV = Application.GetOpenFilename(filefilter:="FICHIER CSV (*.csv*), *.csv*", MultiSelect:=True)
If IsEmpty(f_CSV) Then Exit Sub
'Boucle sur la selection de CSV
For j = LBound(f_CSV) To UBound(f_CSV)
nomFIC = f_CSV(j)
a = Split(nomFIC, "\")
nomCSV = a(UBound(a))
nomCSV = Replace(nomCSV, ".csv", "") 'suppression extension
'ouverture fichier CSV
Set CSV_WB = Workbooks.Open(nomFIC, Format:=2, Local:=True)
Set WSH = CSV_WB.Worksheets(1)
vArr = WSH.UsedRange 'données mises dans un Array
CSV_WB.Close (0) 'fermeture CSV
Set N_WSH = Sheets.Add(after:=Sheets(Sheets.Count)) 'ajout d'une feuille
ActiveSheet.Name = nomCSV 'nommage de la feuille
N_WSH.Cells(1).Resize(UBound(vArr, 1), UBound(vArr, 2)) = vArr
' "recopie" des données du CSV dans la nouvelle feuille
Next
End Sub
Test OK avec mes fichiers de test
(Un classeur avec 5 onglets)

Si on résume mon mode opératoire
1) On fait une copie du fichier "corrompu" en l'enregistrant au format *.xlsx
A partir d'un classeur vierge
2) On exporte ses feuilles grâce à la macro : Exporter_Feuilles_EN_CSV
3) On importe dans la foulée les fichiers CSV obtenus en 2)
4) On remets le code VBA (par copier/coller)
5) On enregistre ce nouveau classeur au format *.xlsm ou *.xlsb

Ensuite, il restera à remettre les formules et recréer les plages nommées.

Ce sera déjà un gain de temps par rapport au fait de devoir tout refaire manuellement.

Normalement, les macros sur ce nouveau classeur devraient fonctionner.

Si tel n'est pas le cas, c'est qu'il nous manque des informations si les conditions réelles de l'utilisation d'Excel et de ton classeur.
 

Discussions similaires

Statistiques des forums

Discussions
315 088
Messages
2 116 089
Membres
112 658
dernier inscrit
doro 76