VBA : Insérer fonction SI complexe dans macro

Dimebag

XLDnaute Nouveau
Bonjour à tous! Je lance ce matin un appel aux professionnels du codage VBA ;) Je n'ai pas forcément réussi à trouver une réponse à mon problème sur les divers forums excel du web, c'est pourquoi je me tourne vers vous.

Je vous explique mon problème :
Je suis en train de créer, pour mon entreprise, un tableau de bord reprenant les résultats de nos opérateurs en terme de productivité et de qualité. J'ai voulu que ce tableau de bord soit "automatisé", c'est pourquoi je me suis lancé dans le codage VBA afin d'y parvenir (donc le codage VBA est tout neuf pour moi, je suis encore un grand novice ^^).

A force de persévérance et d'aide de plusieurs personnes, nous avons réussi à monter un code fonctionnel sur mon fichier. Pour l'instant, la macro effectue les tâches suivantes :
1 - Dans la feuille "Heures prod", Actualisation TCD. Ensuite, filtrage du tableau par la colonne H "Libellé secteur" en gardant les données de "préparation" et de "contrôle"
2 - Copie des noms restants en colonne E après le filtrage et collage dans la colonne C de la feuille "Tableau de bord".
3 - Dans la feuille "Tableau de bord", après avoir collé les noms en colonne C, tri des noms de A à Z et suppression des doublons.
4 - Collage spécial par valeur des données du tableau de la feuille "Tableau de bord" dans la feuille "Archives graph jour". Collage à partir de la première ligne vide trouvée dans la feuille "Archives graph jour".
5 - Actualisation du graphique croisé dynamique présent dans la feuille "Graph des résultats jour".

La phrase en rouge correspond à l'endroit que j'aimerais modifier :
Je voudrais qu'au lieu de coller systématiquement les données à partir de la première ligne vide trouvée dans la feuille "Archives graph jour", la macro effectue une fonction SI disant que si la case "A3" de la feuille "Tableau de bord" ="Lundi" alors il faut effacer l'ensemble des données du tableau de la feuille "Archives graph jour" et coller les nouvelles données à partir de la case "A2" de cette feuille, sinon coller les données à partir de la première ligne vide de cette feuille.

J'espère avoir été assez clair dans mes explications, si vous avez des questions n'hésitez pas.
Je vous mets en pièce jointe le fameux fichier. Il est bloqué par un mot de passe qui est "bad" et la macro en question s'appelle "maj_graphe".

Merci par avance à ceux qui prendront le temps de m'aider et bonne journée à tous!
 

Pièces jointes

  • Indices quota et qualité prod - version test3.xlsm
    767.5 KB · Affichages: 21

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@Dimebag [Bienvenue sur le forum]
Avant de rédiger ta question, tu aurais peut-être du prendre le temps de lire la charte du forum.
Pourquoi me diras-tu?
Pour te rendre compte tout simplement qu'on ne joint que des fichiers exemples sans aucune données nomitatives

>Ci-dessous extrait de la charte en question<
5 – La possibilité de joindre des fichiers est donnée sur ce forum. Ne pas hésiter à utiliser cette fonction, tout en veillant que les données soient bidons et donc qu’aucune donnée confidentielle, nominative ne soit dans le fichier.

Tu peux donc passer en mode EDITION et remplacer ton fichier par une version anonymisée de celui-ci ;)
 

Dimebag

XLDnaute Nouveau
Bonjour Staple1600. Bien évidemment, étant une personne adulte et responsable (bien que je sois encore un enfant en codage VBA, je ne suis pas un enfant dans tous les domaines et surtout dans le domaine du respect de la confidentialité), tous les noms ainsi que tous les résultats en productivité et qualité des opérateurs ont été modifiés et ne sont que fictifs.

A part vouloir m'attaquer sur quelque chose qui n'a rien à voir avec ma demande, et ce sans vérifier l'exactitude de tes propos, aurais-tu envie de m'aider à résoudre mon problème Staple1600?
 

Staple1600

XLDnaute Barbatruc
Re

Je ne suis pas censé deviner que les données sont fictives puisque tu le ne précises pas dans ton premier message
Je n'ai pas attaqué mais t'ai souhaité la bienvenue*;)

Quand à ta question , j'en étais rendu ici
VB:
Sub a()
'petite macro à vocation inspiratrice
'ce n'est pas donc une macro "solution" à la question posée
Dim f As Worksheet, dl&
Set f = Sheets("Tableau de bord")
If f.[R1].Value2 <> "Lundi" Then 'test si Lundi
dl = Feuil9.Cells(Rows.Count, 1).End(xlUp).Row
MsgBox dl
Else
Feuil9.Rows("2:10000").ClearContents
End If
End Sub

*: à ma sauce, certes, mais souhait de bienvenue tout de même.

PS: En terme de confidentialité, tout n'est point expurgé: Flavien BA-- ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Je continue mes investigations (en partant de ton code existant)
VB:
Sub b()
Dim cell_vide As Range
'Set cell_vide = ActiveSheet.Columns("A").Find(Null)
'plante si la feuille est vide
'MsgBox cell_vide.Address
'////////////
'autre syntaxe (pas de plantage)
Set cell_vide = ActiveSheet.Cells(Rows.Count, 1).End(xlUp)(2)
MsgBox cell_vide.Address
End Sub
 

Dimebag

XLDnaute Nouveau
Re Staple1600, merci bien du temps que tu prends pour mon problème. Après, comme je te disais mon niveau en VBA est encore loin d'être optimal ^^ Donc pour être sûr d'avoir bien compris, tu me demandes d'essayer de remplacer la ligne :
Set cell_vide = ActiveSheet.Columns("A").Find(Null)
par Set cell_vide = ActiveSheet.Cells(Rows.Count, 1).End(xlUp)(2)

C'est bien cela?
 

Discussions similaires

Réponses
8
Affichages
358
Réponses
5
Affichages
258
Réponses
10
Affichages
222
Compte Supprimé 979
C

Statistiques des forums

Discussions
311 711
Messages
2 081 799
Membres
101 818
dernier inscrit
tiftouf5757