Reproduire la celluleactive d'une autre feuille

Bonjour,

Mon souci est sans doute très simple, mais je n'arrive pas à réaliser mon souhait. J'ai pratiquement tout essayé sans succès.

Je désire copier différentes cellules sur la base de la cellule active d'une autre feuille de mon dossier sans avoir à changer de feuille pour diminuer le temps de traitement de ma macro.

Les fonctions activecell et activecell.offset sont utilisables uniquement sur la feuille active. Par conséquent, quelle formule utiliser pour copier la valeur de de ces cellules ou incrémenter directement la valeur de la cellule de destination.

Exemple à transformer (qui fonctionne, mais trop long) :

Sheets("A"). select

M1=ActiveCell.Offset(0,2).Value

Sheets("B").select

ActiveCell.Offset(2,0) = M1

Sheets("A"). select

M1=ActiveCell.Offset(0,4).Value

Sheets("B"). select

ActiveCell.Offset(3,0) = M1

Sheets("A"). select

M1 = ActiveCell.Offset(0,5).Value

Sheets("B").select

ActiveCell.Offset(3,1) = M1

etc etc

par (qui ne fonctionne pas) :

Sheets("A"). ActiveCell.Offset(0,2).Copy

Sheets("B"). ActiveCell.Offset(2,0) = Paste

Sheets("A"). ActiveCell.Offset(0,4).Copy

Sheets("B"). ActiveCell.Offset(3,0) = Paste

Sheets("A"). ActiveCell.Offset(0,5).Copie

Sheets("B"). ActiveCell.Offset(3,1) = Paste

etc etc

ou mieux encore( et qui ne fonctionne toujours pas) :

Sheets("B"). ActiveCell.Offset(2,0)).value = Sheets("A").ActiveCell.Offset(0,2).value

Sheets("B"). ActiveCell.Offset(3,0).value = Sheets("A"). ActiveCell.Offset(0,4).value

Sheets("B"). ActiveCell.Offset(3,1).value = Sheets("A"). ActiveCell.Offset(0,5).value

etc etc

qui devrait être encore plus rapide.

Merci d'avance pour votre aide.

Bonjour,

Je pense que ce que tu devrais faire, c'est demander au début de la macro de sélectionner les cellules en question via une Inputbox :

Sub test()
Dim celDep as Range, celDest as Range

Set celDep = Application.InputBox("Choisir la cellule de départ.", "Choix", Type:=8)
Set celDest = Application.InputBox("Choisir la cellule de destination.", "Choix", Type:=8)
End Sub

tu pourrais ensuite directement appeler ces cellules, autre conseil pour optimisation, enregistre tes cellules que tu dois copier/traiter dans des tableaux VBA, ce sera bien plus rapide à faire tourner que passer à chaque fois par les cellules dont tu veux interroger les valeurs.

J'ai un point à préciser :

La fonction doit tourner en boucle sur la feuille A (il y a en réalité 1 feuille par mois, mais je traite mois par mois) et il y a environ 1500 lignes à traiter par mois, dont environ 60 à 80 lignes retenues (12 données + un tableau à reformer sur 3 séries de 8 chiffres dont il faut conserver le format des cellules) d'où la nécessité de traiter les données sur la base des cellules actives. Ces données sont ensuite retranscrites sur la feuille B sous forme de multiples tableaux.

Ce que tu dis m'interpelle, je vais paraître pénible mais pourrait-t-on repartir du début? tu dois en fait synthétiser des données de plein de tableaux qui vont se trouver apparemment sur un même fichier, tu vas consulter l'ensemble des lignes pour n'en garder que quelques unes.

Ce que je me demande, c'est à quoi va servir ta cellule active? ne peut on pas traiter tous tes tableaux de la première à la dernière ligne avec des critères pour savoir quelles lignes garder et synthétiser? en VBA on peut facilement enregistrer l'intégralité de chaque tableau de chaque feuille en obtenant automatiquement le numéro de la dernière ligne remplie du tableau, en faisant un traitement par tableau VBA on peut rapidement faire la synthèse à mon avis. Est-ce que quelque chose te bloque pour faire ça?

Ps: on ne voit pas ton fichier donc tu as peut-être des contraintes qu'on ne connais pas, dans le doute je demande quand même pourquoi tu en es arrivé à la solution de la cellule active...

