Code VBA suppression

bonjour tout le monde,

voici mon code

Sub EffacerContenuColonneB()
    Dim ws As Worksheet
    Dim rngB As Range
    Dim cell As Range
    Dim searchRange As Range
    Dim searchTerm As String

    '  feuille de calcul où se trouvent les données
    Set ws = ActiveSheet

    ' la plage de données dans la colonne B 
    Set rngB = ws.Range("B1:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row)

    ' Parcour chaque cellule de la colonne P et recherche si la valeur est dans la colonne B
    For Each cell In ws.Range("P1:P" & ws.Cells(ws.Rows.Count, "P").End(xlUp).Row)
        searchTerm = cell.Value
        Set searchRange = rngB.Find(What:=searchTerm, LookIn:=xlValues, LookAt:=xlWhole)

        ' Si la valeur est trouvée dans la colonne B, effacez le contenu
        If Not searchRange Is Nothing Then
            searchRange.ClearContents
        End If
   Next cell
End Sub

il me permet d'effacer le contenu dans les cellules de la colonne B si il est également contenu dans une des cellules de la colonne P

dans l'ensemble, ca fonctionne sauf que ça n'efface que 1 cellule sur 2

je doit cliquer plusieurs fois sur mon bouton pour qu'au finale tout soit effacer. a chaque fois ca en supprime moitié par moitié . de 16 on passe à 8 puis à 4 puis à 2; 1 enfin la dernière

je précise que le contenu de P est obtenu grâce à une fonction FILTRE qui fait appel a la colonne B.

au final je souhaite juste à n'avoir a cliquer qu'une seule fois sur mon bouton pour tout effacer.

merci d'avance de votre aide.

personne ??

bonjour,

non testé

Sub EffacerContenuColonneB()
    Dim ws As Worksheet
    Dim rngB As Range
    Dim cell As Range
    Dim searchRange As Range
    Dim searchTerm As String
    Dim dict As Object
    '  feuille de calcul où se trouvent les données
    Set ws = ActiveSheet
    Set dict = CreateObject("scripting.dictionary")
    For Each cell In ws.Range("P1:P" & ws.Cells(ws.Rows.Count, "P").End(xlUp).Row)
        searchTerm = cell.Value
        dict(searchTerm) = 1
    Next
    ' la plage de données dans la colonne B
    Set rngB = ws.Range("B1:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row)
    For Each cell In rngB
        If exists.dict(cell.Value) Then
            cell.ClearContents
        End If
    Next cell
End Sub

ps: je trouve ton "personne ??" particulièrement incongru.

h2so4

je te remercie de ton aide .

pour "le personne ??" , je le disais de façon uniquement.

aucunement d'une autre façon qui aurait été plus "directive".

je viens régulièrement sur le forum chercher de l'aide. je vais pas me blacklister tout seul...

j'essaierai d'être moins incongru les prochaines fois.

j'essai ton code et te fait un retour.

j'ai une erreur 424; le débogueur me renvoi sur le :

if exists ...... et le commentaire est "cell.value=vide"

Set rngB = ws.Range("B1:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row)
    For Each cell In rngB
        If exists.dict(cell.Value) Then
            cell.ClearContents
        End If
    Next cell

rebonjour,

essaie ceci

Set rngB = ws.Range("B1:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row)
    For Each cell In rngB
        If dict.exists(cell.Value) Then
            cell.ClearContents
        End If
    Next cell

salut à tous,

Fait l'inverse pour voir,

Sub EffacerContenuColonneB()
    Dim ws As Worksheet
    Set ws = ActiveSheet

    ' la plage de données dans la colonne B
    Dim rngB As Range
    Set rngB = ws.Range("B1:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row)

    Dim rngP As Excel.Range
    Set rngP = ws.Range("P1:P" & ws.Cells(ws.Rows.Count, "P").End(xlUp).Row)

    ' Parcour chaque cellule de la colonne B et recherche si la valeur est dans la colonne P
    Dim cell As Range
    For Each cell In rngB
        With cell
            Dim searchRange As Range
            Set searchRange = rngP.Find(.Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not searchRange Is Nothing Then .Value = vbNullString
        End With
    Next cell
End Sub

merci a toi H2SO4.

ça marche nickel

merci jean-paul mais du coup je vais conserver la proposition de h2so4

je vais conserver la proposition de h2so4

elle basée sur la même logique que celle de Jean-Paul , mais elle utilise un dictionnaire pour vérifier si une ligne doit être effacée ou non.

Rechercher des sujets similaires à "code vba suppression"