Fonction VBA Remplacement

Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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
    0
  2. Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   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
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      tu as testé les modifications, et tu ne nous montres pas le code modifié? dommage!
      0
  3. Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   1
     
    ' 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""
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
      0
  4. Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   1
     
    avec cette version là, ça marche (y compris sans l'option explicit)
    merci, ça me permet d'avancer sur mon projet ici:
    https://forums.commentcamarche.net/forum/affich-36408467-extraire-une-liste-suite#p36847829
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      option explicit
      est une précaution très utile, à toujours utiliser.
      peux-tu alors marquer la discussion comme résolue?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Guy_L Messages postés 178 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      elle évite les erreurs dans les noms ou les types de variables.
      0