Optimisation de selection de feuille (VBA)
Résolu
Zorgalex
Messages postés
75
Statut
Membre
-
Zorgalex Messages postés 75 Statut Membre -
Zorgalex Messages postés 75 Statut Membre -
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 !!! :)
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:
- Optimisation de selection de feuille (VBA)
- Optimisation pc - Accueil - Utilitaires
- Bruler feuille de laurier - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Optimisation découpe panneau gratuit - Télécharger - Outils professionnels
- L'indice n'appartient pas à la sélection vba ✓ - Forum Programmation
5 réponses
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- 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...
Zorgalex
Messages postés
75
Statut
Membre
4
Super, merci de ta réponse. Je vais regarder ça tranquillement quand j'aurai du temps sous peine de ne pas tout comprendre ^^
Bonjour
a partir de combien d'ID changes tu de feuilles ?
a partir de combien d'ID changes tu de feuilles ?
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
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
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
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
je n'ai pas vu les feuiles "matin";... "soir"....
ca sent la planche savonneuse
abandon
ca sent la planche savonneuse
abandon
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ;-)
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 ;-)
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++
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++
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 !
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 !
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?
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?