Remplir un tableau à partir d'un autre avec Macro [Résolu]

Sophie - 14 juin 2017 à 11:42 - Dernière réponse : ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention
- 15 juin 2017 à 12:08
Bonjour,

Je possède une base de données avec différents sites (avec N° propre à chacun).

J'ai un onglet avec un premier tableau dans lequel sont répertoriées des consommations mensuelles par site, et donc ce tableau évolue au moins tous les mois.

A droite de ce tableau, j'ai établie une moyenne pour chaque mois (qui, comme vous l'aurez compris, évolue à chaque nouvelle entrée de données).

Dans un autre onglet se trouve un second tableau avec l'ensemble des sites. Ce tableau doit me servir à cataloguer les moyennes suscitées (et pouvoir le faire régulièrement, et d'écraser les anciennes données).

Mon but, serait d'avoir un bouton macro, qui me permettrait de copier les différentes moyennes dans le second tableau, à la bonne ligne,c'est-à-dire en utilisant comme référence le N° des différents sites.

Je me triture le cerveau mais les macros et moi on a jamais été très copains. Pensez-vous que c'est possible, et si oui, avez-vous une solution ?

Merci par avance

Mon fichier Excel :
www.transfernow.net/81h18214t25y
Afficher la suite 

16 réponses

Répondre au sujet
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - Modifié par ccm81 le 14/06/2017 à 15:02
0
Utile
Bonjour

Utilises http://cjoint.com/ pour envoyer ton fichier

Cdlmnt
Commenter la réponse de ccm81
0
Utile
Merci, voilà le fichier :
http://www.cjoint.com/c/GFonihd0LJL
Commenter la réponse de Sophie
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - 14 juin 2017 à 15:23
0
Utile
Tu devrait pouvoir te passer de macro
En D5 (ligne Bibliothèque)
=INDEX('Outil seuils'!$G$7:$G$18;EQUIV(Seuil!D$1;'Outil seuils'!$B$7:$B$18;0))
à tirer vers la droite

Dans la feuille Outil seuils, il devrait y avoir un tableau pour chaque site, à moins que tu aies une feuille par site... La formule ci-dessus restera alors à adapter pour les autres sites

Si tu veux une macro, il faut envoyer un fichier avec la vraie structure complète

Cdlmnt
Commenter la réponse de ccm81
0
Utile
J'ai omis un détail important : le tableau de 2 lignes et 3 colonnes en haut de mon premier onglet est en réalité constitué de listes déroulantes me permettant de choisir un site et une énergie, ce qui remplit ensuite le tableau en-dessous (je ne peux vous transmettre mon "vrai" fichier pour des raisons de confidentialité).

Ainsi, mon but est, pour chaque site et énergie, de pouvoir coller la colonne des moyennes dans le second tableau, afin de pouvoir répéter l'opération pour chacun des autres sites.
Commenter la réponse de Sophie
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - 14 juin 2017 à 16:01
0
Utile
OK, on va faire avec, mais il te faudra certainement mettre la main dans le cambouis pour la macro

Cdlmnt
Commenter la réponse de ccm81
0
Utile
Si je peux avoir une base saine, pas de problème pour me creuser le cerveau avec mes données :)
Commenter la réponse de Sophie
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - Modifié par ccm81 le 14/06/2017 à 16:26
0
Utile
Une question ... pour le moment

Le numero en colonne A (feuille seuil) est il unique (1 site+1energie = 1 numero) ? Si oui, ça simplifie la recherche de la ligne qui se ferait selon ce (seul) numéro
Commenter la réponse de ccm81
0
Utile
Oui tout à fait, il est unique (en fonction du site et de l'énergie choisie). C'est d'ailleurs ce numéro qui me permet de faire appel à mes consommations.
Commenter la réponse de Sophie
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - 14 juin 2017 à 16:41
0
Utile
OK, c'est parti
Commenter la réponse de ccm81
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - 14 juin 2017 à 16:49
0
Utile
Un début .. à tester
http://www.cjoint.com/c/GFooWMvO2s8

Cdlmnt
Commenter la réponse de ccm81
0
Utile
Merci !!
Par contre, je pense que c'est à cause de ma version de Office (Office 365) mais aucune macro ne s'affiche dans le menu (alors qu'elle fonctionne parfaitement...)
Commenter la réponse de Sophie
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - 14 juin 2017 à 17:10
0
Utile
1. mais aucune macro ne s'affiche
dans ton fichier ?
et que veux tu dire par "ne s'affiche dans le menu"
2. alors qu'elle fonctionne parfaitement...
même question

Avec mon vieil excel 2003, je n'ai pas tous ces problèmes

N'oublies d'enregistrer ton fichier (avec la macro) avec le type .xlsm (et non .xlsx)

Si c'est fini, peux tu mettre le sujet à résolu (en dessous du titre de ton premier message)

Bonne fin de journée
Commenter la réponse de ccm81
0
Utile
Merci pour tes précisions.

J'avais bien déjà fait toutes tes suggestions, et quand je vais dans "Affichage" puis "Macros"/"Afficher les macros" je n'ai rien du tout, zéro.
Et pourtant quand je clique sur le bouton que tu as créé, la macro fonctionne parfaitement.
Je penche pour une incompatibilité de version Office.

Te serait-il possible de coller les lignes de la Macro sur ce forum ?

Merci par avance !
Commenter la réponse de Sophie
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - Modifié par ccm81 le 14/06/2017 à 17:57
0
Utile
1. La macro attachée au bouton que j'ai nommé btMAJ (dans le module de la feuille Outil seuils)
Private Sub btMAJ_Click()
Dim numero As Long
With ActiveSheet
  numero = .Range(ceNuFO).Value
  Call Transfert(numero)
End With
End Sub

2. La macro transfert (dans le module général Module 1)
' constantes décrivant la configuration des données

' Feuille Outil seuils
Public Const FO As String = "Outil seuils"
Public Const ceNuFO As String = "D3"
Public Const liDeFO As Byte = 7
Public Const coSeFO As String = "G"
' Feuille seuil
Public Const FS As String = "Seuil"
Public Const coNuFS As String = "A"
Public Const codeFS As Byte = 4

Public Sub Transfert(numero As Long)
Dim mois As Byte, li As Long
Dim obj As Object
With Sheets(FS)
  Set obj = .Columns(coNuFS).Find(numero, , , xlWhole)
  If obj Is Nothing Then MsgBox "Numero " & numero & " non trouvé ": Exit Sub
  li = obj.Row
  For mois = 1 To 12
    .Cells(li, codeFS + mois - 1).Value = Sheets(FO).Range(coSeFO & liDeFO + mois - 1).Value
  Next mois
End With
End Sub

Cdlmnt
Commenter la réponse de ccm81
0
Utile
Après quelques modifications, ça fonctionne.

Merci beaucoup !
Commenter la réponse de Sophie
ccm81 8202 Messages postés lundi 18 octobre 2010Date d'inscription 11 décembre 2017 Dernière intervention - 15 juin 2017 à 12:08
0
Utile
De rien

Si c'est fini, peux tu mettre le sujet à résolu (en dessous du titre de ton premier message)

Bonne journée
Commenter la réponse de ccm81