drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006
-
16 janv. 2006 à 16:22
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006
-
17 janv. 2006 à 19:52
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 ?
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 17 janv. 2006 à 11:27
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
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 17 janv. 2006 à 11:47
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 :)
malhivertman1
Messages postés489Date d'inscriptionmardi 16 novembre 2004StatutMembreDernière intervention22 novembre 20071 16 janv. 2006 à 16:46
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..
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 16 janv. 2006 à 18:10
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". )
Vous n’avez pas trouvé la réponse que vous recherchez ?
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 16 janv. 2006 à 18:56
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és42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 16 janv. 2006 à 20:48
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 !!!!
CTAC
Messages postés133Date d'inscriptionmardi 24 décembre 2002StatutMembreDernière intervention 8 juin 20125 16 janv. 2006 à 21:00
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.
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". )
drine des iles
Messages postés42Date d'inscriptionmardi 10 janvier 2006StatutMembreDernière intervention26 septembre 2006 17 janv. 2006 à 19:52
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