La colonne A indique les dates du 1er au dernier jour du mois, mais indiquées seulement à la première ligne du jour. Il y a entre 40 et 70 lignes de données par jour. Les lignes sur lesquelles les données doivent être reprises dépendent de l'information des colonnes AW et AY de chaque ligne. Les données des lignes sont reprises pour former un tableau qui comprend certaines informations dont la date et 3 colonnes de chiffres en dessous.

Je pars donc de la première ligne et je mets une condition sur les cellules des colonnes AW et AY de chaque ligne. Selon le résultat de la condition, je prends ou pas une partie des données de la ligne que je transcris sur une feuille unique. Je suis parti comme cela et tout le reste fonctionne, mais il y a moins de données à traiter.

En fait, je récupère des statistiques sur le net en enregistrant la page entière. Ensuite, je récupère les données qui m'intéressent sur une feuille récapitulative par mois. et c'est de cette feuille que je dois ensuite reformer des tableaux. Compliqué

bonjour à tous

1/

récupérer des données du net : télécharge Power Query (inclus dans les Excel récents)

https://www.youtube.com/watch?v=gwW2CDdvUUs

puis

https://www.youtube.com/watch?v=2bYXvtpSeEg

2/

ne pas reporter de données d'une feuille à une autre (au clavier ou par macro)

faire des TCD basés sur les données de 1/

amitiés

Bonjour,

Il n'est pas nécessaire d'installer Power Query pour réaliser la chose.

La fonctionnalité (Web Query) est intégrée à Excel depuis des années.

Cdlt.

Pour récupérer les données, je n'ai pas de problèmes. Je fais un copier de la page et c'est ensuite coller et classé par macro . C'est plus simple et avec un clavier jeu et des touches qui permettent de réaliser direct les macros et les raccourcis, cela va assez vite. C'est après que cela se complique pour récréer mes tableaux et encore, c'est surtout pour la rapidité d'exécution .

Sans parler des erreurs de scripts sur la page web qui bloquent tout et en prime un site qui n’accepte pas la copie, c'est mort.

re

salut Jean-Eric

l'outil Web Query dans les anciennes versions d'Excel est maintenant dans Power Query, je crois ( ? )

alors il bien mieux charger et apprendre PQuery, pour préparer son propre avenir.

salut krysos,

1/

même si tu ne l'utilises pas encore, jette un oeil sur PQuery. Bien plus efficace pour récupérer des données de n'importe où qu'un mélange de clavier et de macros.

2/

concernant tes analyses de données, joins un peeeeeetit fichier exemple de 3 colonnes et 5 lignes, et le résultat attendu

à te relire

amitiés à tous

Bonjour,

en clair tu as déjà fait tout une partie de récupération automatique de valeurs à partir des données que tu trouves dans un site web pour enregistrer les informations dans un tableau, et tu veux pouvoir créer d'autres tableaux à partir de celui-ci?

Du coup je ne vois pas pourquoi tu dois utiliser activecell pour ton cas... comme je n'ai pas de solution pour ton activecell.

CORRECTION:

Je viens de trouver un équivalent de ActiveCell que l'on peut appeler sans avoir à activer la feuille!

Je te passe un fichier test:

20activecell.xlsm (13.67 Ko)

Le code:

Sub test()
Dim wks As Worksheet
For Each wks In ThisWorkbook.Worksheets
    MsgBox (wks.UsedRange)
Next wks
End Sub

Je ne connais la propriété UsedRange que depuis quelques minutes, je l'ai découvert par miracle elle n'existe que pour les objets Worksheet, les objets Sheet n'ont pas cette propriété.

Il te suffirait de faire:

Sub test()
Dim cel1 As Range, cel2 As Range

Set cel1 = Worksheets("A").UsedRange
Set cel2 = Worksheets("B").UsedRange
End Sub

ça te permettrait d'enregistrer dans des objets la plage active de chacune de tes feuilles, je te conseille en revanche d'enregitrer tes tableaux dans un tableau VBA avec:

tableau = Worksheets("A").UsedRange.Resize(10,10)

je te donne un exemple pour un tableau 10x10 qui commence par ta cellule active en s'étendant vers le coin inférieur droit.

Faire ça te permettra d'exécuter plus rapidement ton code qu'avec des offset

Rechercher des sujets similaires à "reproduire celluleactive feuille"