Fonction VBA Remplacement

Fermé
Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 - 24 sept. 2020 à 13:07
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 - 27 sept. 2020 à 11:06
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

yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 Ambassadeur 1 538
24 sept. 2020 à 14:30
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
Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 1
24 sept. 2020 à 17:04
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
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
24 sept. 2020 à 17:48
tu as testé les modifications, et tu ne nous montres pas le code modifié? dommage!
0
Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 1
Modifié le 24 sept. 2020 à 19:21
' 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
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
25 sept. 2020 à 11:55
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
Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 1
26 sept. 2020 à 20:10
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
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
26 sept. 2020 à 22:02
option explicit
est une précaution très utile, à toujours utiliser.
peux-tu alors marquer la discussion comme résolue?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Guy_L Messages postés 176 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 20 septembre 2024 1
27 sept. 2020 à 09:27
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
yg_be Messages postés 23235 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 septembre 2024 1 538
27 sept. 2020 à 11:06
elle évite les erreurs dans les noms ou les types de variables.
0