Microsoft 365 VBA copier cellule, conserver la copie tout en effaçant contenu

  • Initiateur de la discussion Initiateur de la discussion dacunha
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dacunha

XLDnaute Junior
Bonjour,
Pourriez-vous m'aider avec ce code.
Ce que je souhaite faire, c'est copier la cellule i34, faire apparaitre le message mentionnant que les données ont bien été copiées puis décocher toutes les cases de la feuil1 et effacer le contenu de certaines cellules mais tout ceci en conservant la possibilité de coller sur un autre logiciel ce que j'avais initialement copié.
VB:
Sub Copier()
Sheets("feuil1").Range("i34").Copy
MsgBox ("Les données ont été copiées")
Dim ws As Worksheet, c As Range
Set ws = Worksheets("feuil1")
For Each c In ws.UsedRange
    If Not c.CellControl Is Nothing Then
        If c.CellControl.Type = xlTypeCheckbox Then
            c.Value = False
        ws.Range("J1:M33").ClearContents
        ws.Range("E37").ClearContents
        End If
        End If
Next c
End Sub
Avec mon code, je peux coller ce que j'ai copié tant que je n'ai pas cliqué sur ok.
Avez-vous une idée pour que le coller fonctionne même après avoir cliqué sur ok?
Merci et bonne journée
 
Salut,
Juste avant le End Sub , refaire la copie :
VB:
Sheets("feuil1").Range("i34").Copy

A ce propos, il n'y a pas eu de Paste ?
Bonjour fanch55,
Merci pour ta proposition.
Celle-ci fonctionne mais les éléments incrémentés dans la cellule i34 sont effacés en amont de la seconde copie. De ce fait, seuls les éléments fixes sont copiés.
Pour répondre à ta question, le collage se fait sur un autre logiciel et non sur le fichier excel.
Je joins une version test de mon fichier pour plus de compréhension.
Merci
 

Pièces jointes

Dernière édition:
La cellule I34 est une nouvelle checkBox valide seulement sur Microsoft 365 ?
Désolé, je suis sur Office 2021 qui n'a pas cet add-on , aussi j'ai commenté dans la proposition suivante ce qui est relatif au checkbox
VB:
Sub Copier()
Dim Ws As Worksheet, C As Range
Set Ws = Worksheets("feuil1")
    With GetObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .setText Ws.Range("i34")
        .putInClipboard
    End With
    MsgBox ("Les données ont été copiées")

    For Each C In Ws.UsedRange
    '    If Not c.CellControl Is Nothing Then
    '        If c.CellControl.Type = xlTypeCheckbox Then
                C.Value = False
                Ws.Range("J1:M33").ClearContents
                Ws.Range("E37").ClearContents
    '        End If
    '    End If
    Next C
End Sub
 
Dernière édition:
La cellule I34 est une nouvelle checkBox valide seulement sur Microsoft 365 ?
Désolé, je suis sur Office 2021 qui n'a pas cet add-on , aussi j'ai commenté dans la proposition suivante ce qui est relatif au checkbox
VB:
Sub Copier()
Dim Ws As Worksheet, C As Range
Set Ws = Worksheets("feuil1")
    With GetObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .setText Ws.Range("i34")
        .putInClipboard
    End With
    MsgBox ("Les données ont été copiées")

    For Each C In Ws.UsedRange
    '    If Not c.CellControl Is Nothing Then
    '        If c.CellControl.Type = xlTypeCheckbox Then
                C.Value = False
                Ws.Range("J1:M33").ClearContents
                Ws.Range("E37").ClearContents
    '        End If
    '        End If
    Next C
End Sub
La cellule I34 est une cellule qui récupère les informations (via formule Concat) des autres cellules. Je viens de tenter ce code et tous les champs de ma feuille de calculs sont passés à FAUX.
Merci
 
La cellule I34 est une cellule qui récupère les informations (via formule Concat) des autres cellules. Je viens de tenter ce code et tous les champs de ma feuille de calculs sont passés à FAUX.
Merci
Exact, le code tel que je vous l'ai livré met à faux toutes les cellules "renseignées" de la feuille .
Décommentez les lignes qui le sont pour retrouver le fonctionnement d'origine .
 
Exact, le code tel que je vous l'ai livré met à faux toutes les cellules "renseignées" de la feuille .
Décommentez les lignes qui le sont pour retrouver le fonctionnement d'origine .
Pas de soucis, j'avais fait une copie de mon fichier.
Ca veut dire quoi décommentez les lignes? Cela me permettrait de trouver le code qui ne ferait que décocher les cases et effacer les cellules tout en conservant après l'effacement la possibilité de coller sur word par exemple ma copie? Désolée, je n'ai pas compris.

Par ailleurs j'ai remarqué qu'avec mon code, les données pouvaient être coller sous word par exemple, tant que je n'avais pas cliqué sur OK et je ne vois pas comment dire de conserver la copy même après avoir cliqué sur ok.
Merci
 
Dernière édition:
Bonjour,
Je reviens vers vous car lorsque je protège ma feuille, et que je souhaite utiliser mon tableau, j'ai le plantage ci-dessous lorsque j'utilise, soit le bouton reset, soit le bouton copier (associé au bouton reset) :
1745845611143.png

1745845643497.png

Si la feuille n'est pas protégée, tout fonctionne très bien. Une idée?
Merci
 
Enlever la protection avant la maj de la Feuille et la remettre en fin
VB:
Sub Copier() ' (pas de cellcheckbox)
Dim Ws As Worksheet, C As Range
Set Ws = Worksheets("Z")
    With GetObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .setText Ws.Range("n1")
        .putInClipboard
    End With
    MsgBox ("Les données ont été copiées")
    Application.EnableEvents = False
    Ws.Unprotect
        For Each C In Union(Ws.UsedRange.Columns("B"), Ws.UsedRange.Columns("D"))
            If WorksheetFunction.IsLogical(C) Then C.Value = False
        Next C
        Ws.Range("J1:M33").ClearContents
        Ws.Range("E37").ClearContents
    Ws.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
    Application.EnableEvents = True
End Sub
 
Enlever la protection avant la maj de la Feuille et la remettre en fin
VB:
Sub Copier() ' (pas de cellcheckbox)
Dim Ws As Worksheet, C As Range
Set Ws = Worksheets("Z")
    With GetObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .setText Ws.Range("n1")
        .putInClipboard
    End With
    MsgBox ("Les données ont été copiées")
    Application.EnableEvents = False
    Ws.Unprotect
        For Each C In Union(Ws.UsedRange.Columns("B"), Ws.UsedRange.Columns("D"))
            If WorksheetFunction.IsLogical(C) Then C.Value = False
        Next C
        Ws.Range("J1:M33").ClearContents
        Ws.Range("E37").ClearContents
    Ws.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, UserInterfaceOnly:=True
    Application.EnableEvents = True
End Sub
Merci beaucoup. Ca fonctionne mais ça me bloque lorsque je mets un mot de passe pour protéger ma feuille. Comment faire?
1745851659940.png


Merci pour votre aide
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
671
Retour