Macro qui ne fonctionne plus lorsque je change de PC
Bonjour,
J'ai créé une macro qui me permets de copier des données du fichier excel "INSCRIPTIONS" depuis la feuille " LISTE" vers le classeur " COURSES JEUNES " feuille "INSCRIPTION " . Elle fonctionne parfaitement , mais si j'utilise un autre PC, j'ai le message d'erreur : " Erreur d'exécution '9' : L'indice n'appartient pas à la sélection .
Ci dessous ma macro et ci joint le fichier excel "INSCRIPTIONS" et le classeur "COURSES JEUNES "
Merci d'avance pour votre aide.
Sub TELECHARGERDONNEES()
'
' TELECHARGERDONNEES Macro
'Détermine le chemin
Const Cible = &H10 'Desktop
Dim objShell As Object
Dim objFolder As Object, objFolderItem As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(Cible)
Set objFolderItem = objFolder.Self
Chemin = objFolderItem.Path
'Enregistre le fichier
Fichier = "COURSES JEUNES"
ActiveWorkbook.SaveAs Filename:=Chemin & "\" & Fichier & ".xlsm"
Windows("INSCRIPTIONS .xlsx").Activate
Sheets("LISTE").Select
Range("A2:M2058").Select
Selection.Copy
Windows("COURSES JEUNES.xlsm").Activate
Range("B3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B2:N2").Select
Application.CutCopyMode = False
Selection.AutoFilter
ActiveWindow.ScrollColumn = 1
Range("E2").Select
ActiveWorkbook.Worksheets("INSCRIPTION").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("INSCRIPTION").AutoFilter.Sort.SortFields.Add Key:= _
Range("E2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("INSCRIPTION").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Selection.AutoFilter
' TRIETS Macro
'
Columns("O:Q").Select
Selection.EntireColumn.Hidden = False
Range("I3:I2500").Select
Selection.Copy
Range("P3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Range("$P$2:$P$2500").RemoveDuplicates Columns:=1, Header:= _
xlYes
Range("P2").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("INSCRIPTION").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("INSCRIPTION").AutoFilter.Sort.SortFields.Add Key:= _
Range("P2:P19"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("INSCRIPTION").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Columns("P:P").Select
Selection.EntireColumn.Hidden = True
Selection.AutoFilter
End Subedit modération : code mis entre balises code via bouton </> merci d'y penser à l'avenir
Bonjour,
Peut-être en enlevant l'espace dans le nom de ce classeur :
Windows("INSCRIPTIONS .xlsx").ActivateVérifiez aussi que la feuille INSCRIPTION existe bien dans le classeur.
Il faudrait nous dire sur quelle ligne cela bloque.
Bonjour Jean Paul, j'ai déja essayé de supprimer l'espace et la feuille INSCRIPTION existe bien.
Lorsque je fait débogage, ci dessous la ligne soulignée et en gras qui apparait en surlignage jaune dans la macro lors du débogage.
Sub TELECHARGERDONNEES()
'
' TELECHARGERDONNEES Macro
'Détermine le chemin
Const Cible = &H10 'Desktop
Dim objShell As Object
Dim objFolder As Object, objFolderItem As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(Cible)
Set objFolderItem = objFolder.Self
Chemin = objFolderItem.Path
'Enregistre le fichier
Fichier = "COURSES JEUNES"
ActiveWorkbook.SaveAs Filename:=Chemin & "\" & Fichier & ".xlsm"
Windows("INSCRIPTIONS .xlsx").Activate
Sheets("LISTE").Select
Range("A2:M2058").Select
Bonjour,
Peut-être ceci: Le nom du classeur est "inscriptions" écrit en minuscules, alors que dans la macro, c'est: "Windows("INSCRIPTIONS .xlsx").Activate" en majuscules.
Pour palier cela, mettez tout en haut du module et avant la macro "Option compare text"
Cdlt
Bonjour,
Il faut bien vérifier les noms de fenêtres...
Quelques conseils qui vous éviterons de foncer dans le mur :
- Utiliser des fonctions au lieux de répéter un code exemple pour récupérer le chemin du bureau (mettre ce code dans un module nommé Functions)
Option Explicit
Private Const Desktop As Integer = &H10
Private Const Documents As Integer = &H5
Private Const Favoris As Integer = &H6
Private Const History As Integer = &H22
Private Const Music As Integer = &HD
Private Const Pictures As Integer = &H27
Private Const Videos As Integer = &HE
Private Const Programs As Integer = &H2
Private Const Startup As Integer = &H7
'@Description "Récupère le chemin du bureau."
Public Function getDesktopPath(Optional DirectoryConst As Variant = &H10) As String
Dim objShell As Object
Dim objFolder As Object, objFolderItem As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(DirectoryConst)
Set objFolderItem = objFolder.Self
Dim Chemin As String
Chemin = objFolderItem.Path
getDesktopPath = Chemin
End Function
'@Description "Ajoute un backSlash à la fin du chemin si nécessaire."
Public Function AddBackslash(ByVal FolderPath As String) As String
FolderPath = Trim$(FolderPath)
If Right$(FolderPath, 1) <> "\" Then FolderPath = FolderPath & "\"
AddBackslash = FolderPath
End FunctionEt pour l'appel :
Const COURSES_JEUNES As String = "COURSES JEUNES.xlsm"
Dim Chemin As String
Chemin = AddBackslash(Functions.getDesktopPath) ' // Chemin du bureau par défaut
ActiveWorkbook.SaveAs Filename:=Chemin & COURSES_JEUNES- Évitez les Select et Activate qui ne font que ralentir et transformer votre classeur en sapin de noël.
- Utilisez des tableaux structurés. Cela rendra votre code plus clair et plus simple.
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 6
Columns("O:Q").Select
Selection.EntireColumn.Hidden = False
ActiveWindow.ScrollColumn = 5
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Range("I3:I2500").Select
Selection.Copy
ActiveWindow.ScrollRow = 2482
ActiveWindow.ScrollRow = 2467
ActiveWindow.ScrollRow = 2431
ActiveWindow.ScrollRow = 2416
ActiveWindow.ScrollRow = 2400
ActiveWindow.ScrollRow = 2385
ActiveWindow.ScrollRow = 2364
ActiveWindow.ScrollRow = 2344
ActiveWindow.ScrollRow = 2323
ActiveWindow.ScrollRow = 2303
ActiveWindow.ScrollRow = 2282
ActiveWindow.ScrollRow = 2251
ActiveWindow.ScrollRow = 2226
ActiveWindow.ScrollRow = 2195
ActiveWindow.ScrollRow = 2164
ActiveWindow.ScrollRow = 2128
ActiveWindow.ScrollRow = 2087- Ce type de code est inutile.....
- Déclarez vos variables explicitement. (Mettre Option Explicit en tête de chaque modules)
- Idem sur le code des feuilles (Des boutons et des déclarations sont manquantes)
- Déclarer les fonctions :
Option Explicit
#If VBA7 Then
Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As Long
Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As Long) As Long
#Else
Private Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If
'Private Sub CommandButton1_Click()
' 'Bouton départ de la course
' CommandButton1.Visible = False
' CommandButton2.Visible = True
' Range("A7:A606").ClearContents
' [H4] = Time: [H6] = "": [A7].Select
' SetTimer Application.hwnd, 0, 1000, AddressOf UpDateTime
'End Sub
'Private Sub CommandButton2_Click()
' 'Bouton fin de la course
' CommandButton1.Visible = True
' CommandButton2.Visible = False
' [H6] = Time: [A1].Select
' KillTimer Application.hwnd, 0
'End SubBonne programmation.
Bonjour Jean Paul,
Un grand merci pour votre réponse, mais hélas trop compliquée pour moi. En effet je n'ai aucune notion en programmation et toutes les macros dans le classeur joint ont été faites principalement avec l'enregistreur de macro ou quelques-unes unes, trouvées sur internet.
Je ne sais pas ,si vous avez ouvert les classeurs et tester la macro " TELECHARGER LES DONNEES" , qui fonctionne su rle PC sur lequel je l'ai créé mais bugue sur un autre comme je l'ai indiqué dans ma question. En fait je cherche quelqu'un qui me corrige cette macro afin qu'elle fonctionne sur tous les pc.
Encore merci et bonne journée.
bonjour,
Le message d'erreur indique qu'il ne trouve pas la fenêtre excel "INSCRIPTIONS .XLSX", regarde si tu as bien une fenêtre nommée "INSCRIPTIONS .XLSX" avant de cliquer sur le bouton "télécharger données"
le fichier inscriptions que tu as mis ne contient pas l'espace requis avant le .XLSX