Comment utiliser le même code VBA en faisant référence à des feuilles différente [Résolu]

Signaler
Messages postés
42
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
26 septembre 2006
-
Messages postés
42
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
26 septembre 2006
-
bonjour,
je suis au bord de la dépression nerveuse... voici mon problème, qui concerne un développement vba dans Excel.

Je veux inscrire dans la cellule G4 dans une feuille qui se nomme "reporting", le total (inscrit dans la cellule H33) qui se trouve dans la feuille "orange janvier" (ça j'y arrive, pas de problème).
Là où ça se complique, c'est quand je crée la feuille "orange FEVRIER" car ma macro fait toujours référence à la feuille "orange janvier" ! Comment puis-je faire pour que cette macro comprenne qu'il faut qu'elle fasse référence à la feuille qui est en cours d'utilisation ?

Voici mon code actuel. Si je remplace "orange janvier" par activesheet ça ne marche pas!

sub reporting
Sheets("orange janvier").Select
range("H33").Select
Selection.Copy
Sheets("reporting").Select
range("G4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("orange janvier").Select
end sub

j'ai relu tout "vba excel pour les nuls" , j'ai exploré tout votre site et même la rubrique aide de Excel (pas trés claire quand on débute) et j'ai pas trouvé la réponse.
Pouvez vous m'aider ?

drine des iles

15 réponses

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
Avec tout ce qui t'a été dit au-dessus, en fouillant un peu l'aide en plus, tu as la solution. Mais bon, voici quand même un bout de code qui fera ce que tu veux faire (si j'ai bien compris) :

A insérer dans une macro
Mets toi sur la feuille dont tu veux reporter le chiffre (orange février dans ton exmple)
Quand tu lanceras la macro, le nom de cette feuille sera récupéré et le contenu de sa cellule H33 sera copié dans G4 de Reporting (au passage, j'ai simplifié ton code. J'aime pas l'assistance macro ^^)


Dim Temp As String
Temp = ActiveSheet.Name
Worksheets(Temp).Range("H33").Copy
Worksheets("reporting").Range("G4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

'Fin de sélection des données
Application.CutCopyMode = False


Voilà, à toi d'adapter à tes besoins maintenant.

Molenn
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
En relisant ScSami, je me rends compte qu'il y a même encore plus simple rhalalala :p

Dim Temp As String
Temp = ActiveSheet.Name
Worksheets("reporting").Range("G4").value = Worksheets(Temp).Range("H33").value

Et hop là ^^

(enfin, ça dépend parce que tu avais fait un collage spécial, ça veut peut être dire que tu veux prendre le format avec, ou que la formule ou que sais-je ... mais si tu ne veux que le chiffre-résultat, ça marche très bien comme ça aussi :)
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
489
Date d'inscription
mardi 16 novembre 2004
Statut
Membre
Dernière intervention
22 novembre 2007

En vba, on ne peut pas mettre de parametres dans les fonctions?
je veux dire par exemple Sub reporting (feuille as feuilleExel), enfin je ne sais pas si c'est possible, je ne fait pas de vba mais en vb c'est possible.
Comme ca, ta fonction te demanderai sur quelle feuille s'effectue ta macro.

Bon je t'avou que je ne suis pas sur de ce que je dit mais peut-etre est-ce possible..
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Tu n'es pas clair dans tes explications!!!
Si tu rajoutes une feuille Fevrier, que veux-tu faire au juste :
- Faire exactement la même chose qu'avec Janvier et écraser les données ???

Private Sub Reporting()
Sheets("reporting").Range("G4").Value = Sheets(" orange janvier ").Range("H33").Value
Sheets("reporting").Range("G 5 ").Value = Sheets("orange fevrier").Range("H33").Value
Sheets("orange fevrier").Activate
End Sub

Alors fait très attention à l'orthographe du nom des feuilles qui doit être parfaitement EXACTE.
Mais tu peux aussi utiliser l'index!!!

Sheets(3).Range("G4").Value = Sheets( 1 ).Range(" H33 ").Value
A condition que Reporting soit la feuille N°3 et que Janvier soit la N°1 !!!

Est-ce que cela répond à ta question ???

Enjoy

<hr size ="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
133
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
8 juin 2012
4
Bonjour,

Sub reporting()
[reporting!G4] = [H33]
End Sub

ctac
Messages postés
42
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
26 septembre 2006

La personne qui a répondu en premier à bien compris ma question mais ne me donne pas la réponse !!! snif.
Donc, je requalifie ma question pour être plus claire:
- je veux faire une macro qui copie des cellules d'une feuille lambda vers la feuille "reporting".
comment expliquer dans la macro que la feuille lambda est la feuille active du classeur(la feuille ouverte au moment où je demande à la macro de s'éxécuter) ?

j'espère que vous aurez pu me comprendre car je n'ai plus du tout d'idée pour réussir ce code.

drine des iles
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
ActiveSheet. ...
Tout simplement!!!
Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
42
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
26 septembre 2006

malheureusement ça ne marche pas !
car il considère que la feuille active est la feuille "reporting" ! impossible de lui faire entendre que activesheet est la feuille en cour d'utilisation !!!!

drine des iles
Messages postés
133
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
8 juin 2012
4
Bonjour,

ta feuille active étant orange janvier,
Tu lance la proc suivante:
Sub reporting()
[reporting!G4] = [H33]
End Sub
et la cellule G4 de la feuille reporting prend la valeur de la cellule H33 de la feuille active, ici orange janvier.
Si la feuille active est orange fevrier ... même chose ... mais la cellule G4 de la feuille reporting prends la valeur de H33 de orange fevrier.

ctac
Messages postés
1788
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
11 mars 2006
25
Bonsoir,

Au tout début de ta macro, si tu mets Sheets("lambda").Activate, celà doit rendre la feuille lamba active.



jpleroisse
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Non de di**

Ben active là cette feuille!!! Non mais!!!

Sheet("nom de ta put*** de feuille").Activate

ActiveSheet.DeleteToutOuFaitCeQueTuVeux !!!!!!!!!!

...

désolé...

Je me calme...

Bon, tant que tu ne nous donne pas ton code, on ne peut rien faire!
Mais je me demande vraiment si tu t'es donné la peinne de jeter rien qu'une moitié d'oeil dans l'aide!?!?!?!?

Bref, résumons parce que là j'ai franchement l'impression que tu n'as pas tout compris :

Sheet("nomDeLaFeuille")
c'est pareil que
Sheet(numéroDeLaFeuille)
(note que le numéro est un chiffre et qu'on parle plutôt d'Index)
Fait référence à une feuille précise.

ActiveSheet
Lui, fait référence à la seule feuille en cours.

Mais dans les deux cas ce n'est qu'une référence de type Sheets.

Bref, après il faut donner des instructions (méthode qu'on dit)...
.Activate est celle pour activer la feuille en référence.
Mais tu peux aussi faire référence à une cellule donné (c'est le même principe qu'avec les références aux feuilles).
Là il y a deux moyens :
.Range("A1") 'voire même .Range("A1:C3") pour une tranche
.Cells(y, x)
Mais ensuite il faut faire référence soit à une méthode de ces derniers objets (dits Range), soit à une propriété. Par défaut, évidemment, c'est la propriété .Value qui est utilisée (pour retourner la valeur contenue dans la cellule).

Mais bon, ça, tu dois le savoir!

Donc, tout ça pour dir qu'il est inutile de sélectionner une cellule, de la copier, ... puisque tu peux directement lui faire référence!!! C'est tout l'avantage du VBA !!!

J'espère avoir été clair même si j'en doute...

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Oh, désolé les gars, j'avais pas vu que vous aviez déjà répondu... désolé...

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Oui, et même, s'il veut la formule y'a la propriété .Formula au lieu de la propriété par défaut (.Value) !!!

Enjoy
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
23
Oui, et même, s'il veut la formule y'a la propriété .Formula au lieu de la propriété par défaut (.Value) !!!

Mais c'est bien résumé je trouve! Merci Molenn

Enjoy
Messages postés
42
Date d'inscription
mardi 10 janvier 2006
Statut
Membre
Dernière intervention
26 septembre 2006

Merci Molenn . J'ai validé ta réponse (mais il y a une erreur dans la page web ! Donc cela ne se voit pas ! décidemment...).

Je n'étais pas loin de la réponse mais je déclarai la sheet en temps qu'objet et non en string; de + , j'utilisai l'objet sheet et non worksheet dans la suite de mon code.
J'avais beau essayé tous les activesheet et activate et autres instructions, il me manquait ce petit détail ! Merci beaucoup.
désolée pour ceux que j'ai agacé et merci encore pour ce précieux coup de main, sans la solidarié d'internet je ne pourrais pas y arriver (j'habite un petit pays au milieu d'un grand océan où la documentation informatique est inexistante et même en les achetant sur internet je n'aurais pas été livrée avant plusieurs semaines).

Merci encore à tout le monde.
OUF !
drine des iles