Sélection multi-cellules

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

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
 
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
 
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
 
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
 
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+
 
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
 
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+
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
674
Réponses
40
Affichages
3 K
Réponses
2
Affichages
543
Réponses
7
Affichages
887
Retour