Fonction VBA Remplacement

Bonjour,
Dans une macro, j'utilise la commande suivante pour vider certaines cellules

Application.ScreenUpdating = False
Dim DerLig As Long
On Error Resume Next
For f = 1 To 2
If f = 1 Then Set ShVert = Sheets("alpha") Else Set ShVert = Sheets("beta")
ShVert.Select
DerLig = [A100000].End(xlUp).Row

Selection.Replace What:="motaremplacer", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
next f


Mon problème est que, bien que j'incrémente les feuilles dans ma macro et que j'ai bien la feuille n+x qui est sélectionné (en l'occurrence ici la feuille alpha), la sélection de cellules reste toujours sur la feuille 1 et donc ne s'exécute pas dans les autres.
Mon incrément dans le code passe de la feuille alpha à la feuille beta

Pouvez-vous me dire si c'est la syntaxe de sélection qui fait ça ?
Merci

Configuration: Windows / Firefox 81.0

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    bonjour, peux-tu utiliser les balises de code quand tu partages du code?
    https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Si tu veux voir ce qui se passe et détecter les erreurs, supprime, au moins temporairement,
    Application.ScreenUpdating = False

    et
    On Error Resume Next


    veille à ajouter
    option explicit
    en début de module, ce qui te force à déclarer chaque variable.
    ensuite, évite d'utiliser "Select".

    suggestion:
    Dim f As Integer, shVert As Worksheet
    'On Error Resume Next
    For f = 1 To 2
        If f = 1 Then Set shVert = Sheets("alpha") Else Set shVert = Sheets("beta")
        shVert.Replace What:="motaremplacer", Replacement:="", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    Next f
    End Sub
    1. Bonjour,
      J'avais placé le sujet dans le mauvais endroit, merci de m'en excuser.
      Par contre, j'avais bien mis les balises de code (d'ailleurs ça se voit puisque le code est dans un cadre).
      Voici cette fois la totalité de la macro, sachant que j'ai testé les modifications sans succès hélas:
      Sub Macro1()
      
          Application.ScreenUpdating = False
          Dim DerLig As Long
          Dim i As Integer, shVert As Worksheet
          On Error Resume Next
          For f = 1 To 2
            If f = 1 Then Set shVert = Sheets("alpha") Else Set shVert = Sheets("beta")
              shVert.Select
              DerLig = [A100000].End(xlUp).Row
              
              'Effacement des images
                 Dim img As Object
                 For Each img In shVert.Shapes
                     img.Delete
                 Next
              
              'remplacement du mot "Mot1" par [vide]
              Selection.Replace What:="Mot1", Replacement:="", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
              
              'remplacement du mot "Mot2" par [vide]
              Selection.Replace What:="Mot2", Replacement:="", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
              
              'remplacement du mot "Mot3" par [vide]
              Selection.Replace What:="Mot3", Replacement:="", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
              
              'remplacement du mot "Mot" par [vide]
              Selection.Replace What:="Mot4", Replacement:="", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
              
              'remplacement du mot "Mot5" par [vide]
              Selection.Replace What:="Mot5", Replacement:="", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
              
              'remplacement du mot "Mot6" par [vide]
              Selection.Replace What:="Mot6", Replacement:="", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
              
              'suppression des lignes vides
                 Range("A1:A" & DerLig).SpecialCells(xlCellTypeBlanks).EntireRow.Delete                                                                                  
          
              'Alignement à gauche
                 Columns("A:A").HorizontalAlignment = xlLeft
                 
              'Ajustement colonne
                 Columns("A:A").Columns.AutoFit
          Next f
      End Sub
      1. Contributeur
        tu as testé les modifications, et tu ne nous montres pas le code modifié? dommage!
    2. ' Application.ScreenUpdating = False
          Dim DerLig As Long, shVert As Worksheet
         ' On Error Resume Next
          For f = 1 To 2
          If f = 1 Then Set shVert = Sheets("alpha") Else Set shVert = Sheets("beta")
          DerLig = [A100000].End(xlUp).Row
              
              'Effacement des photos
                 Dim img As Object
                 For Each img In shVert.Shapes
                     img.Delete
                 Next
              
              'remplacement du mot "Mot1" par [vide]
              shVert.Replace What:="Mot1", Replacement:="", LookAt:=xlPart, _
              SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
              ReplaceFormat:=False
              
              '... [etc....]
              
          Next f
      End Sub


      la macro plante (erreur de compilation) sur "shVert.Replace What:="motaremplacer""
      1. Contributeur
        veille à ajouter
        option explicit
        en début de module, ce qui te force à déclarer chaque variable.

        bizarre, j'avais testé, et j'avais été surpris que cela fonctionnait.
        plutôt:
        shVert.UsedRange.Replace
    3. pouvez-vous m'expliquer cette option explicit ?
      En quoi est-elle TRES utile, elle amène la contrainte de n'oublier aucune déclaration de variable, mais elle a sans doute d'autres implications positives qui m'échappent...
      Merci
      1. Contributeur
        elle évite les erreurs dans les noms ou les types de variables.