Macro

Bonjour,

je pense que le sujet a peut-être déjà été traité mais je ne trouve pas la réponse dans le forum.

Je suis sous excel 2007. J'ai un fichier excel avec deux onglets.

Le premier onglet est rempli 3 fois par jour par un technicien différent suite à des mesures terrain.

J'aimerai que ces valeurs saisies soit incrémentées dans le tableau récapitulatif du deuxième onglet.

Ce tableau récapitulatif nous sert pour des audits. il est donc essentiel que nous conservions les valeurs comme une base de données.

J'ai bien réussi à récupérer les valeurs de l'onglet 1 pour le mettre dans le tableau de l'onglet 2.

Par contre dès que je change la date et/ou l'heure de l'onglet 1, toute la ligne saisie précédemment revient à zéro.

Il faut je suppose créer une macro pour figer les données récupérées et incrémenter une ligne supplémentaire dans le tableau, mais ne maitrisant ni la sciences des macros ni la programmation je suis bloquée.

Pourriez-vous m'aider?

merci de vos retours.

Sleveleux

... mais ne maitrisant ni la sciences des macros ni la programmation je suis bloquée.

Pourriez-vous m'aider?

Il faut apprendre : https://www.excel-pratique.com/fr/vba.php

... Pourriez-vous m'aider?

C'est comme si on te jettais du 25ème étage, pendant quelque temps tu pourrais dire : jusques là tout va bien !

Bonjour Patrice3744,

merci cela fait déjà 3 mois que j'essaie sans succès.

D'où ma démarche de poster sur ce forum, pensant pouvoir trouver de l'aide.

merci

Bonjour Sleveleux, bonjour le forum,

Voilà ce que je te propose :

1. Place un Commandbutton issue de la barre d'outils Contrôles ActiveX dans l'onglet Dosage journalier ML1

2. Supprime toutes les formules dans les colonnes A à AO à partir de la ligne 1202 et jusqu'a la fin du tableau, dans l'onglet suivi tunnel

3. Complète le code du bouton ci-dessous qui renvoie les données de l'onglet Dosage journalier ML1 vers l'onglet suivi tunnel. Je n'ai fait que les 7 premières colonnes, il y en a 69 en tout...

Private Sub CommandButton1_Click()
Dim OS As Worksheet
Dim OD As Worksheet
Dim PLV As Long

Set OS = Worksheets("Dosage journalier ML1")
Set OD = Worksheets("suivi tunnel")
PLV = OD.Cells(Application.Rows.Count, "B") + 1
OD.Cells(PLV, 1).Value = OS.Range("B6") 'date
If OD.Cells(PLV, 1).Value = Cells(PLV - 1, 1).Value Then OD.Cells(PLV, 1).Value = ""
OD.Cells(PLV, 2).Value = OS.Range("B7") 'heure
OD.Cells(PLV, 3).Value = OS.Range("B27") 'concentration A
OD.Cells(PLV, 4).Value = OS.Range("B29") 'concentration A 1
OD.Cells(PLV, 5).Value = (OD.Cells(PLV, 3).Value - OD.Cells(PLV, 4).Value / 3) * 15 'calcul
OD.Cells(PLV, 6).Value = OD.Cells(PLV, 4).Value * 0.9 'calcul
OD.Cells(PLV, 7).Value = OS.Range("B23") 'pH
'etc.... jusqu'à OD.cells(PLV,69)=...
End Sub

4. Clique sur le bouton quand l'onglet Dosage journalier ML1 est dument complété. Comme il n'y a plus de formules, il n'y aura plus de données effacées au changement de date...

[Édition]

Bonjour Patrice, nos posts se sont croisés...

Bonjour ThauThème,

merci, je vais essayer.

Rebonjour, bonjour ThauThème

Tu pourrais utiliser une copie de la feuille de suivi comme feuille intermédiaire :

  • conserves les titres et la (ou les) première(s) ligne(s)
  • mets y des formules simples (comme ='Dosage journalier ML1'!B6) pour récapituler toutes les informations à copier
  • la macro de TauThème serait alors beaucoup plus simple (et plus plus durable, notamment en cas de modification de la fiche) : il suffit alors de copier les valeurs de la (ou des) ligne(s) sur la feuille historique.

Bonjour Patrice33740,

merci de ces informations.

je vais essayer toutes vos propositions. j'essaie déjà d'affecter une macro au bouton.

car quand je rentre le code proposé par ThauThème, j'ai un message d'erreur :

capture

N'y connaissant rien du tout comme précisé je galère un peu à comprendre pourquoi ainsi que le code.

merci

Re,

Il faut enregistrer au format xlsm

Re bonjour,

oui j'ai résolu ce point.

maintenant j'ai un autre souci lorsque j'appuie sur le bouton :

capture

Est-ce lié ua fait que le code n'est pas complet?

le débogage donne ca :

capture2

merci

Re,

Que vaut PLV quand tu as cette erreur ?

Re,

mon soucis est que je ne sais pas à quoi correspond PLV/OD ou OS.

le code founi est du chinois pour moi

