code pour sélectionner cellules non adjacentes

Olivier_HTP

XLDnaute Occasionnel
Bonsoir le Forum,

Je voudrais modifier le morceau de macro suivant de façon à ce qu'elle ne me sélectionne pas seulement la plage allant de la colonne C à la colonne L, mais cette même plage ET la cellule de la colonne P .

Dim DerLigne As Long, DerL As Long, Coll As Long
Dim Cl As Range
Application.ScreenUpdating = False
Sheets('LISTES').Select
DerLigne = Range('AB65536').End(xlUp).Row
For Each Cl In Range('AB1:AB' & CStr(DerLigne))
If Cl.Value = 'X' Then
Cl.Select
Coll = ActiveCell.Row
Range('C' & CStr(Coll) & ':L' & CStr(Coll)).Select
Selection.Copy

Merci d'avance à ceux qui voudront bien me renseigner.

Bonne fin de week-end bonne soirée à tous.

Olivier_HTP
 

Olivier_HTP

XLDnaute Occasionnel
Bonsoir Hervé,

et merci de ta réponse rapide.

Je viens d'essayer mais ça ne colle plus rien du tout dans les cellules de destination.

Je te mets ci-dessous le code modifié selon tes conseils :

Dim DerLigne As Long, DerL As Long, Coll As Long
Dim Cl As Range
Application.ScreenUpdating = False
Sheets('LISTES').Select
DerLigne = Range('AB65536').End(xlUp).Row
For Each Cl In Range('AB1:AB' & CStr(DerLigne))
If Cl.Value = 'X' Then
Cl.Select
Coll = ActiveCell.Row
'Range('C' & CStr(Coll) & ':L' & CStr(Coll)).Select

Union(Range('C' & CStr(Coll) & ':L' & CStr(Coll)), Range('Q' & CStr(Coll))).SelectSelection.Copy

Sheets('SAISIE').Select
DerL = Range('F65536').End(xlUp).Offset(1, 0).Row
'Range('C' & CStr(DerL) & ':L' & CStr(DerL)).Select

Union(Range('C' & CStr(Coll) & ':L' & CStr(Coll)), Range('Q' & CStr(Coll))).Select
'Collage spécial pour ne pas modifier la MFC de la feuille SAISIE :
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

End If
Application.CutCopyMode = False

Quelque chose cloche, mais quoi ?
(Précision : ce code fonctionnait avant modification quand il s'agissait de sélectionner et de coller la plage allant de C à L)

Merci de ton aide et bonne soirée.

Olivier_HTP
 

Hervé

XLDnaute Barbatruc
Re olivier

Ton souci ne vient pas du copié, mais du collé. Tu ne peux pas coller sur une plage multiple, j'ai donc modifié le code du collé.

De plus je me suis permis de mettre quelque annotations sur des lignes qui me paraissent bizarre.

Enfin, tu n'es pas obligé de sélectionner des feuilles ou des cellules pour travailler avec elles.

Dim DerLigne As Long, DerL As Long, Coll As Long
Dim Cl As Range
Application.ScreenUpdating =
False
Sheets('LISTES').Select
DerLigne = Range('AB65536').End(xlUp).Row
For Each Cl In Range('AB1:AB' & CStr(DerLigne))

If Cl.Value = 'X' Then
MsgBox Cl.Address
Cl.Select
Coll = ActiveCell.Row

Union(Range('C' & CStr(Coll) & ':L' & CStr(Coll)), Range('Q' & CStr(Coll))).Select
Selection.Copy

Sheets('SAISIE').Select
DerL = Range('F65536').End(xlUp).Offset(1, 0).Row
'<=====ICI tu scannes ta colonne F, mais tu colles en colonne C ?

Range('C' & CStr(Coll)).Select
'<========= ICI tu ne fais pas référence à Derl ?
'Collage spécial pour ne pas modifier la MFC de la feuille SAISIE :
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

End If
Sheets('LISTES').Select
'<==== ICI j'ai rajouté cette ligne pour pouvoir resélectionner Cl
Application.CutCopyMode =
False
Next Cl '<=====================ICI il manquait le next Cl


Salut
 

Olivier_HTP

XLDnaute Occasionnel
Merci Hervé pour ta patience.

Je vais essayer ça et te dirai ce qu'il en est demain.

Pour répondre brièvement à tes questions, je scanne sciemment sur F car c'est la seule colonne qui me permette de déterminer la dernière ligne 'efficace', même si la zone de copier/coller va de C à L.

Je ne comprends pas très bien ta question sur la référence à Derl, car à cet endroit là de la macro d'origine il y a bien :
Range('C' & CStr(DerL) & ':L' & CStr(DerL)).Select, et non pas Cstr (Coll) comme tu me l'écris.

Pardonne moi, je suis un peu en surrégime là, alors je patauge dans la semoule !

Quant au next Cl, il est plus loin dans la macro et ne figurait pas sur le début que j'avais seulement mis. Mais merci de me l'avoir signalé. Ca prouve que rien ne t'échappe... Lol

Bonne soirée et à demain.

Olivier_HTP
 
O

Olivier_HTP

Guest
Bonjour Hervé et le Forum .... sweet Home, ;)

