XL 2016 Ma macro ne se lance pas en entier sur certains PCs

Hynnuh

XLDnaute Junior
Bonjour à tous,

je me retrouve devant un cas un peu spécial.
(je fais un historique rapide histoire de situer le contexte)

j'ai créé un fichier avec tout plein de macro, toutes fonctionnent sans encombre sur mon PC (win10 excel 2016)
là où ça se complique c'est qu'une des macro (qui fait une boucle de copier/coller) s'interrompt en cours de traitement lorsqu'on la lance sur certains autres PC sur lesquels j'ai essayé.
les tests ont été fais avec différentes versions de windows (meme OSX) et d'excel (du 2013 ,2015 et 2016)

en résumé:
-je lance la macro sur mon PC tout va bien elle s'execute en entier sans encombre . j'en conclue donc que la macro est correctement codée.
je lance la même macro du même fichier sur un autre ordi, la macro fait deux boucles et puis à celle d'après elle bug sur une erreur 1004

ma question est la suivante:
qu'est ce qui peut arrêter une macro en plein milieu sur certains pc mais qui fait qu'elle se lance sur d'autres en entier? là je sèche :/


merci à toute personne qui pourra m'éclairer.

Hynnuh
 

Hynnuh

XLDnaute Junior
la macro est interne au fichier, (copie d'un onglet à l'autre)
et elle se lance mais seulement partiellement.
la boucle fait deux tours de boucle et bug.
alors que sur d'autres PC (lancement de la même macro partant du même fichier en réseau) elle s’exécute entièrement
 

Hynnuh

XLDnaute Junior
la macro effectue les taches suivantes:
elle récupère des infos sur un onglet (feuil12) et les colle sur un autre du même classeur (feuil3)

voici le code en question si cela peut aider


Code:
Sub sauve2_2()
Application.ScreenUpdating = False
Sheets("SAUVEGARDE TEMP2").Activate
With Feuil12
    finc = .UsedRange.Columns.Count               'on récupère la dernière ligne de la feuille
    finl = .UsedRange.Rows.Count
   
      For i = 8 To finl
        If .Range("A" & i) <> "" Then
            fintab = .Range("A" & i).Offset(1, 0).Row - 1  'on récupère la dernière ligne de la "section test"
            NumTest = .Range("A" & i)
                    
            .Range(Cells(i, 9), Cells(fintab, finc)).Copy
            With Feuil3
                Set ici = .Rows(10).Find(NumTest, lookat:=xlWhole)
                If Not ici Is Nothing Then
                    .Range("A18").Offset(0, ici.Column - 1).PasteSpecial Transpose:=True
                  
                End If
            End With
        End If
    Next i
   End With
Application.ScreenUpdating = True

Feuil3.Activate
With Feuil3

finic = .UsedRange.Columns.Count               'on récupère la dernière ligne de la feuille
finil = .UsedRange.Rows.Count


'on met en forme les colonnes et les lignes pour avoir un tableau harmonieux

Range(Cells(10, 8), Cells(finil, finic)).Borders.Weight = xlThin
Range(Cells(15, 8), Cells(16, finic)).Interior.Color = RGB(0, 176, 240)
Range(Cells(18, 8), Cells(finil, finic)).Borders.Weight = xlThin
Range(Columns(8), Columns(finic)).Select

    Selection.ColumnWidth = 15   'taille dela colonne

  
  
  
End With
  
  

End Sub

le soucis apparait quand i=14
pour i=8à13 tout fonctionne normalement sur tous les PC.
sur certains PC àpartir de 14 ça plante
et je n'arrives pas à savoir pourquoi.
 

blord

XLDnaute Impliqué
Bonjour, est-ce le problème pourrait être causé par l'utilisateur ???
Par exemple, si un utilisateur active un autre classeur pendant l'exécution du code, celà pourrait causer un problème car vous travailler en relatif et non en absolu...
Une bonne pratique est d'éviter les activate et les select qui sont inutiles dans 99% des cas...

Par exemple :
finc = Thisworkbook.Worksheets("SAUVEGARDE TEMP2").UsedRange.Columns.Count
finl = Thisworkbook.Worksheets("SAUVEGARDE TEMP2").UsedRange.Rows.Count
If Thisworkbook.Worksheets("SAUVEGARDE TEMP2").Range("A" & i) <> "" Then
etc...

Oui c'est plus lourd et long mais en travaillant en absolu, on est certain de où va s'exécuter le code et éviter des problèmes...

Une autre bonne pratique est de déclarer ses variables :
Dim finc as Long
Dim finl as Long
Dim i as Integer etc...

Ça évite de laisser Excel/Windows décider de ce qu'il fait avec les variables...

