Mise à jour de valeur avec un tableau

Résolu/Fermé
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 - 12 nov. 2011 à 12:56
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 - 13 nov. 2011 à 10:03
Bonjour à tous,

Dans un classeur de 40 feuilles, j'ai besoin de mettre à jour certaines valeurs de façon régulière. A chaque fois j'ai quatre cellules par feuille à modifier. Pour une feuille ces cellules sont toujours les mêmes mais ne se trouvent pas forcément au même endroit d'une feuille à l'autre.
Manuellement c'est un travail long et fastidieux à chaque fois où le risque d'erreur n'est pas négligeable.
J'ai pensé utiliser une macro qui utiliserait un tableau qui lui contiendrait toutes les valeurs et qui pourrait avoir la forme suivante :

Colonne A le nom de la feuille
Colonne B le non de la 1er cellule
Colonne C la valeur de la 1ere cellule
Colonne B le non de la 2iem cellule
Colonne C la valeur de la 2iem cellule
Colonne B le non de la 3iem cellule
Colonne C la valeur de la 3iem cellule
Colonne B le non de la 4iem cellule
Colonne C la valeur de la 4iem cellule

Mon souci c'est que je n'ai aucune idée sur la manière d'aborder et de réaliser « la chose ».

Pouvez-vous m'aider.
D'avance merci.
Mistral
A voir également:

10 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 216
Modifié par eriiic le 12/11/2011 à 13:21
Bonjour,

Et pourquoi pas tout simplement dans tes feuilles mettre :
='ta feuille de parametres'!B1
='ta feuille de parametres'!C1
...
et ce pour les 4 cellules.

Tu peux aussi nommer toutes ces cellules de paramètre en bloc avec 'créer nom', pour peu qu'il y ait des titres de colonne et de ligne, et :
=nomLigne nomColonne
te ramène le paramètre à l'intersection.

eric
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
12 nov. 2011 à 14:09
Bonjour Eric,
Pourquoi pas effectivement ...
Mais il me faut le faire pour les 40 feuilles alors que se serait beaucoup plus rpaide et plus sûr avec un tableau et des boucles imbriquées.

Je vais attendre pour voir s'il y a d'autres solutions.
En tout cas merci pour ta réponse.

Cordialement
Mistral
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 216
12 nov. 2011 à 14:52
Re,

à mettre dans la feuille des paramètres :
Sub maj()
    Dim lig As Long
    For lig = 2 To [A65536].End(xlUp).Row
        Worksheets(Cells(lig, 1).Value).Range(Cells(lig, 2).Value) = Cells(lig, 3).Value
    Next lig
End Sub

Mettre le nom de feuille sur toutes les lignes, ex :
Feuille	Cellule	Valeur
Feuil2	A1	1
Feuil2	A2	2
Feuil2	A3	3
Feuil3	E7	4
Feuil3	E8	5
Feuil3	E9	6

eric
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
12 nov. 2011 à 15:18
Je viens de faire un rapide essais et celà semble fonctionner. J'ai créé un tableau selon ton modèle et lancé la macro depuis cette feuille et ça fonctionne, mais est-il possible de nommer ce tableau pour lancer la MAJ depuis n'importe quelle feuille du classeur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
12 nov. 2011 à 15:27
et comment faire si les feuilles sont nommées?
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 216
12 nov. 2011 à 15:47
Dans un module :
Sub maj()
    Dim lig As Long, sh As Worksheet
    Set sh = Worksheets("Param")
    For lig = 2 To sh.[A65536].End(xlUp).Row
        Worksheets(sh.Cells(lig, 1).Value).Range(sh.Cells(lig, 2).Value) = sh.Cells(lig, 3).Value
    Next lig
End Sub

et comment faire si les feuilles sont nommées?
Ben tu mets son nom en colonne A, j'ai mis Feuil2 mais ça peut être toto428

eric
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
12 nov. 2011 à 16:00
Ok j'ai bien nommé une feuille "param" et la macro fonctionne depuis n'importe quelle feuille.
J'ai déjà une feuille "param" dans laquelle j'ai tout un tas de données organisées pour la plus part en ensemble de cellules que j'ai baptisée d'un nom et je voudrais qu'il en soit de même pour mon tableau de MAJ que je pourrais appeller Tab_MAJ par exemple.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 216
12 nov. 2011 à 16:19
Tu peux l'appeler comme tu veux du moment que tu mets le bon nom dans la macro.
eric
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
12 nov. 2011 à 16:58
Je crois que je suis en train de me noyer ...

Set sh = Worksheets("Param"), 
c'est bien pour aller chercher les valeurs dans la feuille "Param".

For lig = 1 To sh.[A65536].End(xlUp).Row 
c'est bien pour commancer la lecture à la cellule A1.

Worksheets(sh.Cells(lig, 1).Value).Range(sh.Cells(lig, 2).Value) = sh.Cells(lig, 3).Value
c'est bien là qu'on sélectionne la feuille (lig,1) qu'on sélectionne la cellule (Lig,2) pour y mettre la valeur (Lig,3).

Si sur la feuille "Param" je crée mon tableau de mise à jour, qu'il comporte 10 lignes et 3 colonnes et que j'appelle ce tableau Tab_MAJ. Comment je fais pour aller chercher le nom de la première feuille qui se trouve en haut à gauche de la zone appelée Tab_MAJ?

Désolé si je te paraît lourdeau.

PS /
Ce tableau ne sera pas à partir de A1 car j'ai déjà d'autre élément que je ne peux déplacer.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 216
12 nov. 2011 à 17:11
Bon on va faire autrement alors...
Nomme la plage des noms des feuilles (1 colonne, sans le titre) 'ListeFeuilles' par exemple et :
Sub maj()
    Dim c As Range
    For Each c In [ListeFeuilles]
        Worksheets(c.Value).Range(c.Offset(0, 1).Value) = c.Offset(0, 2).Value
    Next c
End Sub

eric
0
Mistral_13200 Messages postés 634 Date d'inscription mardi 5 août 2008 Statut Membre Dernière intervention 21 mars 2024 4
13 nov. 2011 à 10:03
Bonjour Eriiic,

PARFAIT !!!

Cela me convient et fonctionne parfaitement.
Ca me permet de pouvoir mettre ma table de données à modifier là ou je veux sans avoir à tout décaler.

Mille merci à toi
Bon dimanche
Cordialement
Mistral
0