Hervé, j'ai essayé ton code mais je n'arrive à plus rien coller du tout....
Excuse moi, je dois être bouché, mais je ne vois pas où tu as modifié le code du 'collé'?
et je ne comprends pas à quoi sert la Msgbox.

La macro que j'ai mise étant incomplète, je mets ci-dessous, la macro d'origine, qui tourne bien depuis plus d'un an, et qui donc copie (par collage spécial) sur la feuille 'saisie' la plage des colonnes adjacentes C:L copiée depuis la feuille 'listes' :

Dim DerLigne As Long, DerL As Long, Coll As Long
Dim Cl As Range
Application.ScreenUpdating = False
Sheets('LISTES').Select
DerLigne = Range('AB65536').End(xlUp).Row
For Each Cl In Range('AB1:AB' & CStr(DerLigne))
If Cl.Value = 'X' Then
Cl.Select
Coll = ActiveCell.Row
Range('C' & CStr(Coll) & ':L' & CStr(Coll)).Select
Selection.Copy
Sheets('SAISIE').Select
DerL = Range('F65536').End(xlUp).Offset(1, 0).Row
Range('C' & CStr(DerL) & ':L' & CStr(DerL)).Select

'Collage spécial pour ne pas modifier la MFC de la feuille SAISIE :
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
Application.CutCopyMode = False
Sheets('LISTES').Select
Next
Application.Run 'RESET'
Sheets('SAISIE').Select
Application.Run 'DERNIERE_LIGNE'
Application.ScreenUpdating = True
End Sub

Je voudrais que la nouvelle macro fasse la même chose, à la différence que la plage à copier pour chaque ligne sélectionnée dans la feuille 'listes', comprend la plage C à L ET en plus la colonne Q.
Le tout étant à coller dans la feuille 'saisie' dans la plage C:L ET dans la colonne Q.(afin de ne pas écraser le contenu des colonnes M:p, le contenu de celles-ci n'étant pas le même dans les 2 feuilles)

J'espère avoir été plus précis que précédemment.

Merci de ton aide.

Bonne fin de journée,

Olivier_HTP
 

Hervé

XLDnaute Barbatruc
bonjour olivier

BONNE FETE :)

Si tu ne veux pas ecraser les colonnes M,N,O de la feuille saisie, tu dois doubler ton action de copié coller.

Une fois pour les colonnes C à L, et une deuxième fois pour la cellule de la colonne P.

sait ce que j'ai fais dans le code.

Code:
Dim DerLigne As Long, DerL As Long, Coll As Long
Dim Cl As Range
Application.ScreenUpdating = False
Sheets('LISTES').Select
DerLigne = Range('AB65536').End(xlUp).Row
For Each Cl In Range('AB1:AB' & CStr(DerLigne))
    If Cl.Value = 'X' Then
        Cl.Select
        Coll = ActiveCell.Row
        Range('C' & CStr(Coll) & ':L' & CStr(Coll)).Select
        Selection.Copy
        Sheets('SAISIE').Select
        DerL = Range('F65536').End(xlUp).Offset(1, 0).Row
        Range('C' & CStr(DerL) & ':L' & CStr(DerL)).Select
        
        'Collage spécial pour ne pas modifier la MFC de la feuille SAISIE :
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        '*****************************************
        Sheets('LISTES').Select
        Range('P' & CStr(Coll)).Copy
        Sheets('SAISIE').Select
        Range('P' & CStr(DerL)).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
        '*****************************************
    End If
Application.CutCopyMode = False
Sheets('LISTES').Select
Next
Application.Run 'RESET'
Sheets('SAISIE').Select
Application.Run 'DERNIERE_LIGNE'
Application.ScreenUpdating = True


A toi d'essayer.

Salut
 

2passage

XLDnaute Impliqué
Bonjour,

Je débarque un peu mais.. sans vouloir m'immiscer... la syntaxe suivant est bien aussi pour des sélections multiples :

Code:
Range('C:L, P:P').Select

Quant à l'écrasement des M, N, O... je suis OK avec Hervé : autant le faire en 2 fois

A+

Edit : mise en <code> anti smiley automatique :p

Message édité par: 2passage, à: 12/07/2005 16:00
 

Olivier_HTP

XLDnaute Occasionnel
Merci Hervé et 2passage,

Hervé, c'est ma Fête (et je te remercie d'y avoir pensé...) mais poutant c'est toi qui dégustes, et à cause de moi !

Mais ça y est : CA MARCHE !
(J'ai juste remplacé 'P' par 'Q', pour la deuxième sélection. Ca j'ai su faire.... c'est juste pour t'embêter).

Un grand merci à toi.

Bonne soirée.

Olivier_HTP
 

Discussions similaires

Réponses
7
Affichages
410
Réponses
2
Affichages
315
Réponses
3
Affichages
561

Statistiques des forums

Discussions
312 493
Messages
2 088 959
Membres
103 990
dernier inscrit
lamiadebz