Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Activate obligatoire sinon code ne fonctionne pas

  • Initiateur de la discussion Initiateur de la discussion loulou14
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

loulou14

XLDnaute Nouveau
Bonjour

J'essaie d'optimiser mes codes et donc j'entreprends de retirer les .Activate qui imposent des changements "d'écran".

Je bute sur un .Activate que je ne peux pas retirer, sinon "Erreur d'éxécution 1004".

A priori c'est cette ligne qui est en cause :
Code:
Set Plage = Sheets("NATALITE MFI").Range(Range("C6"), Range("C6").End(xlToRight))


Un expert du forum peut-il m'apporter une explication ? Et pourquoi pas une astuce pour contourner cette contrainte ?

D'avance Merci
Code:
Sub NataliteMFI()
' Calcul la natalité MFI
Dim i As Long, DerniereLigne As Long
Dim NbCol As Long
Dim j As Long
Dim c As Range
'---
ThisWorkbook.Activate
Sheets("NATALITE MFI").Activate
Sheets("NATALITE MFI").Outline.ShowLevels RowLevels:=2
Cells.Select
      With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
NbCol = [A6].CurrentRegion.Columns.Count
DerniereLigne = Sheets("NATALITE MFI").Range("B65536").End(xlUp).Row
     For i = 7 To DerniereLigne
       For j& = 2 To NbCol
         Set c = Sheets("NATALITE MFI").Cells(i, j)
         If c <> "" Then
           c.Interior.ColorIndex = 6
           Exit For
         End If
       Next j
     Next i
Sheets("NATALITE MFI").Outline.ShowLevels RowLevels:=1

Set Plage = Sheets("NATALITE MFI").Range(Range("C6"), Range("C6").End(xlToRight))
    For Each c In Plage
        If c.Value <> "" Then
            c.Offset(2493, 0).Value = c.Offset(2496, 0).Value & "-" & c.Value
            c.Offset(2494, -1).Copy
            c.Offset(2494, 0).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End If
    Next

End Sub
 
Bonjour loulou 🙂

D'après le code tu est toujours sur la même feuille; donc tu met

With Sheets("NATALITE MFI")
Set Plage = .Range("C6").End(xlToRight)
End With

Oubien déclaré la variable Dim Ws As Worksheet

Set Ws = Sheets("NATALITE MFI")

With Ws
Set Plage = .Range("C6").End(xlToRight)
End With
 
Bonjour

Il faudrait
Code:
Set Plage = Sheets("NATALITE MFI").Range(Sheets("NATALITE MFI").Range("C6"), Sheets("NATALITE MFI").Range("C6").End(xlToRight))
ou bien un With Sheets("NATALITE MFI")

pour que CHAQUE range se réfère à la bonne feuille

Edit : Coucou Lone Wolf, plus rapide
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
530
Réponses
4
Affichages
398
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
801
Réponses
4
Affichages
591
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…