Optimisation de selection de feuille (VBA)

Résolu
Bonjour à tous,

J'ai appris il y a quelques temps à faire une base de données simple avec les boutons "ajouter", "modifier", "effacer" et "afficher". Le problème est que j'ai du la gonfler et avec le nombre d'entrées grossissant, j'ai du déplacer des entrées sur des feuilles différentes pour rester lisible. Le résultat est que j'obtiens un fichier Excel avec 7 feuilles contenant chacune environ 15 entrées...seul moyen pour que cette BDD soit lisible.
Mon bouton ajouter fonctionne parfaitement. Lorsque j'ajoute un matériau (ma base de données concerne les matériaux de construction), les données sont rapidement entrées à l'aide de formulaires puis dispatchées dans les feuilles avec un ID commun identifiant le matériau en question.
Le problème vient avec les 3 autres options...

Pour le bouton modifier, mon code VBA va chercher les informations concernant l'ID du matériau entré pour pré-remplir des formulaire. Puis, une fois les données modifiées, les données sont remplacées dans les cellules. Le problème est que c'est loooonggg pour une base de données ne contenant que peu de données. Alors j'imagine quand je vais en rentrer des centaines...

Le problème vient de mon code. Comme j'ai de données d'entrées d'un seul matériau sur plusieurs feuilles, je dois les sélectionner pour faire les extraction, les changements ou bien la suppression. Mais n'étant qu'un novice, je ne sais vraiment pas comment optimiser la chose...

J'ai mis en exemple le code concernant la suppression d'un matériau: je rentre un ID et le code va chercher toutes les lignes des 7 feuilles contenant cet ID et va les effacer.
Un exemple de comment je pourrais changer ce code pour contourner cette sélection de feuille qui raaaalonge le temps d'exécution en vu de l'évolution de ma BDD ? J'appliquerai cette technique à mes autres fonctions (modifier, afficher).

Je ne demande pas un cours mais si la personne me mettant un exemple pouvais en même temps m'expliquer ce choix, ce serai sympa. J'aime comprendre ce que je fais ^^

Merci d'avance pour votre aide !!! :)

Private Sub Oui_Click()

Dim nomID As Integer
nomID = ID.Value
Dim MAT As Integer
For MAT = 3 To 1000

Feuil01.Select
If Cells(MAT, 1) = nomID Then
Rows(MAT).delete
End If
Feuil02.Select
If Cells(MAT, 1) = nomID Then
Rows(MAT).delete
End If
Feuil03.Select
If Cells(MAT, 1) = nomID Then
Rows(MAT).delete
End If
Feuil04.Select
If Cells(MAT, 1) = nomID Then
Rows(MAT).delete
End If
Feuil05.Select
If Cells(MAT, 1) = nomID Then
Rows(MAT).delete
End If
Feuil06.Select
If Cells(MAT, 1) = nomID Then
Rows(MAT).delete
End If
Feuil07.Select
If Cells(MAT, 1) = nomID Then
Rows(MAT).delete
End If

Next MAT

Unload Supression
Feuil00.Select

End Sub

5 réponses

Résumé de la discussion

La discussion porte sur l'optimisation d'une base de données réalisée sous Excel, répartie sur sept feuilles, avec les boutons Ajouter, Modifier et Supprimer, la suppression par ID parcourant toutes les feuilles et ralentissant l'exécution. Une solution clé propose d'identifier dynamiquement les feuilles via une fonction Identifie_Feuilles et d'adapter le code de suppression, avec une option originale, afin d'éviter une sélection répétée de chaque feuille. D'autres contributions suggèrent de réduire l'interface à un seul UserForm et de repenser la structure des feuilles pour limiter les recherches croisées et gagner en lisibilité et en performance. Quelques propositions évoquent aussi une consolidation des données sur moins de feuilles et une logique d'ID unique pour limiter les décalages lors des modifications ou suppressions.

