VBA .ClearContents rebelle

Bonjour,

Je suis en train de revoir toute mes macro dans le but de les améliorer et je bloque sur un bout de code.

Pourquoi ce code fonctionne

    Range("D12,D3,D5,D6,B11,D8").Select
    Selection.ClearContents

alors que celui-ci ne fonctionne pas

    Range("D12,D3,D5,D6,B11,D8").ClearContents

Une idée ?

Merci de votre aide.

Cordialement

Bonjour,

J'ai testé ton deuxième code. ça marche.

Bonjour,

Je n'ai aucun problème avec la 2ème. syntaxe.

Cdlt.

Effectivement, j'ai testé dans un classeur vierge et ca fonctionne mais dans ma macro il ne fonctionne pas.

Private Sub CommandButton1_Click()

Application.DisplayAlerts = False
Application.ScreenUpdating = False

'Creation du dossier d'enregistrement'
    Dim Chemin As String, Fichier As String, Rep As String

    Chemin = "D:\test\"
    Rep = Application.Proper(MonthName(Month(Date))) & " " & Year(Date)
    On Error Resume Next
    MkDir Chemin & Rep
    On Error GoTo 0
    Chemin = Chemin & Rep & "\"
    Rep = Range("D3")
    On Error Resume Next
    MkDir Chemin & Rep
    On Error GoTo 0

'Enregistre en pdf'
    Chemin = Chemin & Rep & "\"
    Sheets("1").Copy
    Fichier = Sheets("1").Range("E12") & ".Pdf"
    With ActiveWorkbook
    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & Fichier, Quality:=xlQualityStandard, _
                          IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                          From:=1, To:=1, OpenAfterPublish:=False
    .Close savechanges:=False

    End With

'Tranfert Feuille 2'

    Const F1 = "1"
    Const F2 = "2"

    Dim lifin As Long, v

    'Nom'
    v = Sheets(F1).Range("D3").Value
    lifin = Sheets(F2).Range("A" & Rows.Count).End(xlUp).Row
    If Sheets(F2).Range("A1") <> "" Then lifin = lifin + 1
    Sheets(F2).Range("A" & lifin).Value = v

'Supprime'
    On Error Resume Next

    Range("Tableau2").SpecialCells(xlCellTypeConstants, 23).ClearContents
    Range("D12,D5,D6,B11,D3,E12").ClearContents

    On Error GoTo 0

'Enregistre'
    With ActiveWorkbook
    .Save
    End With

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

Une idée ?

Merci.

Bonjour,

Supprime On Error Resume Next & On Error Goto 0 et redis nous.

Cdlt.

Bonjour,

En supprimant "On Error Resume Next & On Error Goto 0" , il bloque a la ligne:

 Range("Tableau2").SpecialCells(xlCellTypeConstants, 23).ClearContents

Erreur d'exécution '1004':

pas de cellules correspondantes.

J'ai oublié de préciser que les cellules D3,D5,D6 sont fusionnée, cela pourrait il poser problème ?

Merci.

Bonjour,

ce n'est pas plutôt

Range("Tableau2").SpecialCells(xlCellTypeConstants, 23).ClearContents

qui te fait l'erreur ?

J'imagine plus :

dim pl as range
set pl =Range("Tableau2").SpecialCells(xlCellTypeConstants, 23)
if not pl is nothing then pl.ClearContents

eric

bonjour,

Toujours la même erreur avec la solution d' eriic.

Mais en modifiant

    Range("Tableau2").SpecialCells(xlCellTypeConstants, 23).ClearContents
    Range("D12,D5,D6,B11,D3,E12").ClearContents

par

    Range("Tableau2").SpecialCells(xlCellTypeConstants, 23).ClearContents
    Range("D12,,B11,,E12").ClearContents

Ca passe.

Donc ce sont bien les cellules fusionnées qui pose probleme.

Une idée ?

Merci.

Re,

J'ai trouvé la solution

Dim CellClear As Range

    With Sheets("1")

          For Each CellClear In .Range("D12,D5,D6,B11,D3,E12")
              If CellClear.MergeCells = True Then
                 CellClear.MergeArea.ClearContents
              Else
                 CellClear.ClearContents
              End If
              Next
End With

Mais c'est quand meme beaucoup plus long que

    Range("D12,D3,D5,D6,B11,D8").Select
    Selection.ClearContents

Qu'en pensez vous ?

Merci de votre aide.

Cdt

Sinon il faut que l'intégralité des plages fusionnées soit listées.

Et je maintiens que tu auras une erreur avec .SpecialCells(xlCellTypeConstants, 23).ClearContents s'il ne trouve aucune SpecialCells(xlCellTypeConstants, 23). Plage vide par exemple.

eric

Re,

Tu as raison, j'ai donc remplacé mon code par le tien.

Qu'entends tu par :

Sinon il faut que l'intégralité des plages fusionnées soit listées.

?

Je dois définir un nom a chaque cellules fusionnées en allant dans -formules-définir un nom ?

Ce qui donnerait

range("nom1,nom2,nom3").ClearContents

J'ai bon ?

Re,

J'ai enfin trouvé.

Il suffit juste de sélectionner toutes les cellules de la cellule fusionnée.

Exemple : si dans D3 j'ai D3,D4,E3,E4 il faut écrire D3:E4

Ce qui donne pour mon cas

Range("D5:E5,D3:E4,D6:E7,D8:E8,D12,E12,B11").ClearContents

Encore merci pour votre aide.

Cdt.

Romain.

Par exemple, oui je pense. Tu as juste à tester plutôt que d'attendre une réponse

Mais balayer les areas n'est pas un pb...

Rechercher des sujets similaires à "vba clearcontents rebelle"