Formulaire Obligatoire

Bonjour tout le monde !!

Je viens vers vous pour vous poser une petite question ... j'ai un tableau Excel et sur ce tableau j'aimerai qu'aucune ligne ne puisse être remplie sans passer par un formulaire

Genre j'ouvre mon fichier Excel tout est normal et quand je clique sur une ligne ca m'ouvre un formulaire et je remplie le fichier comme ça !

J'ai trouvé la commande formulaire mais malheureusement pour moi ca ne le rends pas automatique ;)

Je suppose qu'il faut passer par un code VBA non ?

Merci d'avance de votre réponse

Bonjour
Oui il faut passer par du vba

un fichier est TOUJOURS le bienvenu

A+ François

Oui je vais mettre le fichier avec désolé

C'est un fichier qui nous sert à gérer nos ECME

Je me suis lancer aussi pour trouver un moyen de faire un message d'alerte 30j avant la fin de la validité

Bonjour,

Pour le formulaire dont vous parlez, c'est cette commande-ci

Sheets("ECME").ShowDataForm

A lier à un bouton à placer sur votre feuille.
Autre option : le lier à la sélection d'une cellule dans votre feuille. Par exemple, à la sélection d'une cellule non vide de la colonne A

A voir ce que vous désirez

Rem : ce formulaire est souvent oublié mais très simple à utiliser puisque vous n'avez besoin que d'une seule ligne de code pour l'utiliser

NB: Attention à ne pas laisser de lignes lorsque vous utilisez des tableaux au format structuré. Ce n'est jamais à faire et inutile. L'ajout de ligne se fait toujours automatiquement

Cordialement


