VBA - copier-coller certaines lignes

Bonjour,

J'utilise le code ci-dessous pour copier-coller en valeurs les données d'une colonne sélectionnée par un double-clique.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

' Placer le curseur sur le Mois Choisi - Ligne 5

' et faire in double-clic...

If Target.Column < 5 Or Target.Column > 16 Then Exit Sub

If Target.Row < 5 Then Exit Sub

With Target

Range(Cells(7, .Column), Cells(514, .Column)).Value = Range(Cells(7, .Column), Cells(514, .Column)).Value

End With

Cancel = True

End Sub

Ce code s'applique sur la colonne que je sélectionne et de la ligne 7 à 514.

J'aimerais que ce code ne s'applique que sur certaines lignes non consécutives :

exemple : toutes les 3 lignes de la ligne 8 à la ligne 95.

J'ai essayé d'utiliser le code ci-dessous pour nommer ma plage de lignes mais je ne sais pas comment intégrer cette variable dans le Range(Cells( , .Column)

Dim A as Integer

Dim x as Long

Dim y as Long

x = 8

y = 95

For A = x to y Step 3

Si je souhaite créer plusieurs variables pour gérer plusieurs plages de cellules, faut-il intégrer ces variables dans le même Range() ?

Mes variables seraient les suivantes :

B = ligne 223 à 310

C = ligne 324 à 411

D = ligne 728 à 815

D'avance merci

Jean-Philippe

Salut JP,

faudra que tu m'expliques l'utilité de ceci :

Range(Cells(7, .Column), Cells(514, .Column)).Value = Range(Cells(7, .Column), Cells(514, .Column)).Value

Pour le reste, une façon de faire :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Cancel = True
For x = 1 To 4
    x1 = Choose(x, 8, 223, 324, 728)
    y1 = Choose(x, 95, 310, 411, 815)
    For y = x1 To y1 Step 3
        Cells(y, 1) = y
    Next
Next
'
End Sub

A+

Bonjour curulis57,

Merci pour ton retour

La ligne Range(Cells(7, .Column), Cells(514, .Column)).Value = Range(Cells(7, .Column), Cells(514, .Column)).Value sert à copier-coller en valeurs de la ligne 7 à la ligne 514 de la colonne sélectionnée par le double-clic.

C'est dans cette instruction que je souhaiterais délimiter des plages de lignes (8 à 95 toutes les 3 lignes par exemple) pour éviter que toutes les lignes de 7 à 514 soient transformées en valeurs.

Du coup, je ne sais pas comment utiliser ton code

Jean-Philippe

Salut JP,

et moi, je ne sais pas où il faut copier les valeurs car...

Range(Cells(7, .Column), Cells(514, .Column)).Value = Range(Cells(7, .Column), Cells(514, .Column)).Value

... copie sur elles-mêmes les valeurs des cellules rencontrées dans la colonne sélectionnée!!!

Autre chose bizarre : tu sembles vouloir limiter ta boucle à 514 mais une des plages court de 728 à 815!!!

Dans le code corrigé ci-dessous, la macro copie en colonne [A] les valeurs rencontrées toutes les 3 lignes dans les plages successives de la colonne sélectionnée par un double-clic.

Tu peux changer la colonne de destination des copies ici, en changeant 1 (A) par ce qui est nécessaire.

Cells(y, 1) = Cells(y, iCol)

Code à coller tel quel dans le module de la feuille concernée.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Cancel = True
iCol = Target.Column
'
For x = 1 To 4
    x1 = Choose(x, 8, 223, 324, 728)
    y1 = Choose(x, 95, 310, 411, 815)
    For y = x1 To y1 Step 3
        Cells(y, 1) = Cells(y, iCol)
    Next
Next
'
End Sub

J'attends tes précisions quant à la destination des valeurs à copier en fonction de la colonne sélectionnée.

A+

Bonjour,

en adaptant le code de Curilis que je salue, voici comment recopier le résultat des formules sur la même cellule pour les intervalles demandés

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Cancel = True
iCol = Target.Column
'
For x = 1 To 4
    x1 = Choose(x, 8, 223, 324, 728)
    y1 = Choose(x, 95, 310, 411, 815)
    For y = x1 To y1 Step 3
        Cells(y, icol).value = Cells(y, iCol).value
    Next
Next

End Sub
 

Merci curulis57,

Le copier-coller doit bien s'effectuer sur les valeurs rencontrées sur la colonne sélectionnée (double-clic).

Dans un premier message/fichier, j'avais pris un exemple qui traitait des lignes 7 à 514, d'où le code.

C'est par la suite que j'ai cherché à adapter à de nouvelles plages.

Explication très claire, j'ai donc remplacé dans le code :

Cells(y, 1) = Cells(y, iCol) par Cells(y, iCol) = Cells(y, iCol) et j'obtiens le résultat attendu.

Merci

Jean-Philippe

Salut JP,

c'étaient donc bien des valeurs de formules à copier en valeur comme l'a deviné H2SO4 ( ) ?

Bien vu, H2SO4!

A+

Rechercher des sujets similaires à "vba copier coller certaines lignes"