Optimisation de selection de feuille (VBA)

Résolu/Fermé
Zorgalex Messages postés 69 Date d'inscription vendredi 12 juillet 2013 Statut Membre Dernière intervention 6 juin 2018 - 19 août 2015 à 09:47
Zorgalex Messages postés 69 Date d'inscription vendredi 12 juillet 2013 Statut Membre Dernière intervention 6 juin 2018 - 20 août 2015 à 16:53
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
A voir également:

5 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
19 août 2015 à 09:51
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...
0
Zorgalex Messages postés 69 Date d'inscription vendredi 12 juillet 2013 Statut Membre Dernière intervention 6 juin 2018 4
19 août 2015 à 12:14
Super, merci de ta réponse. Je vais regarder ça tranquillement quand j'aurai du temps sous peine de ne pas tout comprendre ^^
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
19 août 2015 à 16:45
Bonjour

a partir de combien d'ID changes tu de feuilles ?
0
Zorgalex Messages postés 69 Date d'inscription vendredi 12 juillet 2013 Statut Membre Dernière intervention 6 juin 2018 4
19 août 2015 à 17:13
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
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
19 août 2015 à 17:18
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

0
Zorgalex Messages postés 69 Date d'inscription vendredi 12 juillet 2013 Statut Membre Dernière intervention 6 juin 2018 4
19 août 2015 à 17:41
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 !
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
20 août 2015 à 08:42
je n'ai pas vu les feuiles "matin";... "soir"....

ca sent la planche savonneuse
abandon
0
Zorgalex Messages postés 69 Date d'inscription vendredi 12 juillet 2013 Statut Membre Dernière intervention 6 juin 2018 4
20 août 2015 à 08:56
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
20 août 2015 à 09:15
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 ;-)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
20 août 2015 à 09:17
Bonjour frank

Amuse toi bien !
;o)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023
20 août 2015 à 09:30
Merci.
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++
0
Zorgalex Messages postés 69 Date d'inscription vendredi 12 juillet 2013 Statut Membre Dernière intervention 6 juin 2018 4
20 août 2015 à 09:44
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 !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > Zorgalex Messages postés 69 Date d'inscription vendredi 12 juillet 2013 Statut Membre Dernière intervention 6 juin 2018
20 août 2015 à 09:52
Bon.
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?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
20 août 2015 à 10:01
Un autre problème survient...
Les feuilles, à termes, ne s'appelleront plus F1, F2 etc...
Puis-je avoir leurs noms?
F1 = truc bidule etc...
0