EDIT : Important : vous devez défusionner votre cellule en B2. Sans quoi le code va renvoyer une erreur. (comme toujours, il faut éviter les fusions, sans quoi c'est souvent les problèmes)
Si vous voulez centrer, sélectionnez vos cellules B2 à Bx, puis allez dans Accueil --> Alignement et choisir "centrer sur plusieurs colonnes" dans l'option Horizontal

Salut bob84

Vous avez bien commencé, dans votre feuille ECME, vous ajoutez l'évènement "SelectionChange"

Dim Tbl As ListObject
Dim CelluleDeclencheur As Range

Private Sub Worksheet_Change(ByVal Target As Range)
  On Error GoTo Fin
  Set Tbl = Me.ListObjects("Tableau1")
  ' Déclenche uniquement lorsque la colonne "Site" est modifiée
  Set CelluleDeclencheur = Intersect(Target, Tbl.ListColumns("Site").DataBodyRange)
  If CelluleDeclencheur Is Nothing Then Exit Sub
  Application.EnableEvents = False
  Application.ScreenUpdating = False
  With Tbl.Sort
      .SortFields.Clear
      .SortFields.Add _
          Key:=Tbl.ListColumns("Type d'équipement").Range, _
          SortOn:=xlSortOnValues, _
          Order:=xlAscending, _
          DataOption:=xlSortNormal

      .Header = xlYes
      .Apply
  End With
Fin:
  Application.ScreenUpdating = True
  Application.EnableEvents = True

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Set Tbl = Me.ListObjects("Tableau1")
  ' Déclenche uniquement lorsque la colonne "Site" est modifiée
  Set CelluleDeclencheur = Intersect(Target, Tbl.DataBodyRange)
  ' Si pas de déclenchement on sort
  If CelluleDeclencheur Is Nothing Then Exit Sub
  ' Message de déclenchement
  MsgBox "Déclenchement"
End Sub

Ensuite, vous passez soit par un USF (un peu compliqué à construire) ou par une feuille "Formulaire" avec les cellules dédiées aux différents champs nécessaires

A+

re

Au fait, que voulez-vous dire par

J'ai trouvé la commande formulaire mais malheureusement pour moi ca ne le rends pas automatique ;)

Crdlt


EDIT : Il y a tout de même un souci avec la commande que je vous ai donnée pour votre fichier. Pour qu'elle fonctionne il faut mettre vos titres du tableau en ligne 1.
Dans votre cas, utilisez plutôt ceci qui fonctionne :

Application.DisplayAlerts = False
CommandBars.FindControl(ID:=860).Execute
Application.DisplayAlerts = True

Vous pouvez mettre aussi ces 3 lignes d'instructions en lieu et place de la ligne MSGBOX "déclenchement" dans le code SLECTIONCHANGE proposé par Excel2FR

Bonjour

Ci joint ma solution

A+ François

Merci à tout les deux pour vos réponses !!!!

@JExceL2FR : merci pour le code je vais tester ça !!

@Dan : je parle de l'onglet questionnaire que j'ai mis dans la barre de tâche (rien de bien sorcier je vous l'accorde lol)

re

@Dan : je parle de l'onglet questionnaire que j'ai mis dans la barre de tâche (rien de bien sorcier je vous l'accorde lol)

Heu.... je ne vois pas mais bon pas grave. Je suppose qu'il s'agit du formulaire dont je parle dans mes messages

Re,

Voici ma solution, simple, basique

A tester tout de même

A+

@JExceL2FR : juste une petite question (encore une dsl) dans mon fichier de base j'avais fais une petite macro pour que ca se classe automatiquement par ordre alphabétique c'est possible de compiler les deux ? car dans votre fichier elle ne se fait plus la ligne reste en derniere position

@Fanfan38 : merci pour le fichier ! ça m'affiche une erreur 308 il faut que je regarde lol

J'ai relancé le programme et je n'ai pas d'erreur

A quelle moment l'erreur

As tu un bouton Débogage (si oui clic dessus pour savoir quelle ligne pose problème)

A+ François

Ahhh c'est Userform1.show c'est parce qu'il faut définir le formulaire ?

Bonjour

C'est sur le fichier de ma réponse ou c'est sur ton futur fichier que tu as des problèmes?

J'ai ajouté le contrôle de date de validité... et le tri... si tu sélectionnes une cellule le formulaire apparait

A+ François

bonjour le fil,

@jExceL2fr,

je trouve que la feuille "ECME" est trop "nerveux", j'aurais mis une protection dessus et sauter vers la feuille "Saisie" uniquement pour la première colonne.

Et comme c'est un tableau structuré, ces lignes vides sont inutiles ou pire. Puis vous pouvez utiliser toutes les possibilités d'un TS, donc inutile de calculer la position, on peut même déplacer ce TS vers une autre feuille sans modifier le code. Juste le numéro du ListRow suffit pour tout faire. Ajouter une ligne, on peut le faire dans la même macro avec Lig=0

Sub ModifEqt(Optional Lig As Long = 0)      ' Position de l'enregistrement
     Dim LO, Indx, N, bDrapeau As Boolean

     Set LO = Range("Tableau1").ListObject   'le tableau
     N = LO.ListRows.Count                   'nombre de lignes
     If Lig < 1 Or Lig > N Then bDrapeau = True: Lig = LO.Range.Row + N + 1     'ajouter une ligne = avec lig=0, alors calculer Lig comme ceci
     Indx = Lig - LO.HeaderRowRange.Row      'index listrow

     ' Afficher la feuille de SAISIE
     With ThisWorkbook.Sheets("Saisie")
          .Range("F1").Value = Indx        ' Inscrire le numéro d'enregistrement
          .Visible = xlSheetVisible
          With .Cells(1, "C").Resize(10)     'plage pour corriger
               If bDrapeau Then              'oubien ajouter (lig=0) oubien lig était hors limites
                    .ClearContents           'rien à coller du tableau, juste RAZ
               Else
                    .Value = Application.Transpose(LO.ListRows(Indx).Range.Value2)      'coller contenu du Listrow & transposer
               End If
          End With
          Application.Goto .Range("A1"), 1
     End With
     ' Masquer la feuille de saisie
     ThisWorkbook.Sheets("ECME").Visible = xlVeryHidden
End Sub

@Fanfan38 : Super merci !! alors ca marche nickel simplement ca m'a occulté aussi la formule de base avec le tri alphabétique peut être que les deux formules ne peuvent cohabiter ensemble je ne sais pas ...

Merci bcp en tout cas

@BsAlv : Merci pour ce code je vais le copier coller dans mon fichier et voir ce que cela donne ;)

Quand tu ajoutes un article les données sont triées.

Pour ajouter une données le scrollbar doit être en bas et une étiquette NOUVEAU apparait en haut à droite

A+ François

Rechercher des sujets similaires à "formulaire obligatoire"