Comment acceder au même trableau à partir d'une liste déroulante ?

Bonjour à tous,

Etant un vrai débutant sur Excel, pour ne pas dire "une pive", j'ose tout de même me lancer pour poser une question qui semblera simpliste pour les avancés et experts du Forum.

Je vais vous montrer ce que je désire en joignant une copie d’écran, j’aimerai à partir de ma liste déroulante de clients avoir le tableau (tableau identique de base pour tous les clients) qui soit propre à chaque client.

Est-ce possible ou est-ce que je m’y prends mal ?

Je pensais pouvoir appliquer une formule mais je ne sais pas quoi faire.

Si une bonne âme passe par là et qu'elle a du temps à m'accorder ce serait vraiment super.

En vous remerciant pour vos réponses.

capture d ecran 5

Bonjour et sur le forum,

De ce que je vois, tu souhaites déclencher une macro dès qu'il y a un changement sur la liste de choix, au lancement de la macro tu initialises le tableau en vidant toutes les lignes sauf les en-têtes, et après tu vois pour importer des données de la base de données si tu en trouve pour le client, c'est bien ça?

Si tes en-têtes ne bougent jamais, il faut juste vider le tableau à chaque changement de client et charger les données depui la base de données, par contre... ça va être difficile de plus t'aider avec une capture d'écran

Un point positif en tout cas, tu es certes débutant, mais tu n'as pas commis une erreur qu'on retrouve beaucoup sur le forum, celle de faire une feuille par client, voir une feuille par mois, voir une feuille par client et par mois... Tu as pensé à faire une base de données et heureusement

bonjour

salut au passage Ausecours

mon conseil : faire encore plus simple

