Demande précision sur Target.offset

  • Initiateur de la discussion Initiateur de la discussion dss
  • 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 !

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".
 
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 ?
 
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, @+
 
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

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

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

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.
 
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"
 
@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

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😀1") = 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 ?
 
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

- 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
4
Affichages
443
Réponses
2
Affichages
770
Retour