Problème avec une macro qui ne fonctionne pas correctement

viviou2

XLDnaute Nouveau
Bonjour,

J'ai un problème avec une macro qui regroupe les données de 3 onglets différents dans un onglet principal.
En effet, j'ai réalisé de la même manière la macro pour les actions sur les 3 onglets mais un des trois ne fonctionne pas correctement.
Je me demande si ce n'est pas dû au fait que une des colonnes de cet onglet a des champs qui peuvent être vide. Ce qui n'est pas le cas sur les deux autres onglets.

Par ailleurs, si je lance deux fois la macro d'affiler manuellement sur le classeur le transfert s'effectue bien lors de la seconde éxecution.
Alors j'ai décidé de la lancer deux fois d'affiler en automatique à l'aide d'une seconde macro. Et là, çà ne marche pas ! Je dois louper quelque chose !

Voilà si vous pouvez m'aider soit à résoudre le problème à la base ou en me permettant de la lancer deux fois ma macro à l'identique qu'en manuel çà serait sympa !


J'ai mis mon fichier en pièce jointe. la macro est sur le bouton "actualiser les données".


Merci
 

Pièces jointes

  • Analyse de maintenance TEST.zip
    259.5 KB · Affichages: 27
  • Analyse de maintenance TEST.zip
    259.5 KB · Affichages: 25
  • Analyse de maintenance TEST.zip
    259.5 KB · Affichages: 26

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème avec une macro qui ne fonctionne pas correctement

Bonjour Viviou, Pierrejean, bonjour le forum,

Ton code simplifié et commenté à tester :
Code:
Sub Actualiser_les_données_cout_maintenance()
Dim dl1 As Integer, dl2 As Integer, dl3 As Integer 'déclare les variable dl1, dl2, dl3 (Dernière Ligne 1, 2 et 3)
Dim dest As Range 'déclare la variabel dest (cellule de DESTination)

Application.Calculation = xlCalculationManual 'calcul manuel
Application.ScreenUpdating = False 'masque les changements à l'écran
ActiveWorkbook.RefreshAll
With Sheets("Données NStocks") 'prend en compte l'onglet "Données NStocks"
    dl1 = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligné éditée dl1 de la colonne 1 (=A) de l'onglet
    .Range("M2:P2").AutoFill Destination:=.Range("M2:P" & dl1) 'recopie la plage M2:P2 jusqu'a la dernière ligne dl1
    .Range("S8:V8").Copy .Range("M1:P1") 'copie la plage S8:V8 et la colle dans M1:P1
End With 'fin de la prise en compte de l'onglet "Données NStocks"
With Sheets("Données NStocks OT Null") 'prend en compte l'onglet "Données NStocks OT Null"
    dl2 = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligné éditée dl2 de la colonne 1 (=A) de l'onglet
    .Range("H2:K2").AutoFill Destination:=.Range("H2:K" & dl2) 'recopie la plage H2:K2 jusqu'a la dernière ligne dl2
    .Range("N8:Q8").Copy .Range("H1:K1") 'copie la plage N8:Q8 et la colle dans H1:K1
End With 'fin de la prise en compte de l'onglet "Données NStocks OT Null"
With Sheets("Données Stocks") 'prend en compte l'onglet "Données Stocks"
    dl3 = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligné éditée dl3 de la colonne 1 (=A) de l'onglet
    .Range("M2:R2").AutoFill Destination:=.Range("M2:R" & dl3) 'recopie la plage M2:R2 jusqu'a la dernière ligne dl3
    .Range("V4:AA4").Copy Range("M1:R1") 'copie la plage V4:AA4 et la colle dans M1:R1
End With 'fin de la prise en compte de l'onglet "Données Stocks"
With Sheets("Données globales") 'prend en compte l'onglet "Données globales"
    .Rows("2:65536").Delete Shift:=xlUp 'supprime toutes les lignes sauf la première
    Set dest = .Cells(.UsedRange.Rows.Count + 1, 1) 'définit la cellule de destination dest
    Sheets("Données NStocks").Range("F2:P" & dl1).Copy 'copie la plage F2:P...dl1 de l'onglet "Données NStocks"
    dest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'colle les valeurs de la copie dans dest
    Set dest = .Cells(.UsedRange.Rows.Count + 1, 2) 'redéfinit la cellule de destination dest
    Sheets("Données NStocks OT Null").Range("F2:F" & dl2).Copy 'copie la plage F2:F...dl2 de l'onglet "Données NStocks OT Null"
    dest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'colle les valeurs de la copie dans dest
    Set dest = dest.Offset(0, 5) 'décale la cellule de destination de 5 colonnes à doite
    Sheets("Données NStocks OT Null").Range("G2:K" & dl2).Copy 'copie la plage G2:K...dl2 de l'onglet "Données NStocks OT Null"
    dest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'colle les valeurs de la copie dans dest
    Set dest = .Cells(.UsedRange.Rows.Count + 1, 1) 'redéfinit la cellule de destination dest
    Sheets("Données Stocks").Range("G2:Q" & dl3).Copy 'copie la plage G2:Q...dl3 de l'onglet "Données Stocks"
    dest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'colle les valeurs de la copie dans dest
End With 'fin de la prise en compte de l'onglet "Données globales"
Sheets("Tableau Mois").Rows("7:200").Sort Order1:=xlAscending, Type:=xlSortLabels, OrderCustom:=1, Orientation:=xlTopToBottom 'tri l'onglet "Tableau Mois"
Sheets("Accueil").Select 'sélectionne l'oglet "Accueil"
Application.Calculation = xlCalculationAutomatic 'calcul automatique
Application.ScreenUpdating = True 'affiche les chamgements à l'écran
ActiveWorkbook.RefreshAll
End Sub
 

viviou2

XLDnaute Nouveau
Re : Problème avec une macro qui ne fonctionne pas correctement

Bonjour Robert,

Je viens de tester ton code est le résultat est identique au mien avec les mêmes problématiques :
- devoir lancer deux fois la requete en manuel pour avoir le bon résultat car les données OT null soit ne sont pas prises en compte lorsque j'agrandi la période d'étude ou soit reste lorsque je diminue la plage.

Par ailleurs, j'ai dû mettre pour ton code :
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

Sinon les nouvelles datent d'études ne s'actualisent pas dans les différents onglets et la requête n'est pas modifiée.

Merci
 

viviou2

XLDnaute Nouveau
Re : Problème avec une macro qui ne fonctionne pas correctement

Je viens de vérifier pour moi çà marche.
Je l'ai remis en pièce jointe.

merci
 

Pièces jointes

  • Analyse de maintenance TEST.zip
    266.5 KB · Affichages: 25
  • Analyse de maintenance TEST.zip
    266.5 KB · Affichages: 22
  • Analyse de maintenance TEST.zip
    266.5 KB · Affichages: 26

Discussions similaires

Statistiques des forums

Discussions
311 733
Messages
2 082 008
Membres
101 864
dernier inscrit
elrecruiter