Macro ne fonctionne plus
Bonjour à toutes et tous,
Eh bien je n'en finis pas de découvrir les subtilités du VBA.....
V'là ti pas qu'une de mes macros fonctionnait super bien depuis plusieurs jours et aujourd'hui encore et que d'un seul coup sans crier gare et sans que je n'y ai apporté de modifications... patatra.... ca fonctionne plus !!
Lorsque je lance la macro, j'ai le message d'erreur suivant : "Membre de méthode ou de données introuvables", en jaune surligné : le sub Compilation() et en bleu .Copy de la ligne Selection.Copy
Je précise que j'ai plusieurs fichiers qui contiennent cette même macro ; que toutes fonctionnaient très bien jusqu'à l'heure du gouter d'aujourd'hui (je les ai toutes fait fonctionner dans la journée...).Et que plus aucune ne fonctionne.
Qu'est ce qui se passe ??
Option Explicit
'Déclaration des variables au niveau du Module
Dim i As Integer, j As Integer, k As Integer
Dim DerniereLigne As Integer
Dim LastRowConsolidation As Integer
Dim NbFeuil As Variant
Dim ws As Worksheet
Dim DerLigne As Long
'***************************************************
' Procédure permettant d'effacer les données de
' la compilation afin d'éviter les doublons
'***************************************************
Sub EffaceCompilation()
'On se positionne sur la feuille Compilation
Worksheets("Compil").Select
'On sélectionne la plage correspondante aux données à effacer
Rows("5:1000000").Select
'On efface le contenu et la mise en forme
Selection.Clear 'ou Selection.delete shift:=xlUp
'On se repositionne sur le premier enregistrement à copier
Range("A5").Select
End Sub
'****************************************************
' Procédure permettant de réaliser une compilation sur autre feuille.
'****************************************************
Sub Compilation()
'Désactiver le raffraichissement de l'écran scintillement
Application.ScreenUpdating = False
'Appeller la procédure permettant d'effacer les données
EffaceCompilation
'Créer une boucle permettant de lire toutes les feuilles à compiler
NbFeuil = Sheets("Compil").Index - 1
For j = 1 To NbFeuil 'Parcourir les feuilles
'Sélectionner la première feuille
Sheets(j).Select
'Se positionner sur la dernière ligne non vide
DerniereLigne = Range("A1000000").End(xlUp).Row
'Parcourir tout le tableau à partir de la ligne pour copier chacune ligne
For i = 1 To DerniereLigne
'Sélectionner la première feuille
Sheets(j).Select
'Sélectionner la première ligne
Rows(i).Select
'Copier la ligne
Selection.Copy
'Où, sur la feuille Compil, il faut donc la sélectionner
Sheets("Compil").Select
'Il faut trouver la dernière ligne non vide de la feuille Compil
LastRowConsolidation = Range("A1000000").End(xlUp).Row + 1
'Sélectionner la cellule vide et la première colonne
Cells(LastRowConsolidation, 1).Select
'Une fois positionné, ColleR les données
ActiveSheet.Paste
Application.CutCopyMode = False
Next i
Next j
'On réactive le raffraichissement de l'écran scintillement
Application.ScreenUpdating = True
'On affiche un message qui prévient que la consolidation est terminée
MsgBox "La compilation est terminée...", vbOKOnly + vbInformation, "Message"
End Sub
Bonjour,
Tu as récemment changé de version excel en passant à 365 ?
Ou bien tu as changé de PC ?
Ou bien ta redevance à 365 est périmée ?
Bonsoir Steelson,
non rien de tout cela.
Nous avons depuis quelques jours un message d'erreur avec excel "mémoire insuffisante", plusieurs collègues sont concernés également mais rien d'autre.
Salut Kalagan,
Salut Steelson,
Quelques réflexions tirées de ma très petite expérience des entrailles d'Excel
- "Membre de méthode ou de données introuvables" est une erreur souvent rencontrée lors du chargement d'un fichier externe signalant une référence non chargée.
"Solution" qui a toujours fonctionné jusqu'à présent : entrer dans le code, puis menu 'Outils'-'Références...'.
Si, dans la liste qui s'affiche, la mention "Manquant" apparaît, DÉcocher cette option, fermer et relancer.
- "Mémoire insuffisante" est une erreur que je rencontre lorsqu'une boucle tourne à l'infini.
Sans chercher l'embrouille, ton code, si ta Compilation comporte un grand nombre de lignes à copier, pourrait provoquer ce phénomène dont je n'explique pas l'origine autrement.
Il nous faudrait notre regretté MFerrand pour expliquer ce brol!
J'ai réécrit ta macro à ma sauce.
- tu n'as jamais besoin de SELECT pour copier des valeurs : la copie se fait directement d'une feuille à l'autre : il suffit juste de spécifier le nom de cette feuille, histoire qu'Excel ne se prenne pas les bits dans le tapis ;
- cette macro est à coller telle quelle dans le module VBA de la feuille 'Compil' ;
- la macro démarre sur un double-clic dans cette même feuille 'Compil' ;
- n'ayant pas de précisions sur ces données, j'ai écrit par défaut Resize(iRowA, 10) pour le nombre de colonnes. Tu corriges (3 emplacements) en fonction de tes données.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim iRow&, iRowA&
'
Cancel = True
Application.ScreenUpdating = False
'
Range("A5").Resize(Range("A" & Rows.Count).End(xlUp).Row, 10).Delete shift:=xlUp 'effacement 'Compil' actuelle
'
For x = 1 To Sheets.Count
If Sheets(x).Name <> "Compil" Then
iRowA = Sheets(x).Range("A" & Rows.Count).End(xlUp).Row 'colonne A d'une feuille à compiler
iRow = IIf([A5] = "", 5, Range("A" & Rows.Count).End(xlUp).Row + 1) 'ligne d'enregistrement en 'Compil'
Range("A" & iRow).Resize(iRowA, 10).Value = Sheets(x).Range("A1").Resize(iRowA, 10).Value
End If
Next
'
Application.ScreenUpdating = True
MsgBox "La compilation est terminée...", vbOKOnly + vbInformation, "Compilation" 'message de fin de compilation
'
End Sub
A tester, évidemment, le code ayant été écrit en aveugle!
A+
Bonjour Curulis 57,
Merci beaucoup pour ton aide, mais je t'avoue que je ne m'en sors pas.
Comment faut il déclarer la variable x ?
Merci
Oup's !!
Dim x as variant..
Re,
Bon.. ca a fonctionné une seule fois... depuis.. plus rien ne se passe...
Quelqu'un pour m'aider davantage ?
Merci
J'ai réussi à m'en sortir !
Merci encore
Salut Kalagan,
peux-tu expliquer ce que tu as fait pour régler le problème, ce qui provoquait le bug?
Cela pourrait intéresser d'autres qui rencontrent le même souci!
A+