Sélection multi-cellules

C

Charles-Kat

Guest
Bonsoir tout le monde,

Je sais c'est une question classique mais je ne sais pas pourquoi ça ne marche pas chez moi. En fait, Range n'a jamais été mon ami. Ca n'a jamais marché.
Je voudrais juste sélectionner deux cellules de coordonnées variables mais il ne comprend pas :

For i = 3 To Ind
Classeur1.Activate
If Classeur1.Cells(i, num_colonne_auj) = lettre_auj Then
Range(Calendrier.Cells(i, 1), Calendrier.Cells(i, 2)).Select
Selection.Copy
Classeur2.Activate
Range("B6").Select
ActiveSheet.Paste
End If
Next i

Et il me plante sur le Range. Je n'arrive pas à faire un select de plusieurs cellules disjointes. Il semblerait que la solution est dans la fonction Range mais ça ne marche pas, ce n'est pas faute d'avoir cherché de l'aide et essayé.

Un grand merci à mon futur sauveur par avance,

Et une très bonne soirée à toutes et à tous,

Charles
 
C

CHti160

Guest
Salut"Charles-kat"
bonsoir le"FORUM"

If Classeur1.Cells(i, num_colonne_auj) = lettre_auj Then
ici je ne sais pas ce qu'est calendrier si c'est une feuille il faut d'abord la selectionner et ensuite selectionner la plage
Exemple
sheets("calendrier").select
Range(Cells(i, 1), Cells(i, 2)).Select
Selection.Copy

si biensur calendrier est une feuille
A+++
Jean Marie
 
Y

Yeahou

Guest
Salut Charles-kat, Chti160, le forum

En respectant ta logique, mais ce serait beaucoup plus simple en référant aux classeurs/feuilles plutôt qu'aux classeurs tous seuls. Tu pourrais te passer d'activate et de select.

Cordialement, A+

For i = 3 To Ind
Classeur1.Activate
If ActiveSheet.Cells(i, num_colonne_auj) = lettre_auj Then
ActiveSheet.Range(ActiveSheet.Cells(i, 1).Address & ":" & ActiveSheet.Cells(i, 2).Address).Copy
Classeur2.Activate
ActiveSheet.Range("B6").Select
ActiveSheet.Paste
End If
Next i
 
C

Charles-Kat

Guest
Merci beaucoup à vous deux !!

CHtil60, même en sélectionnant la feuille ça ne marche pas, c'est-à-dire en faisant:
For i = 3 To Ind
Classeur1.Activate
If Classeur1.Cells(i, num_colonne_auj) = lettre_auj Then
Classeur1.Select
Range(Cells(i, 1), Cells(i, 2)).Select
Selection.Copy
Classeur2.Activate
Range("B6").Select
ActiveSheet.Paste
End If
Next i

Je ne comprends vraiment pas pourquoi.

En revanche, la méthode de Yeahou, ça marche très bien !

Merci pour votre aide et très bonne soirée,

Charles
 
Y

Yeahou

Guest
Re bonjour Charles Kat

Ma méthode fonctionne car l'imbrication des objets y est correcte

Je pense que tu fais une confusion Classeur/Feuilles.
La syntaxe complète d'une plage comprend la feuille et est du type

Workbooks("Classeurs1.xls").Sheets("Feuil1").Range("A1")

tu as un classeur qui contient des feuilles qui contiennent des plages de cellules. Dans ton code, tu ne sélectionnes jamais de feuilles, tu actives des classeurs et travailles sur la feuille active par défaut ce qui est un peu réducteur. Cela m'a obligé, ne connaissant pas les noms de feuilles, à rester sur activesheet (que j'ai inscrit pour ne plus qu'il soit déduit) pour produire un code fonctionnel. En connaissant les noms de feuilles, on pourrait faire de l'adressage direct et descendre à 3 lignes de codes pour le même fonctionnel ( en plus rapide ).

Cordialement, A+
 
C

Charles-Kat

Guest
Bonjour,

Mea Culpa, je me suis trompé dans mon message. Je ne mentionne jamais en réalité les classeurs, il fallait lire dans mon code :

For i = 3 To Ind
Feuille1.Activate
If Feuille1.Cells(i, num_colonne_auj) = lettre_auj Then
Feuille1.Select
Range(Cells(i, 1), Cells(i, 2)).Select
Selection.Copy
Feuille2.Activate
Range("B6").Select
ActiveSheet.Paste
End If
Next i

C'est donc ces lignes de code que j'ai tapées et qui ne marchent pas. Sachant que Feuille1 et Feuille2 ont été définies au départ par un simple

Set Feuille1 = ThisWorkbook.Worksheets ("Feuille1")

Voilà donc la situation.
Merci encore.

Charles
 
Y

Yeahou

Guest
Re Bonjour

Donc tu peux faire la même chose avec

For i = 3 To Ind
If Feuille1.Cells(i, num_colonne_auj) = lettre_auj Then Feuille1.Range(Feuille1.Cells(i, 1).Address & ":" & Feuille1.Cells(i, 2).Address).Copy Destination:= Feuille2.Range("B6")
Next i

qui marchera tout aussi bien en étant plus rapide

Cordialement, A+
 

Discussions similaires

Réponses
7
Affichages
467
Réponses
7
Affichages
487

Statistiques des forums

Discussions
313 099
Messages
2 095 237
Membres
106 234
dernier inscrit
JESS97354