Boucle - Until fin de plage

Bonsoir à tous,

Je suis actuellement confronté à un problème qui je suis certain ne doit pas être bien compliqué pour vous.

J'utilise le code ci-dessous pour remplacer les cellules contenant la lettre A par la lettre B.

Cependant pour une application sur d'autres scénarios j'aurais besoin que la boucle ne s'applique qu'une seule fois sur la plage. C'est à dire qu'une fois que la dernière cellule contenant la lettre A ait été atteinte et qu'elle ait été remplacée la boucle s'arrête.

Je pensais ajouter quelque-chose avec Do Until, mais je ne vois pas comment le formuler. Si quelqu'un a une solution ce serait sympa.

Merci et bonne soirée

Sub FindValue()

    Dim c As Range
    Dim firstAddress As String

    With Worksheets(1).Range("A1:C10") 
        Set c = .Find("A", lookin:=xlValues) 
        If Not c Is Nothing Then 
            firstAddress = c.Address 
            Do 
                c.Value = "B"
                Set c = .FindNext(c) 
            Loop While Not c Is Nothing
        End If 
    End With

End Sub

Bonjour,

Je ne comprend pas trop ce que tu racontes.
Une fois tous les A remplacés, il n'en trouve plus et sort de la boucle.
Ou alors tu n'as pas tout dit...

Et pourquoi une boucle alors que Remplacer fait le travail ?
Range("A1:C10").Replace What:="A", Replacement:="B", LookAt:=xlWhole
suffit.
eric

Bonsoir Eric,

Merci pour ta réponse. En fait ce que je cherche à faire c'est effacer le contenu de toutes les cellules sur une plage dont le résultat de la formule est "".

Je travaille avec un autre logiciel qui utilise Excel comme interface. Pour ce logiciel et pour ce que j'ai à faire il faut que les cellules avec des formules SI et dont le résultat est "" soit totalement vide et ne contiennent pas de formule.

Je pensais utiliser une boucle qui remplace toutes les cellules de la plage dont le résultat est "" par "" mais de toute évidence la boucle tourne indéfiniment.

Je vais tenter avec la formule remplace que tu m'as mis.

Range("A1:C10").Replace What:="", Replacement:="", LookAt:=xlWhole

Merci ! Bonne soirée !

Bonjour,

Ah mais ça n'a plus rien à voir, et ma proposition n'ira pas.
Si tu recherches des "" pour les remplacer par des "" c'est normal d'avoir une boucle infinie.
Et en plus tu dois travailler sur des formules et non des valeurs. Attention que mal simplifier fausse tout le problème.

Essaie avec ça :

Sub suppFVides()
    Dim pl As Range, c As Range
    Set pl = Range("A1:C10") ' plage à traiter
    On Error Resume Next
    ' on ne sélectionne que les cellules avec formule retournant du texte pour accélérer le traitement
    Set pl = pl.SpecialCells(xlCellTypeFormulas, xlTextValues)
    On Error GoTo 0
    If Not pl Is Nothing Then
        Application.ScreenUpdating = False
        For Each c In pl
            If c.Value = "" Then c.ClearContents
        Next c
        Application.ScreenUpdating = True
    End If
End Sub

eric

Merci Éric, je vais essayer ça

ça marche niquel, merci Eric.

Salut

L'exemple que tu donne en premier tourne indéfiniment .....

Il ne manquerait pas firstAddress quelque part ?

Loop While Not c Is Nothing AND C.Address <> FirstAddress

.Find boucle indéfiniment dans la plage si tu lui donnes pas une limite

Salut Jean-Paul,

J'avais essayé ça mais ça ne fonctionne pas

Camille

Rechercher des sujets similaires à "boucle until fin plage"