une table avec les c5 olonnes suivantes :

  • nom du client
  • CDC
  • détails
  • date prévue (au format jj/mm/aa OBLIGATOIRE car Excel comprend les dates)
  • date réelle (à remplir quand c'est fait)

une action = 1 ligne

tableau sans fin, qui va te durer 10 ou 20 ans, des milliers de lignes

ensuite tu fais des TCD pour visualiser par client, par mois, par an, par...C'est avec un TCd que tu construit la vue que as mises dans ton message

et faire des graphiques

ajoute des colonnes de € et tu feras des bilans

amitiés

Bonjour jmd

En effet, encore plus simple

re

Ausecour,

je ne sais pas faire des trucs compliqués, mon cerveau fait la colle

amitiés

Re,

Je sais faire un peu des 2 mais parfois je passe à côté de la solution la plus simple

Ausecour et jmd,

Merci à vous deux pour vos conseils et surtout pour votre disponibilité, vous êtes des chefs.

Je me suis certes pas très bien exprimé, pas simple pour un débutant, et j'ai zappé de joindre le fichier.

Je corrige donc cet oubli en le mettant en pièce jointe.

En fait je n'ai pas besoin de TCd pour ce tableau, je n'ai pas besoin de faire des stats ou des graphiques,

et aucun bilan à tirer.

Ces plans d'entretiens sont à disposition (en version papier) du ou des jardiniers dont je fait partie, pour savoir les tâches que nous devons accomplir chez tel ou tel client et indiquer la date d'exécution des travaux effectués (deux cases par mois car nous pouvons intervenir deux fois par mois pour une même action). J'ai créer un exemple dans le fichier joint.

Ma base de donnée n'est bien sur pas terminée et évolutive, et je souhaite inclure ensuite des listes déroulantes dans l'ensemble de mon tableau. Ouf, ça je sais faire.

Ensuite j'aimerai mettre à jour mon classeur en ajoutant au fur et à mesure les dates des travaux effectués, d'où mon intérêt de pouvoir naviguer aisément en passant d'un client à l'autre grâce à la liste déroulante , et bien sur, de créer des nouveaux plans d'entretien pour des nouveaux clients en utilisant toujours la même feuille.

Je sais qu'Excel n'aime pas du tout les cases vides mais dans ce cas présent je n'ai aucun calcul à faire. Est-ce possible ?

Si vous repassez par là je vous en serai très reconnaissant.

Mes meilleures salutations.

Bonjour,

Je viens de coder l'export des données, ça vérifie si la cellule A8 est remplie pour le lancement du programme, ça gère l'ajout et la suppression de lignes si besoin, ça peut créer des données dans ta base de données, ou juste en modifier, voir en supprimer, si tu modifies quelque chose, il faut juste cliquer sur "exporter".

Je te laisse voir ça pour le moment, je m'occupe de l'import dans pas longtemps:

Le code de l'import est fait aussi, je te laisse tout tester pour me dire si c'est bon

à priori je n'ai détecté aucun anomalie pendant mes tests

Ausecour,

Franchement je ne sais pas comment te remercier, tu es génial et généreux !

Le super job que tu as fais est une vraie merveille à mes yeux et comme tu le dis, totalement fonctionnel.

Cela me donne envie de fouiller, de comprendre et d'apprendre les macros du genre que tu as utilisé. :wink

Je suis très reconnaissant pour ta gentillesse et ta patience, ton attention et ton investissement ainsi que ta générosité.

Tu es un vrai CHEF !!!!!!!

Merci, encore merci, et merci.

Avec mes meilleures salutations, je te souhaite que du très bon, que dis-je, de l'excellent !

Bonjour,

ouah on sent que tu es satisfait quand tu écris ton message, content que la solution que je t'ai apporté te convienne

Si VBA t'intéresse, tu as des cours un peu partout sur internet avec des explications, ce forume contient d'ailleurs une section VBA avec quelques informations, et si tu souhaites comprendre un peu plus facilement le programme, je peux l'expliquer

Bonne continuation et merci d'avoir passé le sujet en résolu

Salut Ausecour,

J'ai essayé de comprendre ce que tu as fait comme manipulations et je bute sur un truc.

Quand tu as fais les macros "import" et "export" as-tu utilisé l'outil "Enregistrer une macro" dans l'onglet "Développeur" ou directement par "Macros" ? Ou directement en VBa ?

Pour le fun et pour essayer d'affiner mon classeur j'aimerai inclure une autre variable, celle de l'année" en plus de "client" et "contrat".

Je coince encore un peu beaucoup pour comprendre comment il faut agir et surtout où.

J'ai cherché sur les tutos un peu partout mais il m'est difficile de discerner ce qui convient pour le cas de figure qui m'intéresse.

Est-ce que je peux ou dois agir directement sur ton fichier VBa ci-joint que j'ai extrais ?

Tu as déjà fait beaucoup pour moi et si tu es encore disponible je veux bien que tu m'expliques comment tu as procédé.

Mes meilleures salutations.

2copie.xlsx (19.89 Ko)

Bonjour,

Je vais tâcher de répondre à tes questions

Quand tu as fais les macros "import" et "export" as-tu utilisé l'outil "Enregistrer une macro" dans l'onglet "Développeur" ou directement par "Macros" ? Ou directement en VBa ?

Une petite clarification s'impose, une macro, et VBA, c'est exactement la même chose, la macro c'est juste le nom d'un programme codé dans un langage que l'on appelle VBA, je n'ai pas utilisé l'enregistreur de macro pour faire ce code, j'ai tout tapé à la main. On peut donc dire que j'ai entièrrement codé ma macro en VBA


Pour le fun et pour essayer d'affiner mon classeur j'aimerai inclure une autre variable, celle de l'année" en plus de "client" et "contrat".

Je coince encore un peu beaucoup pour comprendre comment il faut agir et surtout où.

Est-ce que je peux ou dois agir directement sur ton fichier VBa ci-joint que j'ai extrais ?

Ce que tu souhaites c'est ajouter une condition, il faut donc regarder dans le code où est-ce que je fais des tests logiques, pour ensuite savoir si c'est bien là que tu dois modifier

Dans mon code, les tests logiques commencent par If, tu en as plusieurs:

Code 1:
'vérifie que le programme doit être lancé
If Range("a8") = "" Then
    MsgBox "La cellule A8 doit être renseignée pour procéder à l'export.", vbInformation
    Exit Sub
End If

Visiblement ce n'est pas celui là qui t'intéresse, il vérifie juste que tu peux lancer le code, et il n'a pas besoin d'être changé

Code 2:
'insertion/suppresion de lignes
    If nbLig < UBound(tableauSource, 1) Then
        .Range("a" & ligExport).Resize(UBound(tableauSource, 1) - nbLig).EntireRow.Insert shift:=xlShiftDown, copyorigin:=xlFormatFromRightOrBelow
    ElseIf nbLig > UBound(tableauSource, 1) Then
        .Range("a" & ligExport).Resize(nbLig - UBound(tableauSource, 1)).EntireRow.Delete shift:=xlShiftUp
    End If

Celui-ci vérifie si tu as besoin de supprimer ou ajouter des lignes, mais il ne dépend que de la taille du tableau final, ce n'est visiblement pas ici que tu vas pouvoir ajouter ton critère

'Si au moins on trouve le nom du client quelque part
    If Not .Range("a1", "a" & ligFin).Find(client, lookat:=xlWhole) Is Nothing Then
        For i = LBound(tableauFin, 1) To UBound(tableauFin, 1)
            'cherche le client et le contrat
            If tableauFin(i, 1) = client Then
                If tableauFin(i, 2) = contrat Then
                    If nbLig = 0 Then
                        ligExport = i
                    End If

                    nbLig = nbLig + 1
                ElseIf nbLig > 0 Then
                    Exit For
                End If
            ElseIf nbLig > 0 Then
                Exit For
            End If
        Next i
    Else
        ligExport = ligFin + 1
    End If

Là on entre dans le vif du sujet

On va regarder le premier If:

If Not .Range("a1", "a" & ligFin).Find(client, lookat:=xlWhole) Is Nothing Then
    [...]
Else
    ligExport = ligFin + 1
End If

Ce premier If vérifie que l'on trouve le client quelque part dans la base, sans quoi ça ne sert à rien de continuer, et on passe au Else qui dit juste "on va écrire après la dernière ligne du tableau".

Si tu trouves le client quelque part, alors on passe à la suite:

For i = LBound(tableauFin, 1) To UBound(tableauFin, 1)
    [...]
Next i

Une boucle qui parcourt toutes les lignes de ton tableau, pour essayer de trouver la ligne à partir de laquelle tu vas commencer ton export, la condition que vas vouloir rajouter se trouve là-dedans

Dedans tu as:

'cherche le client et le contrat
            If tableauFin(i, 1) = client Then
                If tableauFin(i, 2) = contrat Then
                    If nbLig = 0 Then
                        ligExport = i
                    End If

                    nbLig = nbLig + 1
                ElseIf nbLig > 0 Then
                    Exit For
                End If
            ElseIf nbLig > 0 Then
                Exit For
            End If

Premièrement je regarde si on a le bon client, sinon, si on a trouvé des lignes, on arrête de chercher (tu vas beaucoup retrouver cette ligne)

Si on le même client, on regarde ensuite le contrat, et si on a bien le même contrat et qu'on a pas encore enregistré de lignes, on dit que l'on va commencé à exporter à cette ligne, puis on augmente de 1 le nombre de lignes présentes dans la base, si on a pas le même contrat, on vérifie à nouveau si on a des lignes enregistrées, si c'est le cas, on sort de la boucle de recherche...

Si tu veux ajouter une condition, il faudra juste un peu modifier cette partie du programme

Je te laisse regarder par tes propres moyens car c'est ce que tu souhaites faire je crois, et si tu bloques toujours... tu sais où me trouver

Salut Ausecour,

Encore une fois je te remercie pour tes explications concernant VBA et le descriptif de ton scipt.

Il est vrai que je n'aime pas abuser de prime abord de ton aide, pour la seconde fois, car je pense qu'il est bon de s'investir un minimum pour comprendre et essayer ensuite par ses propres moyens. Tu avais vu juste.

Par contre je suis loin d'être une lumière avec la programmation en l'état actuel, j'ai déjà de la peine à comprendre comment

écrire et valider ensuite, et ce n'est que le début...

Alors je crois que je vais te solliciter une dernière fois si tu le veux bien et je te serai très reconnaissant pour ton aide.

Je ne sais pas si c'est une question d'âge mais je crois qu'à l'avenir je vais me cantonner avec du easy pour moi, j'arrive jusqu'au tableaux croisés et je pense que cela devrait me suffire.

Je reste néanmoins toujours curieux et je ne délaisserai pas totalement un mini apprentissage de VBA mais avec des macros toutes faites.

Merci pour toute ton aide et ta patience, infiniment.

Bonjour,

En fait il y avait un peu plus de choses à changer que ce que je pensais, mais c'était assez rapide à faire

Voici le fichier avec le critère en plus:

Bonne journée

Salut Ausecour,

je te remercie encore une fois pour le travail que tu as fais, je pensais bien qu'il fallait intervenir comme tu me l'avais très bien expliqué, sur cette fameuse ligne " 'cherche le client, le contrat en rajoutant (et l'année ) " , mais je n'y serais pas arrivé car il me manquait bien d'autres paramètres.

J'observe, je compare et j'apprend du mieux que je peux, merci à toi.

J'ai encore un petit souci, je t'explique, je peux avoir un contrat annuel pour un client et par ailleurs devoir lui faire un devis en dehors de cet entretien pour un abattage ou un élagage par exemple, et quand j'essaie de faire ces deux opérations distinctes j'ai une erreur.

Je te mets en pièces jointes mes captures concernant ce problème.

Est-ce possible de corriger ce genre de chose ou est-ce qu'Excel trouve ses limites ?

Tu dois commencer à me trouver lourdingue et je m'en excuse humblement, mais si tu as un moment, encore un, pour m'expliquer ce qui se passe et si c'est possible d'y remedier, je serai bien entendu ravi.

Merci pour tout ce que tu as déjà fait pour moi et si tu as encore du temps à me consacrer, par avance je t'en remercie.

Mes meilleures salutations.

1 2

Bonjour,

Je n'ai pas très bien compris ce que tu voulais faire, mais je crois que je n'avais pas testé mon programme d'export avant de t'envoyer le fichier, j'ai corrigé les erreurs qui étaient toutes bêtes

Je te laisse à nouveau tester ce que tu voulais faire, tu me diras si c'est bon

Salut Ausecour,

Merci à toi pour ta prompte réaction.

Alors ça ne fonctionne pas, je vais donc essayer de mieux m'exprimer.

Dans le fichier actuellement nous avons comme cliente Mme Berthoud pour un entretien annuel,

si je désire lui faire un devis pour un travail n'étant pas inclus dans l'entretien annuel, je rentre son nom,

puis je rentre Devis et les autres indications concernant les travaux.

Mais je ne peux pas exporter, il y a maintenant une autre erreur.

La même chose si je veux faire un entretien annuel pour la même cliente pour 2020, il y a la même erreur.

J'espère être assez clair pour que tu puisses mieux me comprendre.

Merci beaucoup pour ta disponibilité.

2 1

Re,

C'est encore une erreur de ma part dans la programmation

Je viens de corriger ça, désolé pour tous ces bugs, j'espère que tu n'en recontreras plus, sinon n'hésites pas à m'avertir comme tu l'as fait jusque là

Voici le fichier avec le bug corrigé:

Re Salut Ausecour,

Comment t'as bien choisi ton pseudo.

Tu n'as pas à être désolé, c'est moi qui le suis, je t'ai beaucoup sollicité et tu as toujours répondu présent.

Tout fonctionne parfaitement, c'est vraiment super, pile ce qu'il me fallait.

Encore une fois merci pour tout et bravo, bravo, bravo !

Si je peux t'aider pour ce qui concerne les végétaux, les arbres, le jardin en général, je suis à ta disposition.

Toujours est-il que je trouve que l'attitude de certaines personnes dont tu fais partie, sur ce forum et sur

d'autres, est parfaite et exemplaire.

Le genre humain est parfois égoïste mais ça me réchauffe le cœur à chaque fois que je constate que l'entraide

est présente.

Que le meilleur pour toi mon ami, et les meilleurs salutations d'un jeunot de 60 ans qui s'accroche pour ne pas

prendre trop de distance avec les nouveaux outils et dernières technologies.

C'était vraiment super de te rencontrer.

Rechercher des sujets similaires à "comment acceder meme trableau partir liste deroulante"