Demande précision sur Target.offset

dss

XLDnaute Occasionnel
Bonsoir le forum,

J'ai le code suivant :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 11 And Target.Row Then
Target.Offset(0, -2).ClearContents (Message debogueur feuille protégée).Effectivement les lignes au-dessus de la ligne concernée (target.row) sont protégées une fois validées.


J'ai absolument besoin de protéger chaque ligne qui a été validée : Au niveau de Target.offset, y a t il possibilité de spécifier que le (0, -2) s'applique uniquement sur la ligne concernée (target.row) qui elle n'est pas encore validée et protégée par "Protect".
 

Ommagawi

XLDnaute Junior
Bonjour,
Voila ma ligne de commande sur la feuille 3
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then

Range(Target, Target.Offset(0, 2)).Copy Sheets("Feuil4").Range("A1")
Sheets("Feuil4").Activate
End If
End Sub
Feuil3


1​
France
2​
Autralie
3​
Etat-Unis
4​
Belgique
5​
Espane
6​
Allemagne
7​
Suisse
8​
Viet Nam
0​

Normalement, quand je clic sur A4 (4, Belgique) je devrais avoir sur Feuil4 en A1 et B1 la même chose. Or, sur B1 ça me renvoie systématiquement France !
Pourquoi ?
Où est l'erreur ?
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour ommagawi, le forum

@Ommagawi , bienvenue sur Xld, tu n'aurais pas dû déterrer un fil de 2008 pour cela mais faire une nouvelle discussion.
essayes avec ce code
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then
Target.Range("A1:C1").Copy Sheets("Feuil4").Range("A1")
Sheets("Feuil4").Activate
End If
End Sub
Sans cela, comme c'est ton premier post, je te conseille un détour par la Charte Xld qui t'apprendra les us et coutumes du forum.

Bien cordialement, @+
 

Ommagawi

XLDnaute Junior
Bonjour ommagawi, le forum

@Ommagawi , bienvenue sur Xld, tu n'aurais pas dû déterrer un fil de 2008 pour cela mais faire une nouvelle discussion.
essayes avec ce code
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then
Target.Range("A1:C1").Copy Sheets("Feuil4").Range("A1")
Sheets("Feuil4").Activate
End If
End Sub
Sans cela, comme c'est ton premier post, je te conseille un détour par la Charte Xld qui t'apprendra les us et coutumes du forum.

Bien cordialement, @+
Merci Yeahou
J'ai oublié de préciser que les pays viennent d'une autre feuille Pays ! Apparemment ça ne marche pas !
Je prends connaissance de la charte tout de suite.
Encore merci.
 

Pièces jointes

  • Exercice macro double clic.xlsm
    72.8 KB · Affichages: 6

job75

XLDnaute Barbatruc
Bonjour Ommagawi, Yeahou, Bernard,

Il faut copier seulement les valeurs :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then
    Sheets("Feuil4").Range("A1:D1") = Target.Resize(, 4).Value
    Sheets("Feuil4").Activate
End If
End Sub
A+
 

Pièces jointes

  • Exercice macro double clic(1).xlsm
    78.4 KB · Affichages: 1

soan

XLDnaute Barbatruc
Inactif
Bonjour Ommagawi, le fil,

bienvenue sur le site XLD ! 🥳

note que "Feuil4" est vide ; va sur "Feuil3", et en colonne A,
fait un double-clic sur la valeur de ton choix. :)

VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim lg1&, lg2&: Cancel = True
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 1 Then Exit Sub
    If .Value = "" Then Exit Sub
    lg1 = .Row
  End With
  With Worksheets("Feuil4")
    lg2 = .Cells(Rows.Count, 1).End(3).Row + 1
    If IsEmpty(.[A1]) Then lg2 = lg2 - 1
    Cells(lg1, 1).Resize(, 4).Copy
    .Cells(lg2, 1).PasteSpecial -4163
    Application.CutCopyMode = 0
    Application.Goto .[F1]: .Select
  End With
End Sub

si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. ;)

soan
 

Pièces jointes

  • Exercice macro double clic.xlsm
    78.9 KB · Affichages: 0

Ommagawi

XLDnaute Junior
Bonjour soan,
Ton code fonctionne mais le résultat ne se met pas dans la ligne 1.
A chaque demande ça incrémente une nouvelle ligne et je souhaiterai que la réponse écrase la précédente.
Est ce possible ?
Et merci à tous de vous être intéressé à ma problématique.
 

Dranreb

XLDnaute Barbatruc
Quand je rajoute Feuil6.[D1].FormulaR1C1 = "=OFFSET(Pays!R1C1,RC3,0)"
le résultat me renvoi "=OFFSET(Pays!R1C1,RC3,0)" en colonne D Pays.
Je ne comprends pas de quoi vous parlez. Sur le classeur que vous aviez joint ça met en 'Feuil4'!D1 :
Code:
=DECALER(Pays!$A$1;$C1;0)
Dans le module de l'objet Worksheet Feuil5 qui resprésente la feuille Excel "Feuil3" :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   If Target.Column = 1 Then
      Target.Range("A1:C1").Copy Sheets("Feuil4").Range("A1")
      Sheets("Feuil4").Activate
      Feuil6.[D1].FormulaR1C1 = "=OFFSET(Pays!R1C1,RC3,0)"
      End If
   End Sub
Remarque: Feui6 est l'objet Worksheet qui représente la feuille Excel "Feuil4"
 

soan

XLDnaute Barbatruc
Inactif
@Ommagawi

tu as écrit : « je souhaiterai que la réponse écrase la précédente. Est ce possible ? »

oui, c'est fait dans le fichier joint. :)

VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim lig&: Cancel = True
  With Target
    If .CountLarge > 1 Then Exit Sub
    If .Column <> 1 Then Exit Sub
    If .Value = "" Then Exit Sub
    lig = .Row
  End With
  With Worksheets("Feuil4")
    Cells(lig, 1).Resize(, 4).Copy: .[A1].PasteSpecial -4163
    Application.CutCopyMode = 0: Application.Goto .[F1]
    .Select
  End With
End Sub

soan
 

Pièces jointes

  • Exercice macro double clic.xlsm
    78.7 KB · Affichages: 1

Ommagawi

XLDnaute Junior
Encore une question,
Voila mon code
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 Then
Sheets("Feuil4").Range("A1:D1") = Target.Resize(, 4).Value
Sheets("Feuil4").Activate
End If
End Sub
Je voudrais que Target.Colomn= 4
et que les cellules copier soient les quatre précédentes et pas les quatre suivantes.
Est ce possible ?
 

job75

XLDnaute Barbatruc
Je voudrais que Target.Colomn= 4
Donc vous utilisez ma solution, c'est simple, voyez le fichier (2) avec :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 4 Then
    Sheets("Feuil4").Range("A1:D1") = Target(1, -2).Resize(, 4).Value
    Sheets("Feuil4").Activate
End If
End Sub
 

Pièces jointes

  • Exercice macro double clic(2).xlsm
    78.5 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 349
Membres
102 868
dernier inscrit
JJV