Erreur de compilation

Bonjour à tous,

Tout d'abord, je tiens à préciser que je n'y connait vraiment pas grand chose en programmation mais en bidouillant et en testant, j'arrive généralement à obtenir le résultat escompté.

Là je bloque sur 1 problème :

1- Mon classeur a plusieurs onglets, avec un tableau par onglet. Lorsque je copie le code (déjà écrit et partagé gracieusement) pour l'adapter à un autre onglet, j'ai un message qui s'affiche.

Je pense qu'il s'agit juste d'un problème de doublon (car fonctionne sur un autre classeur à onglet unique) et qu'il suffit (je l'espère) de renommer quelque chose mais quoi ?

Autre petite question, quelle(s) variable(s) modifier ou ajouter pour faire commencer le tableau ailleurs qu'en A1 (B2, F6, ou autres) ?

Merci d'avance pour vos lumières

Bonjour mvsr49 et

Il serait bon que tu lises où relise : https://forum.excel-pratique.com/annonces/explications-et-regles-a-respecter-t13.html

Nous mettre ton code, serait mieux qu'une copie d'écran

Ceci dit, nom ambigu détecté, veut dire que tu as déjà ce nom quelque part dans ton VBA

A+

Salut BrunoM45,

Il serait bon que tu lises où relise : annonces/explications-et-regles-a-respecter-t13.html

Au temps pour moi j'aurai dû commencer par là. Maintenant c'est chose faite.

Nous mettre ton code, serait mieux qu'une copie d'écran

Il est vrai que cela serait plus utile donc c'est fait aussi.

Ceci dit, nom ambigu détecté, veut dire que tu as déjà ce nom quelque part dans ton VBA

Ça je m'en doutais un peu puisque j'ai fais un simple copier/coller du code de mon 1er onglet que j'ai légèrement modifier pour adapter ma userform . Mais le problème est justement que je ne sais pas comment régler ça.

Re,

Il faut déclarer certaines variables publiques dans un module

A+

Bonjour,

Hum...

Je ne suis pas du tout d'accord avec Bruno :

Sans vouloir ergoter et tout détailler ni vouloir passer pour le spécialiste que je ne suis pas... Il s'agit de Userform qui n'ont à priori rien en commun... Mais qui pourrait bien dans d'autres situations un jour ou l'autre se passer la main entre eux. Il n'y a pas lieu de mettre en commun les constantes et variables.

Il faut absolument respecter les déclarations d'origine sauf pour Enum d'autant que l'auteur déclarait bien l'intention "de portée module" .

Evidemment c'était oublier que par exception Enum est de portée Public, il suffit donc de mettre devant (dans chacun des UserForm) le mot clef Private et le tour est joué :

' Déclaration des variables et constantes de portées module
Private Enum Status ' Constantes énumérées Status

Evidemment comme ici les constantes sont identiques on pourrait être tenté de les regrouper, ce qui à mon avis n'offre aucun intérêt sauf à jeter la confusion.

Mais en aucun cas les variables ne peuvent être mis en commun en particulier AppTitle dont la valeur est modifiée dans le code. (Ce qui est somme toute la vocation des variables ! )

Cordialement,

A+

BrunoM45, galopin01,

Wouha merci à vous pour ce que vous faites.

Prendre de votre temps pour aider est une chose, le faire à vitesse "V" en est une autre. (et en plus ça fonctionne )

Du coup je vais abuser (un tout petit peu)

1/ Dans mes formulaires j'ai des boutons d'options '"Mr" et "Mme".

L'information est correctement incrémentée dans mes tableaux mais à l'ouverture des formulaires, l'option reste bloquée sur "Mr" (même si c'est une femme) que ce soit en cliquant sur le bouton "Suivant" pour faire défiler les noms ou dans "Modification".

Par contre j'ai rajouté des boutons d'options "CDI" et "CDD" dans mon formulaire "Salariés" et eux fonctionnent correctement.

D'où vient le problème, le code étant le même ?

