Formulaire monté avec VBA : Erreur d’execution 50290
Bonjour,
J’ai monté un formulaire pour encoder des inventaires de terrain, en enregistrant une macro. Je l'ai utilisé plusieurs fois sans problème mais, depuis hier, en cliquant sur mon bouton auquel j'ai affecté ma macro, une fenêtre d'erreur s'affiche et indique : "Erreur d’execution 50290". Quand je regarde dans la fenêtre VBA, la mention écrite en surligné jaune c'est : "Sheets("Données brutes").Select".
Quelqu'un peut-il m'aider? Je suis une bille en Excel ...
Merci d'avance
Caroline
Salut Caroline,
Houlala, il y a du boulot!
Tous tes 'Select' et 'Activate' sont inutiles! Il faudrait revoir tout ça et je ne vais pas commencer un truc pareil à cette heure.
J'ai surtout corrigé "DonnZes brutes" -> "Données brutes" (43 corrections sur le fichier, si je me souviens bien).
Je n'ai pas rencontré d'autres erreurs...
Ajoute les lignes ci-dessous : ça t'évitera l'effet stroboscopique de ta macro!
Sub Encodage_placette_5()
'
' Encodage_placette_5 Macro
Application.EnableEvents = False
Application.ScreenUpdating = False
'
Sheets("Données brutes").Select
...
Application.EnableEvents = True
Application.ScreenUpdating = True
'
End SubA+
Bonjour,
@Curulis, il me semble que les macros ont été construites grâce à l'option "Enregistrer une macro", d'où leur lourdeur et l'abus de "Select" et d'"Actvate".
De plus il aurait été interessant qu'on nous explique avec précision quels sont les effets attendus par ces macros
Je comprends très bien l'utilité des lignes que tu lui proposes d'ajouter, mais pourrais-tu me dire ce que tu entends par "effet stroboscopique"
Bonne journée
effet stroboscopique : en effet je n'avais pas assimilé le mot "stroboscopique". Effet du aux "actiivate" successifs
Merci pour ce coup de main!! Oui tu vois le niveau
Bref. Alors trop bizarre, en reprenant mon fichier ce matin, j'ai plus de problème. Vraiment ça me dépasse!
Tes conseils :
- "Tous tes 'Select' et 'Activate' sont inutiles!". Tu veux dire que l'enregistrement de la macro a ajouté plein de mots parasites? Je supprime tout bonnement tous les mots "Select" et "Activate"? Vraiment tous?
- J'ai ajouté comme tu l'as codé les 2 x 2 "phrases" conseillées. J'avoue que je sais pas trop ce que ça apporte ou enlève...
Merci en tous les cas pour ces bonnes ondes réparatrices!
Bonjour,
Select/Activate servent à sélectionner des éléments (cellules, feuilles…) dans le classeur. C'est à dire faire l'action de sélectionner, les rendre actifs. Mais ça ne sert pas à calculer.
On peut donc les supprimer car ce sont des actions assez "lourdes" pour le code, elles le ralentissent. On peut directement faire nos actions sur les cellules sans les sélectionner. De petits exemples ci-dessous.
Le point ".", fondamental, permet d'accéder aux propriétés d'un objet, par exemple pour une feuille, ses cellules, et pour une cellule, sa formule ou encore son format.
Sub Macro2()
' Macro enregistrée
Range("C3").Select
ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
End Sub
Sub Macro2Revue()
Range("C3").FormulaR1C1 = "=RC[-2]+RC[-1]"
End Sub
Sub Macro3()
' Macro enregistrée
Sheets("Feuil2").Select
Range("C3").Select
ActiveCell.Value = 3
End Sub
Sub Macro3Revue()
Sheets("Feuil2").Range("C3").Value = 3
End SubBonjour Jacky,
Je sais que le message est adressé à Curulis mais je me permets de faire une petite réponse.
En fait, je suis tellement limitée en Excel et VBA que c'est le seul moyen que j'ai trouvépour reporter mes données encodées dans le formulaire. Les données sont du type :
- Placette n°1,
- Coef 2,
- Essences :
- CHENE avec tant de PB (petits bois), BM (bois moyens), etc.
- TILLEUL avec tant de PB (petits bois), BM (bois moyens), etc.
Une fois ma placette encodée, j'active ma macro via mon bouton"Encodage placette".
La macro que j'ai enregistrée copie-colle mes données dans ma feuille "Données brutes", par ligne, puis vide certaines cellules (pas "Coef", pas "Nbre" et pas les données dans la colonne "Essence"), puis recale ma saisie dans la case "Placette". Il me semble que c'est à peu près tout.
Oui, je veux bien savoir ce que ces 2x 2 lignes changent...
Bonne journée aussi
Re Cguillier,
En fait, je suis tellement limitée en Excel et VBA que c'est le seul moyen que j'ai trouvépour reporter mes données encodées dans le formulaire.
Mais je comprends très bien. Je ne te faisais aucun reproche, je ne faisais que constater que ton code avait été construit comme cela et que ça l'alourdissait
Je laisse Curulis travailler sur ton produit car il s'en est déjà imprégné beaucoup plus que moi
Bon courage
Salut Caroline,
Il ne suffira sans doute pas de simplement les supprimer, le code doit être revu pour ne pas faire de bêtises avec les 'Select' - 'Activate'.
EDIT : maintenant que tu as vu, j'enlève les vidéos pour ne pas attaquer les yeux du forum!
Si personne n'a "corrigé" ton code aujourd'hui, je regarderai en soirée!
A+
Bien volontiers pour la révision du code!
Bonne journée
Merci pour ces explications! Ca ne me permettra pas de créer un code VBA de manière autonome (je suis trop loin pour ça) mais au moins j'y vois plus clair!
Pardon Curulis, j'avais dit que je te laissais libre de poursuivre ce projet car tu étais déjà plus impliqué que moi dans ce problème, mais ce fut plus fort que moi j'ai voulu poursuivre ce que nous avons débuté. C'est pourquoi je fais une proposition (incomplète pour le moment) à Cguillier, proposition que tu pourras certes encore amélorer.
@Cguiillier
Comme je le dis précédemment, j'ai travaillé sur ton fichier. Tu trouveras donc ce que je te propose
Attention la procédure s'arrête car j'ai intégré un "Stop" dans mon code. Pourquoi ?
C'est que je voudrais comprendre et savoir ce que tu veux faire après le Stop
Il me semble que tu désires remettre toutes les données du formulaire à zéro alors qu'elle y sont déjà, ou alors je n'ai pas compris
Pourrais tu m'expliquer afin que je puisse poursuivre sans faire de bétises
A+
Salut Jacky,
stp, arrête de t'excuser et fonce!
Je ne suis pas comme certain qui se vexe quand j'interviens dans ce qu'il considère comme son domaine privé!
Il n'y a pas de placette privée sur Excel-Pratique sauf peut-être chez Caroline!
A+
OK Curulis, je foncerai mais avec toi car je crois que tu peux encore améliorer ce que j'écris
Cordialement
@Cguillier, je crois avoiir compris ce que tu veux faire
"Formulaire" est comme son nom l'indique un formulaire que l'utilisateur doit remplir, une fois rempli tu désires transférer les données dans "Données brutes" et une fois le transfert effectué tu remets le formulaire à zéro pour une future utilisation.
Est-ce bien cela ?
De plus j'ai vu que ta feuille est protégée, peux tu nous donner le code de protection ? on me demande de déprotéger la feuille pour effectuer les remises à zéro
Maintenant, selon ce que j'ai fait les essences s'inscrivent dans la feuille "Données brutes" les unes en dessous des autres de la ligne 2 à la liigne 11. Je me demande si tu ne voulais pas, par hasard, les inscrire les unes derrière les autres en ligne 2 ??
Voici mon fichier
Alors, franchement merci pour votre aide.
@Jacky
@Cguillier, je crois avoiir compris ce que tu veux faire
"Formulaire" est comme son nom l'indique un formulaire que l'utilisateur doit remplir, une fois rempli tu désires transférer les données dans "Données brutes" et une fois le transfert effectué tu remets le formulaire à zéro pour une future utilisation.
Est-ce bien cela ?
C'est exactement ça!!
J'ai remis un exemple d'inventaire encodé. V18 en copie
Et voici les étapes pour ma placette 1 par exemple :
Encodage :
- Placette n° 1
- Coef 2
- Nbre (sous entendu nombre de placettes total de mon inventaire) : 13
- Tableau :
| Essence | G (le calcul se fait tout seul) | PB | BM | GB | TGB | A. bios | A. morts | Perches A. | PB A. |
| Erable sycomore | 20 | 3 | 5 | 1 | 1 | 0 | 0 | 3 | 0 |
| Chene | 6 | 2 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
- Surf. régé : -
- Surf. régé. div. : -
Macro "encodage placette". Elle copie toutes les données de ma placette 1 et les colle dans une ligne. Je l'ai enregistrée telle que :
- Insertion d'une nouvelle ligne dans "Données brutes" (d'où mes numéros de placettes décroissants)
- Je prends les données des cases "Placette n°", "Coef". Je les colle dans les deux premières cases de ma nouvelle ligne dans "Données brutes".
- Je prends les données de ma première ligne d'essence : toutes les cases! Puis je les colle toujours sur la même ligne dans mes colonnes C à L
- Je reproduis la même action pour ma deuxième ligne (Chene) puis pour toutes les lignes de mon tableau jusqu'en bas (au cas où j'aurais des données plus bas).
- Enfin je prends les deux cases "Surface régénérée totale" et "surface régénérée fragiles ou diversité" et les colle dans mes colonnes CY et CZ, toujours sur la même ligne
Ainsi j'ai toutes les données de ma placette 1 sur la même ligne dans "Données brutes" puis 1 ligne par placette.
- La macro continue en effaçant mon numéro de placette. Pas les données "Coef" ni "Nbre", je les garde pour tout mon inventaire.
- Dans mon tableau, je remets toutes mes cases à 0 (hors colonne "G", elle se remet à 0 toute seule vu que c'est un calcul). Je n'enlève pas les noms dans ma colonne "Essence". C'est hyper important pour la suite que je garde le même ordre sinon ça foire.
- J'efface enfin les données "Surface régénérée totale" et "surface régénérée fragiles ou diversité".
- Je me remets sur la case placette pour préparer l'encodage de la placette suivante.
Voilà. J'espère que c'est clair et que j'ai bien tout dit.
Y a pas de code pour la protection. Je veux juste que mes collègues ne cassent pas tout.
Re,
OK, j'ai compris
Toutefois une petite question : faut-il obligatoirement que dans la feuille("Données brutes") les placettes soient rangées verticalement de 13 à 1 ou peut-t-on les ranger dans l'ordre ordre (1 à 13) ?
J'attends ta réponse et je regarde cela ce soir
Re,
A vrai dire ça n'a pas grande importance. Je traite les données ensuite dans ma feuille "Variabilité statistique" avec un TCD qui me remet tout ça dans l'ordre.
Top!!! Merci d'avance
Bonsoir CGuillier,
Excuses moi mais j'ai un petit imprévu ce soir donc je reprendrai sans aucun problème ton fichier demain matin
Par souci de facilité je rangerai tes données dans l'ordre crossant (de 1 à 13)
Bonne soirée et à demain
Oh la la ! Pas de problème. C'est un service que je vous demande et vous êtes déjà bien aimables de m'aider!
Bonne soirée et à demain
Bonjour Gguillier,
Voila, ton projet devrait tourner tel que tu le désires
Toutefois j'ai une petite inquiétude en ce qui concerne l'utilisation du numéro de placette :
Dans l'état actuel des choses, l'utilisateur doit déterminer lui même le numéro de placette, ce numéro définira le numéro de ligne de la feuille "Données brutes" où les données de ton formulaire s'inscriront, pas de problème tout fonctionne à merveille
Mais si l'utilisateur se trompe, s'il utilise un numéro déjà utilisé ou un numéro qui ne respecte pas l'ordre croissant, il y aura des problèmes dans la feuille "Données brutes", dans le premier cas une ligne existante sera écrasée, dans le deuxième cas les lignes seront rangées de façon incorrecte.
A toi de voir si on laisse le fichier tel quel ou si on le transforme légèrement pour imposer à l'utilisateur le numéro de Placette
Dans mon code j'ai mis des commentaires afin de t'expliquer ce que je fais, tu peux les supprimer
Attention : je viens de me rendre compte que, involontairement, j'ai effacé les formules des cellules de la colonne D (le calcul de G), il te faut les réécrire
Bonjour Jacky,
Merci pour ce super travail!! C'est génial de m'expliquer dans la fenêtre VBA! Super le message d'erreur en cas d'oubli du numéro!
Il faut pouvoir mettre des numéros dans tous les sens et pas forcément qui respecte l'ordre croissant. Pas très grave si c'est rangé pas dans le bon sens ensuite. En tous les cas de mon coté... Par contre y a t il moyen de remplacer l'écrasement de la ligne par un message d'erreur genre : "ce numéro est en doublon"?
Quelques petites remarques :
- La macro ne vide pas les deux dernières colonnes (Perches A. et PB A.). Si j'osais j'insèrerais : .Range("R8:T17") = "0" tel que :
' on efface tout pour pouvoir entrer de nouvelles données
With Sheets("Formulaire")
.Range("D4") = ""
.Range("G20") = ""
.Range("G22") = ""
.Range("E8:P17") = "0"
.Range("R8:T17") = "0"
End WithEst-ce que c'est ça?
- Par contre, si je re-protège ma feuille ca bug et ça indique "la feuille est protégée bla bla..." malgré la déprotection dans ta macro...
- J'ai remis les formules dans la colonne G (cf. PJ). Par contre, la macro n'exporte pas mes résultats, elle me laisse un 0 dans ces colonnes G1, G2, G3...
- Est-ce possible de replacer le curseur directement dans la case placette à la fin de l'encodage placette, pour aller plus vite?
Merci vraiment pour ton travail. Désolée de répondre si tard, les journées sont longues en ce moment...