Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
J'ai trouvé et très legerement bidouillé un code qui permets en double cliquant sur une cellule de copier son contenu et de le coller vers une autre cellule avec clic droit..
C'est excellent mais je voudrai savoir comment etendre la selection selon la valeur d'une cellule adjacente.
J'ai joins un petit fichier car pas simple à expliquer
Dim Plage As Range
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'au double clic
Dim R As Range
If Target.Value = "" Then Exit Sub
Cancel = True 'évite le mode édition lié au double-clic
Set R = Target.Offset(0, 1)
If R <> 1 And R <> 2 And R <> 3 Then
Cancel = False
Exit Sub
End If
Set Plage = Target.Resize(R, 3)
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 'au clic droit
If Plage Is Nothing Then Exit Sub
Cancel = True 'évite le menu contextuel lié au clic droit
Plage.Cut Destination:=Target
Set Plage = Nothing
End Sub
En fait ca marche et j'en suis très heureux mais je comprends pas comment il detecte les plages qu'ils doit copier en fonction du 1 , 2 ou 3 dans la offset(0,1)??
Ca vient de resize(R,3) ???
Si tu avait encore un peu de temps...
la cellule sur la même ligne mais 1 colonne à droite de la Target
(Ex : si Target = C10 alors R = D10)
Code:
If R <> 1 And R <> 2 And R <> 3 Then
Cancel = False
Exit Sub
End If
Set Plage = Target.Resize(R, 3)
si la valeur de R est 1 ou 2 ou 3 alors le nombre de lignes de Target (Plage)
est redimensionné selon la valeur de R (1 ou 2 ou 3)
et le nombre de colonnes est redimensionné 3 (constante de 3 colonnes)
Je fais une petite incursion dans ce fil car j'aimerais reprendre la macro événementielle de Demouret ci-dessous.
Code:
Private val As String
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'au double clic
If Target.Value = "" Then Exit Sub
Cancel = True 'évite le mode édition lié au double-clic
val = Target.Value 'définit la variable val
Target.Value = "" 'vide la cellule double cliqué
End Sub
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 'au clic droit
If val = "" Then Exit Sub 'si la variable val est vide, sport de la procédure
Cancel = True 'évite le menu contextuel lié au clic droit
Target.Value = val 'place la valeur de la variable val dans la cellule
End Sub
Dans ce code, quelle instruction doit-on rajouter pour inhiber le coller avec le clic droit.
J'aimerais que l'on ne puisse pas effectuer un 2ème "Coller" suite au 1er.
PMO2 réalise cette action dans le code qu'il propose mais je n'arrive pas à l'adapter à celui de Demouret 😱
J'ai épuré le code de PMO2 et cela fonctionne, le voici tout simplement 🙂
Code:
Option Explicit
Dim Plage As Range
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'au double clic
If Target.Value = "" Then Exit Sub
Cancel = True 'évite le mode édition lié au double-clic
Set Plage = ActiveCell
End Sub
Code:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) 'au clic droit
If Plage Is Nothing Then Exit Sub
Cancel = True 'évite le menu contextuel lié au clic droit
Plage.Cut Destination:=Target
Set Plage = Nothing
End Sub
J'aimerais placé les 2 macros événementielles ci-dessus dans le ThisWorkbook.
Dans mon classeur, j'ai de nombreusses feuilles dont celles qui sont nommées avec un format date "dd mm yy" et j'aimerais que les macros ne s'appliquent qu'à celles ci.
Essayez avec le code suivant à mettre dans la fenêtre de code de ThisWorkbook
Code:
Dim Plage As Range
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'au double clic
'/// ajout Pmo ///
If Not IsDate(Sh.Name) Then Exit Sub
If NoFormatDate_ddmmyy(Sh.Name) Then Exit Sub
'/////////////////
If Target.Value = "" Then Exit Sub
Cancel = True 'évite le mode édition lié au double-clic
Set Plage = ActiveCell
End Sub
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'au clic droit
'/// ajout Pmo ///
If Not IsDate(Sh.Name) Then Exit Sub
If NoFormatDate_ddmmyy(Sh.Name) Then Exit Sub
'/////////////////
If Plage Is Nothing Then Exit Sub
Cancel = True 'évite le menu contextuel lié au clic droit
Plage.Cut Destination:=Target
Set Plage = Nothing
End Sub
Private Function NoFormatDate_ddmmyy(SheetName As String) As Boolean
If CStr(SheetName) <> Format(SheetName, "dd mm yy") Then NoFormatDate_ddmmyy = True
End Function
Dans les 2 macros événementielles, j'ai rajouté la ligne surlignée ci-dessous et c'est bon 🙄
Code:
'/// ajout Pmo ///
If Not IsDate(Sh.Name) Then Exit Sub
If NoFormatDate_ddmmyy(Sh.Name) Then Exit Sub
[B][COLOR=darkred]If Intersect(Target, Range("C4:M15")) Is Nothing Then Exit Sub[/COLOR][/B]
'/////////////////
Mais je reviens pour compléter l'évènement SheetBeforeRightClick 😉
Const CHAMP_VALIDE As String = "C4:M15"
Dim Plage As Range
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'au double clic
'/// ajout Pmo ///
Dim R As Range
Set R = Application.Intersect(Target, Range(CHAMP_VALIDE))
If R Is Nothing Then Exit Sub
If Not IsDate(Sh.Name) Then Exit Sub
If NoFormatDate_ddmmyy(Sh.Name) Then Exit Sub
'/////////////////
If Target.Value = "" Then Exit Sub
Cancel = True 'évite le mode édition lié au double-clic
Set Plage = ActiveCell
End Sub
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'au clic droit
'/// ajout Pmo ///
Dim R As Range
Set R = Application.Intersect(Target, Range(CHAMP_VALIDE))
If R Is Nothing Then Exit Sub
If Not IsDate(Sh.Name) Then Exit Sub
If NoFormatDate_ddmmyy(Sh.Name) Then Exit Sub
'/////////////////
If Plage Is Nothing Then Exit Sub
Cancel = True 'évite le menu contextuel lié au clic droit
Plage.Cut Destination:=Target
Set Plage = Nothing
End Sub
Private Function NoFormatDate_ddmmyy(SheetName As String) As Boolean
If CStr(SheetName) <> Format(SheetName, "dd mm yy") Then NoFormatDate_ddmmyy = True
End Function
Je reviens avec un fichier, ce sera plus clair.
Dans le ThisWorkbook, j'ai placé le code de PMO2 auquel j'ai intégré 1 série de tests dans le SheetBeforeRightClick.
Ci-dessous, les 2 instructions surlignées en bleu et rouge sont à modifier.
J'illustre par l'exemple le résultat souhaité :
Feuille "01 10 09", double-cliquez sur C9 puis cliquez droit sur D9 qui est une cellule non vide.
- 1 premier message apparait :
Si oui, le "Coller" s'effectue (Instruction en vert)
Si non, 1 deuxième message apparait et 2 nouveaux cas se présentent :
-----> Si oui, je conserve le contenu initial de la cellule pointée mais y insère le "coller" avant. (Instruction en bleu)
-----> Si non, je conserve le contenu initial de la cellule pointée mais y insère le "coller" après. (Instruction en rouge)
Dans ces 2 derniers cas, j'aimerais aussi placer un interligne Chr(10) pour aérer le contenu de la cellule.
Code:
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 'au clic droit
'/// ajout Pmo ///
Dim R As Range
Set R = Application.Intersect(Target, Range(CHAMP_VALIDE))
If R Is Nothing Then Exit Sub
If Not IsDate(Sh.Name) Then Exit Sub
If NoFormatDate_ddmmyy(Sh.Name) Then Exit Sub
'/////////////////
If Plage Is Nothing Then Exit Sub
Cancel = True 'évite le menu contextuel lié au clic droit
If ActiveCell <> "" Then
If MsgBox("Plage horaire déjà prise, voulez-vous remplacer la course déjà saisie ? ", vbYesNo + vbExclamation, "Attention :") = vbYes Then
[COLOR=darkgreen][B]Plage.Cut Destination:=Target[/B][/COLOR]
Else
If MsgBox("Voulez-vous la placer avant ?", vbYesNo + vbInformation, "Avant ou Après") = vbYes Then
[B][COLOR=blue]Plage.Cut Destination:=Target[/COLOR][/B]
Else
[COLOR=red][B]Plage.Cut Destination:=Target[/B][/COLOR]
End If
End If
Else
[COLOR=darkgreen][B]Plage.Cut Destination:=Target[/B][/COLOR]
End If
Set Plage = Nothing
End Sub
Je résume : lors du clic droit sur 1 cellule pleine, 3 choix peuvent s'opérer :
- "Coller" en remplaçant le contenu de la cellule pointée.
- Concaténer le "Coller" avant le contenu de la cellule pointée.
- Concaténer le "Coller" après le contenu de la cellule pointée.
- 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