Si la config de Windows/Excel est différente sur les postes, ça peut causer des problèmes...
Ceci dit, peut-être que ça ne corrigera pas le problème mais ça pourrait éviter d'en causer plus...
 

Hynnuh

XLDnaute Junior
Bonjour
Merci blord pour cette idée, effectivement cela pourrait éviter que la macro ne bosse pas au bon endroit, toutefois elle est reliée à un bouton physique, il faut donc être positionné sur la bonne page pour l'activer, du coup je n'ai pour le moment pas eu de soucis sur ce point en tout cas.

test effectué en n'ayant que le fichier en question d'ouvert et toujours le même résultat.

test effectué sur des versions différentes de Excel et windows et parfois cela fonctionne et parfois non.
meme configuration pc windows et excel sur l'un ca fonctionne et sur l'autre ca bloque pour i=14
configuration pc, windows et excel différentes et sur l'un ca fonctionne et sur l'autre ca bloque pour i=14
j'ai essayé de refaire le fichier en exportant le code et en le recopiant , même soucis

là je sèche :/

je ne peux hélas pas envoyer le fichier
 

blord

XLDnaute Impliqué
Bonjour,
Simplement pour bien comprendre la notion Absolue et Relative...
Supposons le classeur1/Feuille1/Feuill2 et le classeur2/Feuille2

Il y a un bouton dans le classeur1/Feuille1 qui lance la macro...
La macro dit quelque chose comme (évidemment pas du vrai code ici, vous l'aurez compris....)
ActiveSheets.copy range ("A2:A500")
SheetFeuille2.usedrange.delete
SheetFeuille2.paste Range("A5")
ActiveWorkbook.save

Si l'utilisateur ouvre le classeur 2 entre temps
La macro s'exécutera alors dans le classeur2/feuille2 qui contenait tous les résultats financiers de l'année
La macro supprime la plage de données, colle des données et sauvegarde le classeur mais tout ça dans le classeur2 au lieu du classeur1...

Évidemment c'est un exemple simpliste et qui a peu de chance de se produire parce que ce code s'exécuterait très rapidement... Mais dès que l'on travail sur des boucles, sur des plages de données conséquentes et que le temps de traitement se prolonge, la possibilité d'erreur devient donc plus probable.... Si on travail en relatif...

Si on travail en absolu, on est certain que tout le code s'exécute dans le bon classeur et dans la bonne feuille parce que tout est spécifiquement adressé dans le code et non pas sur ce qui est "Actif"....

Je ne certifie pas que c'est spécifiquement ce qui cause votre problème....
 

job75

XLDnaute Barbatruc
Bonjour,

Il faut vraiment des points devant les Cells ici :
Code:
Sub sauve2_2()
Dim finc%, finl&, i&, fintab&, NumTest, ici As Range, finic%, finil&
Application.ScreenUpdating = False
With Feuil12
    finc = .UsedRange.Columns.Count               'on récupère la dernière ligne de la feuille
    finl = .UsedRange.Rows.Count
    For i = 8 To finl
        If .Range("A" & i) <> "" Then
            fintab = .Range("A" & i).Offset(1, 0).Row - 1  'on récupère la dernière ligne de la "section test"
            NumTest = .Range("A" & i)
            .Range(.Cells(i, 9), .Cells(fintab, finc)).Copy
            With Feuil3
                Set ici = .Rows(10).Find(NumTest, , xlValues, xlWhole)
                If Not ici Is Nothing Then
                    .Range("A18").Offset(0, ici.Column - 1).PasteSpecial Transpose:=True
                End If
            End With
        End If
    Next i
End With

Feuil3.Activate 'pas indispensable...
With Feuil3
    finic = .UsedRange.Columns.Count               'on récupère la dernière ligne de la feuille
    finil = .UsedRange.Rows.Count
    'on met en forme les colonnes et les lignes pour avoir un tableau harmonieux
    .Range(.Cells(10, 8), .Cells(finil, finic)).Borders.Weight = xlThin
    .Range(.Cells(15, 8), .Cells(16, finic)).Interior.Color = RGB(0, 176, 240)
    .Range(.Cells(18, 8), .Cells(finil, finic)).Borders.Weight = xlThin
    .Range(.Columns(8), .Columns(finic)).ColumnWidth = 15   'taille dela colonne
End With

End Sub
A+
 
Dernière édition:

chris

XLDnaute Barbatruc
Bonjour

Peut-être un problème de mémoire RAM. Voir si les PC en ont tous autant et la mémoire dispo avant de lancer... sachant qu'Excel 32 bits n'utilise pas la mémoire au dessus de 4 go et, selon ce qui est lancé, il peut ne pas rester assez...
 

Discussions similaires

Réponses
2
Affichages
288

Statistiques des forums

Discussions
312 266
Messages
2 086 655
Membres
103 354
dernier inscrit
roukhein