Bobot (l’IA à votre service)
  1. Modérateur
    Bonjour,

    1- regarde du côté de la méthode find : https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel

    2- Si tes données sont "chargées" dans l'userform, c'est que tu as déjà cherché le numéro de la ligne correspondante dans chacune de tes feuilles?
    Donc... Il te suffit de stocker dans une variable de niveau module ces numéros de ligne pour ne pas avoir à les rechercher en cas de suppression/modification...
    1. Super, merci de ta réponse. Je vais regarder ça tranquillement quand j'aurai du temps sous peine de ne pas tout comprendre ^^
  2. Contributeur
    Bonjour

    a partir de combien d'ID changes tu de feuilles ?
    1. Bonjours michel_m,

      Je me suis peut-être mal exprimé mais je ne change pas de feuille à partir d'un certains nombre d'ID. Quand je rentre un matériau dans la base de données, un ID lui est attribué automatiquement. Mais le matériaux comporte 100 entrées différentes. Je les ai donc dispatché en plusieurs feuilles dans l'Excel lors de la validation du formulaire d'ajout.
      J'ai une feuille 1 contenant les 10 premières entrées puis 6 autres feuilles contenant les 90 autres. Ce qu'il fait qu'il y a les mêmes ID sur chaque feuilles.

      Exemple rapide que j'espère clair: Caractérisation de la météo

      Champs du formulaire à remplir:
      - jours
      - mois
      - année
      - température matin
      - température après-midi
      - température soir
      - volume précipitation matin
      - volume précipitation après-midi
      - volume précipitation soir

      Résultats lors de la validation :
      Un ID automatique est créée pour le jour en question

      Dans la feuille Excel "Généralité" nous aurons :
      - ID
      - jours
      - mois
      - année

      Dans la feuille Excel "Matin" nous aurons :
      - ID
      - température
      - volume précipitation

      Dans la feuille Excel "Après-midi" nous aurons :
      - ID
      - température
      - volume précipitation

      Dans la feuille Excel "Soir" nous aurons :
      - ID
      - température
      - volume précipitation
  3. Contributeur
    OKn compris mais pour s'en sortir efficacement:

    Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
    et coller le raccourci proposé (clic droit) dans le message de réponse
    Dans l'attente

    1. Oui en effet ce sera bien plus pratique.

      http://www.cjoint.com/c/EHtpOx426Iq

      J'ai retiré les titres et infos indiquant l'axe de ma base de données. Vous allez vite remarquer que cette BDD a été codé par un novice ;)

      Merci !
  4. Contributeur
    je n'ai pas vu les feuiles "matin";... "soir"....

    ca sent la planche savonneuse
    abandon
    1. Car le coup de la météo était un exemple pour montrer la structure et le fonctionnement de la base de donnée que je construisais. Je n'ai jamais dis que c'était la base de donnée en question... Ma BDD traite des matériaux de construction et de leur caractéristiques.
  5. Modérateur
    Bonjour,

    Ayant commencé à travailler sur le fichier transmis, je veux bien tenter de prendre la suite, mais :
    - la demande ne doit pas évoluer,
    - il faudrait, à minima, un fichier avec deux ou trois lignes de remplies. Il nous faut, en effet, tenir compte du format des données.

    Par contre, est ce que c'est gênant pour toi si, au lieu de 7-8 UserForm, tu n'en avais plus qu'un au final?

    Salut Michel,
    ca sent la planche savonneuse
    Oui, comme de trop nombreux sujets.
    J'm'y colle tout de même, mais avec conditions ;-)
    1. Contributeur
      Bonjour frank

      Amuse toi bien !
      ;o)
    2. Modérateur
      @michel_mMerci.
      A mon humble avis, et au vu de mes "premiers pas" dans le fichier, il faut tout refaire.
      Et même repenser le fonctionnement depuis le début.
      Je ne garderai, perso, que la structure des feuilles du fichier (pour ne pas perturber l'utilisateur) et remplacerai tous ces userforms par un seul.
      Du boulot en perspective, mais j'ai déjà tellement avancé que...
      Au plaisir de te recroiser, ici ou ailleurs.
      A++
    3. La demande n'évoluera pas mais je ne peux mettre de données... le projet est confidentiel. Ce que je peux dire, c'est que les données "générales" seront du texte sauf le coût. Pour les autres, ce ne seront que des nombres.

      Pour le coup du 1 UserForm pourquoi pas. J'ai du mal à imaginer la tête de la chose mais ne m'y connaissant pas, je pense que tu as une meilleure idée de la chose ^^

      Je vous ai mit des chiffres et données mais c'est au hasard

      http://www.cjoint.com/c/EHuhSJn5tEq

      Merci de votre aide !
    4. Modérateur
      @ZorgalexBon.
      Pour moi, toutes tes données, même celles que tu appelles des nombres, sont au format String. En effet, <2 ou 12,58 g/m² ne sauraient être des données numériques.
      Cela n'est rien puisque nous n'avons aucun calcul à faire avec ces données.

      par contre, et là il va te falloir être très rigoureux, c'est sur la manière que tu construit tes ID.
      Dans ton fichier final, ils ont réellement cette forme? des numéros uniques qui se suivent?
    5. Modérateur
      @pijakuUn autre problème survient...
      Les feuilles, à termes, ne s'appelleront plus F1, F2 etc...
      Puis-je avoir leurs noms?
      F1 = truc bidule etc...