Microsoft 365 Problème, ma macro change la plage de cellule dans une autre feuille

akira21

XLDnaute Junior
Bonjour,

J'ai un problème, quand j'utilise une macro pour actualiser un tableau dans une feuille "Cockpit", la plage dans ma formule de ma feuille B change...
Celle ci diminue, elle passe de 1500 à 1200 par exemple.
Savez vous comment résoudre le problème ?
Est ce normal d'avoir le lien du fichier avant la macro quand je veux l'affecter ?
VB:
'Cockpit OTC GQ derniere version.xls'!Copie

VB:
=SOMMEPROD(($A5<>$A4)*(Cockpit!$Q$7:$Q$1500=0)*(Cockpit!$H$7:$H$1500=$A5)*Cockpit!$J$7:$J$1500)

Code:
Sub Copie()

'Copie
Application.ScreenUpdating = False
Sheets("Copie Formule").Select
    Range("A7:R1500").Select
    Selection.Copy
    Sheets("Cockpit").Select
    Range("A7").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Paste:=xlPasteFormats
   
   
'Converti colonne E, G, H, Q, R en nombre

Range("E7:E1500").Select
    Selection.TextToColumns , FieldInfo:=Array(1, 1)

Range("G7:G1500").Select
    Selection.TextToColumns , FieldInfo:=Array(1, 1)

Range("H7:H1500").Select
    Selection.TextToColumns , FieldInfo:=Array(1, 1)

Range("Q7:Q1500").Select
    Selection.TextToColumns , FieldInfo:=Array(1, 1)

Range("R7:R1500").Select
    Selection.TextToColumns , FieldInfo:=Array(1, 1)
   

ActiveSheet.UsedRange.Columns(2).EntireColumn.Insert 'insère une colonne auxiliaire
    DL = Sheets("Cockpit").Range("F65500").End(xlUp).Row
    With ActiveSheet.Range("B7:B" & DL)
            .FormulaR1C1 = "=IF(COUNTIF(Liste!C,Cockpit!RC[4])>0,1,"""")"
            .Value = .Value 'supprime les formules
            .EntireRow.Sort .Cells, xlDescending  'tri pour regrouper et accélérer
            On Error Resume Next 'si aucune SpecialCell
            .SpecialCells(xlCellTypeConstants, 1).EntireRow.Delete
            .EntireColumn.Delete 'supprime la colonne auxiliaire
    End With
With ActiveSheet.UsedRange: End With 'actualise les barres de défilement
 
'Sélectionne la cellule A1

Range("A1").Select


   
End Sub
 

Rouge

XLDnaute Impliqué
Bonjour,

Sans voir le fichier, difficile de répondre avec certitude, mais en regardant votre code, il me semble bien que vous supprimiez les lignes dont la cellule en colonne en B est vide. Si parmi les 1500 lignes, il y a 300 cellules vides dans la colonne B, ces dernières seront bien supprimées, d'où les 1200 lignes restantes.

Cdlt
 

eriiic

XLDnaute Barbatruc
Bonjour,

selon les opérations faites auparavant, il arrive que la feuille active ne le soit pas réellement.
Tu peux te passer de l'activation de l'autre feuille.
Remplace :
VB:
'    Sheets("Copie Formule").Select
'    Range("A7:R1500").Select
'    Selection.Copy
'    Sheets("Cockpit").Select
'    Sheets("Cockpit").Select
'    Range("A7").Select
'    Selection.PasteSpecial Paste:=xlPasteValues, Paste:=xlPasteFormats
par :
Code:
    Sheets("Copie Formule").Range("A7:R1500").Copy
    Sheets("Cockpit").Range("A7").PasteSpecial Paste:=xlPasteValues
    Sheets("Cockpit").Range("A7").PasteSpecial Paste:=xlPasteFormats
Démarre avec Sheets("Cockpit") active
Pas sûr que cela suffise si d'autres opérations du même style ont eut lieu avant. Elimine tous les .Select inutiles, qui ralentissent fortement en plus.
eric
 
Dernière édition:

akira21

XLDnaute Junior
Bonjour,

selon les opérations faites auparavant, il arrive que la feuille active ne le soit pas réellement.
Tu peux te passer de l'activation de l'autre feuille.
Remplace :
VB:
'    Sheets("Copie Formule").Select
'    Range("A7:R1500").Select
'    Selection.Copy
'    Sheets("Cockpit").Select
'    Sheets("Cockpit").Select
'    Range("A7").Select
'    Selection.PasteSpecial Paste:=xlPasteValues, Paste:=xlPasteFormats
par :
Code:
    Sheets("Copie Formule").Range("A7:R1500").Copy
    Sheets("Cockpit").Range("A7").PasteSpecial Paste:=xlPasteValues
    Sheets("Cockpit").Range("A7").PasteSpecial Paste:=xlPasteFormats
Démarre avec Sheets("Cockpit") active
Pas sûr que cela suffise si d'autres opérations du même style ont eut lieu avant. Elimine tous les .Select inutiles, qui ralentissent fortement en plus.
eric
J'ai remplacé mais le résultat et le même.
Ce qui est étonnant, c'est que la plage de ma formule qui est dans une autre feuille soit changer quand j'utilise cette macro dans une autre feuille :(
Ca ne me le faisait pas au début :/
Maintenant, à chaque fois que j'utilise cette macro, cela me diminue la plage de ma formule qui est dans une autre feuille et qui n'a pas de lien avec la macro. Cela jusqu'à arriver à ça :
VB:
=SOMMEPROD(($A5<>$A4)*(Cockpit!#REF!=0)*(Cockpit!#REF!=$A5)*Cockpit!#REF!)

Plus de plage !!!
 
Dernière édition:

Discussions similaires

Réponses
9
Affichages
754
Réponses
38
Affichages
2 K
Réponses
1
Affichages
165
Haut Bas