2/ (et après j'arrête de vous embêter) Quelle(s) variable(s) modifier ou ajouter pour faire commencer le tableau ailleurs qu'en A1 (ex : B2, F6, etc..) ?

Merci.

Bonjour,

Pour la question 1 le problème vient de UCase : Cela suppose que vous référencez l'expression en majuscule, sans quoi ça ne peux jamais être vrai... :

   If UCase(.Cells(RecordNumber, 1)) = "MME" Then Me.optMme.Value = True Else Me.optMr.Value = True
   If UCase(.Cells(RecordNumber, 6)) = "CDD" Then Me.optCDD.Value = True Else Me.optCDI.Value = True

Pour la 2ème question, bien que ce soit à la rigueur possible ça me semble tout à fait contre indiqué.

Une base de donnée devrait toujours commencer à la première colonne et à la première ligne.

Il n'y a aucune (bonne) raison pour que ça change...

Si vous avez besoin de place en haut pour mettre vos boutons, un titre ou un logo d'entreprise par exemple, donnez plus de hauteur à la première ligne. et inspirez vous de mon modèle.

Conseil 1 : Evitez également les information parasites sur les autres colonnes des feuilles base de données. (et à plus forte raison plus bas dans la feuille... ! )

Conseil 2 : Une base de donnée qui se respecte commence toujours par une colonne Index (sans doublons) en colonne A : Vous n'auriez pas du la supprimer même si vous n'en comprenez pas encore l'utilité.

A+

Bonjour,

1/ Merci.

2/ Ok, je ne pensais pas que cela était contre indiqué. Je vais donc m'inspirer de votre modèle.

Conseil 1 : Qu'appelez-vous "informations parasites" ?

Conseil 2 : Là je nage complètement, désolé. Je ne vois pas ce que j'ai supprimé. Est-ce le fait d'avoir modifier dans le code l'ordre des colonne ?

  Me.txtSite = .Cells(RecordNumber, 4)
  Me.txtSite2 = .Cells(RecordNumber, 5)
  Me.txtNom = .Cells(RecordNumber, 2)
  Me.txtPrénom = .Cells(RecordNumber, 3)
  Me.txtQualif = .Cells(RecordNumber, 7)
  Me.txtTel = .Cells(RecordNumber, 8)
  Me.txtAdress = .Cells(RecordNumber, 9)
  Me.txtCP = .Cells(RecordNumber, 10)
  Me.txtVille = .Cells(RecordNumber, 11)
   If UCase(.Cells(RecordNumber, 1)) = "MME" Then Me.optMme.Value = True Else Me.optMr.Value = True
   If UCase(.Cells(RecordNumber, 6)) = "CDD" Then Me.optCDD.Value = True Else Me.optCDI.Value = True

bonjour,

Information parasite : Tout ce qui ne fait pas partie intégrante de la base de donnée.

C'est plus une position de principe qu'une nécessité stricte.

Dans la pratique on déroge souvent à cette règle, mais c'est le plus souvent le fait d'utilisateurs inexpérimentés qui ne veulent pas se casser la tête et qui en réalité se compliquent souvent la vie pour pas grand chose.

Si vous avez des informations annexes à mettre, des listes, il n'est pas compliqué de les mettre dans une feuille de paramètres séparée.

Une saine habitude est de considérer qu'une (très bonne) base de donnée n'a pas besoin d'être vue de l'utilisateur !

A+

Re,

Je ne mets le nez dans le cambouis que très très ponctuellement, donc il s'en va dire que pour l'inexpérience c'est plus qu'avéré.

Je prends un nouveau poste début octobre et il s'agit surtout de me créer un support rien de plus mais j'aimerai autant qu'il soit fonctionnel.

Merci encore.

Bonjour,

Vous avez bien fait c'est une excellente base de départ, n'hésitez pas à revenir sur ce sujet si vous avez besoin de personnalisation.

Pour quelle raison vouliez vous pouvoir déplacer la base ? Pouvez vous préciser l'intention.

A+

Bonjour,

C'était purement esthétique. Pouvoir comme vous le disiez, insérer un logo et un titre.

Re,

Si je peux me permettre un dernier conseil... Qui ne vous apportera aucune contrainte et que des facilités.

Si vous n'êtes pas déjà trop avancé dans votre véritable fichier, supprimez toutes vos mises en formes bordures, couleurs et autres formats conditionnels sur les 2 feuilles et utilisez (Dans le ruban, à coté de mise en forme conditionnelle) Mettre sous forme de tableau

Cette mise en forme évite d'avoir à formater inutilement toute une feuille (Le tableau s'étend automatiquement à chaque ligne ajouté)

et cela évite une programmation lourde quand il s'agit de récupérer les formats...

Et je me limite volontairement sur les avantages qu'il y a à utiliser ces tableaux !

A+

Merci je prends note de cette remarque aussi

Tant que j'y pense, je souhaite pouvoir rentrer les horaires de mes salariés (matin et/ou après-midi) toujours sur le même principe (avec formulaire et incrémentation dans un tableau).

Une incrémentation sur 2 lignes comme ci-dessous est-elle possible ?

horaire

Pour donner un format heure aux TextBox, la procédure est-elle semblable à celle forçant l'écriture en majuscule ?

bonsoir,

ça dépend ce que vous en faite :

Si c'est juste pour l'imprimer et l'afficher sur le panneau d'affichage ou une feuille d'émargements, peu importe...

Si vous devez l'utiliser ensuite pour faire des calculs utilisez l'une ou l'autre des solutions proposée dans le classeur joint.

Les TextBox comme leur non l'indique contiennent du Texte la mise en forme n'est que pour le confort visuel.

Pour effectuer des calculs et transférer sur la feuille de calcul vous devez à chaque fois opérer une conversion au format date/heure.

(En particulier si vous devez opérer des calculs sur ces nombres...)

Le classeur joint n'indique pas comment transférer la saisie sur la feuille de calcul. En revanche il vous fournira de bonnes indications sur le contrôle de saisie et la manipulation des textBox.

Ce modèle ne vous était pas destiné à l'origine et effectue en plus des conversion destinées à faires des calculs pour ceux qui ont des horaires de nuit 20h00/ 6h00 par exemple, mais peu importe le raisonnement est le même et il traite parfaitement les horaires normaux...

A+

Il s'agit juste de pouvoir avoir accès rapidement à l'information pas de l'imprimer.

Par contre là c'est un brin compliqué pour moi pour ajouter d'autres TextBox.

Mais je vais faire des essais, à force j'arriverai bien à trouver.

En tout cas merci pour tous vos conseils et informations

Rechercher des sujets similaires à "erreur compilation"