Re,

Remplaces :

PLV = od.Cells(Application.Rows.Count, "B") + 1

par

PLV = od.Cells(Application.Rows.Count, "B").End(xlUp).Row + 1

Re,

Attends... Je t'envoie le code commenté et corrigé.

Re,

whaou ça fonctionne.

merci je ne comprends toujours pas pourquoi. et serai incapable de le refaire à aujourd'hui. mais merci

Stéphanie

Re,

ok ThauThème merci, cela m'aidera pour les colonnes suivantes

Re,

Voila, j'espère que c'est plus clair :

Private Sub CommandButton1_Click()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim PLV As Long 'déclare la variable PLV (Première Ligne Vide)

Set OS = Worksheets("Dosage journalier ML1") 'définit l'onglet source OS
Set OD = Worksheets("suivi tunnel") 'définit l'onglet destination OD
PLV = OD.Cells(Application.Rows.Count, "B") + 1 'définit la première ligne vide PLV de la colonne B de l'onglet OD
OD.Cells(PLV, "A").Value = OS.Range("B6") 'renvoie la date de la cellule B6 de l'onglet OS dans la cellule ligne PLV colonne A de l'onglet OD
'si la date est identique à la date de la cellule au-dessus, efface la date
If OD.Cells(PLV, "A").Value = OD.Cells(PLV - 1, "A").Value Then OD.Cells(PLV, 1).Value = ""
OD.Cells(PLV, "B").Value = OS.Range("B7") 'renvoie l'heure de la cellule B7 de l'onglet OS dans la cellule ligne PLV colonne B de l'onglet OD
OD.Cells(PLV, "C").Value = OS.Range("B27") 'renvoie concentration A de la cellule B27 de l'onglet OS dans la cellule ligne PLV colonne C de l'onglet OD
OD.Cells(PLV, "D").Value = OS.Range("B29") 'renvoie concentration A 1 de la cellule B29 de l'onglet OS dans la cellule ligne PLV colonne D de l'onglet OD
OD.Cells(PLV, "E").Value = (OD.Cells(PLV, "C").Value - OD.Cells(PLV, "D").Value / 3) * 15 'calcul
OD.Cells(PLV, "F").Value = OD.Cells(PLV, "D").Value * 0.9 'calcul
OD.Cells(PLV, "G").Value = OS.Range("B23") 'renvoie le pH de la cellule B23 de l'onglet OS dans la cellule ligne PLV colonne G de l'onglet OD
'etc.... jusqu'à OD.cells(PLV,"BQ")=...
End Sub

ThauThème, Patrice33740,

vraiment merci c'est plus clair ainsi.

je m'attèle à compléter ce code pour les autres colonnes.

merci

Stéphanie

Petite erreur à corriger :

PLV = OD.Cells(Application.Rows.Count, "B") + 1 'définit la première ligne vide PLV de la colonne B de l'onglet OD

Re,

Oui Patrice merci ! À vouloir aller trop vite on oublie l'essentiel !... Désolé.

Le code corrigé :

Private Sub CommandButton1_Click()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim PLV As Long 'déclare la variable PLV (Première Ligne Vide)

Set OS = Worksheets("Dosage journalier ML1") 'définit l'onglet source OS
Set OD = Worksheets("suivi tunnel") 'définit l'onglet destination OD
PLV = OD.Cells(Application.Rows.Count, "B").End(xlUp).Row + 1 'définit la première ligne vide PLV de la colonne B de l'onglet OD
OD.Cells(PLV, "A").Value = OS.Range("B6") 'renvoie la date de la cellule B6 de l'onglet OS dans la cellule ligne PLV colonne A de l'onglet OD
'si la date est identique à la date de la cellule au-dessus, efface la date
If OD.Cells(PLV, "A").Value = OD.Cells(PLV - 1, "A").Value Then OD.Cells(PLV, 1).Value = ""
OD.Cells(PLV, "B").Value = OS.Range("B7") 'renvoie l'heure de la cellule B7 de l'onglet OS dans la cellule ligne PLV colonne B de l'onglet OD
OD.Cells(PLV, "C").Value = OS.Range("B27") 'renvoie concentration A de la cellule B27 de l'onglet OS dans la cellule ligne PLV colonne C de l'onglet OD
OD.Cells(PLV, "D").Value = OS.Range("B29") 'renvoie concentration A 1 de la cellule B29 de l'onglet OS dans la cellule ligne PLV colonne D de l'onglet OD
OD.Cells(PLV, "E").Value = (OD.Cells(PLV, "C").Value - OD.Cells(PLV, "D").Value / 3) * 15 'calcul
OD.Cells(PLV, "F").Value = OD.Cells(PLV, "D").Value * 0.9 'calcul
OD.Cells(PLV, "G").Value = OS.Range("B23") 'renvoie le pH de la cellule B23 de l'onglet OS dans la cellule ligne PLV colonne G de l'onglet OD
'etc.... jusqu'à OD.cells(PLV,"BQ")=...
End Sub
Rechercher des sujets similaires à "macro"