Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Copier / Coller

Tioneb_h

XLDnaute Nouveau
Bonjour, je voudrais copier toutes les cellules déverrouillées non contiguës d’une feuille de calcul avec un bouton et coller les valeurs des cellules vers une autre feuille de calcul (autre fichier), MAIS à la même place ! Avec : Ctrl V
Quelqu’un peut m’aider ?
Merci d’avance pour votre aide
Ben
 

Tioneb_h

XLDnaute Nouveau
bonjour,

super... cela fonctionne
Comme est-ce que je peux faire avec également des cellules fusionnées (j'ai les deux) ? en sachant que Excel n'aime pas les fusions de cellules ?

bien à vous,
ben
 

Tioneb_h

XLDnaute Nouveau
bonjour,

super... cela fonctionne
Comme est-ce que je peux faire avec également des cellules fusionnées (j'ai les deux) ? en sachant que Excel n'aime pas les fusions de cellules ?

bien à vous,
ben
voici mon code :

VB:
Sub Verrouiller_Cellules_Idem_Fusionnées_Vides()

If ActiveWorkbook.ReadOnly = True Then
    ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite
    Range("A1:Q46").SpecialCells(xlCellTypeBlanks).Locked = True
    Else
    Range("A1:Q46").SpecialCells(xlCellTypeBlanks).Locked = True
End If

ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly

End Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour

Y aurait pas comme un problème de logique ?
SI Condition=VRAI alors VRAI sinon VRAI
Ce serait pas plutôt
SI Condition=VRAI alors VRAI sinon FAUX

VB:
Sub Verrouiller_Cellules_Idem_Fusionnées_Vides()

If ActiveWorkbook.ReadOnly = True Then
    ActiveWorkbook.ChangeFileAccess Mode:=xlReadWrite
    Range("A1:Q46").SpecialCells(xlCellTypeBlanks).Locked = True
    Else
    Range("A1:Q46").SpecialCells(xlCellTypeBlanks).Locked = True
End If
ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Et par rapport aux cellules fusionnées, ceci semble fonctionner
VB:
Sub Macro_test_ok()
Dim c As Range
For Each c In Range("A1:Q46").SpecialCells(xlCellTypeBlanks)
If c.MergeCells Then
c.MergeArea.Locked = True
Else
c.Locked = True
End If
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Tu auras remarqué le nom de ma macro, non ?
Macro_test_ok

Ce qui veut dire
1) que j'ai testé mon code avant de le poster ici
2) qu'il est donc fonctionnel

Par contre, tu peux écrire:
"je n'arrive pas à faire fonctionner ton code sur mon fichier"
Là, oui c'est possible.
 

Tioneb_h

XLDnaute Nouveau
je ne suis pas expert... voici un extrait de mon fichier pour voir.
 

Pièces jointes

  • test macro.xlsm
    60.7 KB · Affichages: 3

Staple1600

XLDnaute Barbatruc
Re

J'ai testé sur ton classeur
VB:
Sub Macro_test_ok()
Application.ScreenUpdating = False
Dim c As Range
For Each c In Range("C4:Q46").SpecialCells(xlCellTypeBlanks)
If c.MergeCells Then
c.MergeArea.Locked = True
Else
c.Locked = True
End If
Next
End Sub
Les cellules vides fusionnées ou pas voient leur propriété Verrouillée cochées.
(donc Locked=True)
Pour t'en convaincre, clic-droit sur la cellule C17 par exemple
(puis Format de cellule/Protection
La case Verrouillée est cochée, non ?
 

Tioneb_h

XLDnaute Nouveau
oui, la C17 est bien Verrouillée mais la G17 est également Verrouillée alors qu'elle n'est pas vide ?
 

Tioneb_h

XLDnaute Nouveau
Bonjour Robert,

J'ai modifié le code pour faire un copier/coller sur trois feuilles...
Maintenant il me fait un copier/coller avec un lien du fichier source ?! et plus un vrai copier/coller ;-(

Pouvez-vous m'aider
voici le code :

VB:
Private Sub CommandButton5_Click()

Dim CS As Workbook 'déclare la variable CS (Classeur source)

Dim OSM As Worksheet 'déclare la variable OSM (Onglet Source METRE)
Dim OSP As Worksheet 'déclare la variable OSP (Onglet Source PRIX DE VENTE)
Dim OSH As Worksheet 'déclare la variable OSH (Onglet Source HONORAIRES)

Dim F As FileDialog 'déclare la variable F (Fichier)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)

Dim ODM As Worksheet 'déclare la variable ODM (Onglet Destination METRE)
Dim ODP As Worksheet 'déclare la variable ODP (Onglet Destination PRIX DE VENTE)
Dim ODH As Worksheet 'déclare la variable ODH (Onglet Destination HONORAIRES)

Dim cel As Range 'déclare la variable CEL (CELlule)
Set CS = ThisWorkbook 'définit la classeur source CS

Set OSM = CS.Worksheets("METRE") 'définit l'onglet source OSM
Set OSP = CS.Worksheets("PRIX DE VENTE") 'définit l'onglet source OSP
Set OSH = CS.Worksheets("HONORAIRES") 'définit l'onglet source OSH

Set F = Application.FileDialog(msoFileDialogOpen) 'définit le fichier F (à l'aide de la boîte de dialogue [Ouvrir])
F.Show 'affiche la boîte de dialogue
If F.SelectedItems.Count > 0 Then 'condition si au moins un fichier est sélectionné
    Workbooks.Open (F.SelectedItems(1)) 'ouvre le fichier sélectionné
Else 'sinon
    Exit Sub 'sort de la procédure
End If
Set CD = ActiveWorkbook 'définit le classeur destination CD

Set ODM = CD.Worksheets("METRE") 'définit l'onglet destination ODM
For Each cel In OSM.UsedRange 'boucle sur toutes les cellules CEL de la plage éditée de l'onglet OSM
    'si la cellule est déverrouillée, copy la cellule dans l'onglet ODM à la même adresse
    If cel.Locked = False Then cel.MergeArea.Copy ODM.Range(cel.MergeArea.Address)
Next cel 'prochaine celllue de la boucle

Set ODP = CD.Worksheets("PRIX DE VENTE") 'définit l'onglet destination ODP
For Each cel In OSP.UsedRange 'boucle sur toutes les cellules CEL de la plage éditée de l'onglet OSP
    'si la cellule est déverrouillée, copy la cellule dans l'onglet ODP à la même adresse
    If cel.Locked = False Then cel.MergeArea.Copy ODP.Range(cel.MergeArea.Address)
Next cel 'prochaine celllue de la boucle

Set ODH = CD.Worksheets("HONORAIRES") 'définit l'onglet destination ODH
For Each cel In OSH.UsedRange 'boucle sur toutes les cellules CEL de la plage éditée de l'onglet OSH
    'si la cellule est déverrouillée, copy la cellule dans l'onglet ODH à la même adresse
    If cel.Locked = False Then cel.MergeArea.Copy ODH.Range(cel.MergeArea.Address)
Next cel 'prochaine celllue de la boucle

End Sub

Benoît
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…