XL 2016 [résolu] Détecter modification de cellules

arnaud06

XLDnaute Nouveau
Bonjour.

j'ai un fichier Excel avec environ une vingtaine d'onglets et j'ai environ une cinquantaine de macro en VBA (sans parler des UserForm)

Voilà pour la base.

Dans mon onglet principal (celui qui contient les données - 17.000 lignes et environ 300 colonnes), je me suis rendu compte qu'une de mes macros supprime des colonnes....

Au début, j'avais environ 250 colonnes et au fur et à mesure, j'ai du en rajouter d'autres. Le hic, c'est que je n'arrive pas à trouver la macro qui supprime (à tort) des colonnes.

L'idéal serait d'écrire une macro qui détecte, dans un onglet bien précis si l'une des cellules des colonnes "JB" à JI" fait l'objet d'une modification (que ce soit un effacement des données par suppression d'une colonne ou par suppression des données d'une plage définie ou autre).

Auriez vous une idée ?

Merci d'avance
 

Oneida

XLDnaute Impliqué
Re,
Vos colonnes disparaissent a la fin ou n'importe ou?

la modification d'une cellule ?
Une cellule est modifiee soit par du code soit par une formule.

mes macros supprime des colonnes
faites vous des raz de cellules dans vos codes
 

arnaud06

XLDnaute Nouveau
Bonjour

j'ai enfin trouvé la macro qui me pose problème.

j'ai trouvé.... mais je ne sais pas pourquoi !

C'est une macro que j'avais récupéré (elle permet de réduire la taille des fichiers Excel). Elle fonctionne très bien, sauf que, pour une raison que j'ignore, elle supprime les colonnes au delà de 255. C'est à dire que dans mon onglets, elle ne garde que les 255 premières colonnes

voici la macro en question.

l'anomalie se passe dans la partie "Suppression des colonnes inutilisées".

quelqu'un sait comment corriger çà ? merci d'avance



Dim Sht As Worksheet, DCell As Range, Calc As Long, Rien As String, Avant As Double, plage As Range
On Error Resume Next
Calc = Application.Calculation ' ---- mémorisation de l'état de recalcul
'------------------------------------------------------------
MsgBox "Pour le classeur actif : " _
& Chr(10) & ActiveWorkbook.FullName _
& Chr(10) & "dans chaque feuille de calcul" _
& Chr(10) & "recherche la zone contenant des données," _
& Chr(10) & "réinitialise la dernière cellule utilisée" _
& Chr(10) & "et optimise la taille du fichier Excel", _
vbInformation, _
""
'-------------------------------------------------------------
MsgBox "Taille initiale de ce classeur en octets" _
& Chr(10) & FileLen(ActiveWorkbook.FullName), _
vbInformation, ActiveWorkbook.FullName
'------------------------------------------------------------
With Application
.Calculation = xlCalculationManual
.StatusBar = "Nettoyage en cours..."
.EnableCancelKey = xlErrorHandler
.ScreenUpdating = True
End With
'-------------------- le traitement
For Each Sht In Worksheets
Avant = Sht.UsedRange.Cells.Count
Application.StatusBar = Sht.Name & "-" & Sht.UsedRange.Address
'-------------------Traitement de la zone trouvée
If Sht.UsedRange.Address <> "$A$1" Or Not IsEmpty(Sht.[a1]) Then
Set DCell = Sht.Cells.Find("*", , , , xlByRows, xlPrevious)(2)
'----------------Suppression des lignes inutilisées
If Not DCell Is Nothing Then
Sht.Range(DCell, Sht.Cells([A:A].Count, 1)).EntireRow.Delete
Set DCell = Nothing
Set DCell = Sht.Cells.Find("*", , , , xlByColumns, xlPrevious)(, 2)
'----------------Suppression des colonnes inutilisées
If Not DCell Is Nothing Then Sht.Range(DCell, Sht.[IV1]).EntireColumn.Delete
End If
Rien = Sht.UsedRange.Address
End If
ActiveWorkbook.Save
'---------------------Message pour la feuille traitée
MsgBox "Nom de la feuille de calcul :" _
& Chr(10) & Sht.Name _
& Chr(10) & Format(Sht.UsedRange.Cells.Count / Avant, "0.00%") & " de la taille initiale", _
vbInformation, ActiveWorkbook.FullName
Next Sht
'--------------------Message fin de tratement
MsgBox "Taille optimisée de ce classeur en octets " & Chr(10) & FileLen(ActiveWorkbook.FullName), _
vbInformation, _
ActiveWorkbook.FullNameActive
'--------------------
Application.StatusBar = False
Application.Calculation = Calc
 

Deadpool_CC

XLDnaute Accro
Bonjour,
je ne suis pas certain que ce type de macro fasse réellement gagner en taille de fichier sur les format .xlsx ou .xlsm (format Zippé avec une arborescence de fichier xml à l'intérieur ou les données concernant les cellules non utilisées sont ridiculement petites)
à moins que tu utilises les vieux format excel :eek:

Sinon pour une piste, commence par identifier la dernière colonne utilisée pour supprimer les suivantes.

Et pour plus de lisibilité du code merci d'utiliser les balises de Code = bouton "</>" à droite du GIF, et de mettre un code indenté (meilleur vision des boucles, ...
 

Discussions similaires

Statistiques des forums

Discussions
312 204
Messages
2 086 198
Membres
103 154
dernier inscrit
jefferson6488