Formulaire : Insérer/Maj/Supprimer des données dans des tableaux

Bonjour à tous,

je sollicite votre aide aujourd'hui car je souhaite utiliser un formulaire pour gérer des enregistrements dans des tableaux.

En PJ, je vous ai joins le début de mon travail.

J'ai plusieurs tableaux nommés "PAUL_d" (d pour dépendance), "HELENE_d", "JACQUES_d". Il se peut que j'en ajoute dans le futur.

Chaque personne a donc son tableaux dans lequel elle renseigne de qui elle a besoin, pourquoi, quand et pour quel projet. C'est un fichier partagé et il existe un risque d'accès concurrentiels/corruptions de données.

L'objectif est qu'une personne consulte sur son tableau ce dont elle a besoin mais aussi visualiser les besoins des autres !

Problématique 1: A partir du formulaire, insérer (sans doublons)/maj/supprimer les données dans le bon tableaux. Pour le moment, j'arrive à récupérer les données saisie du formulaire que j'affiche dans une MsgBox. Je pense que c'est complexe car il faut passer par des recherches élaborées à trois critères (Demandeur, Besoin de, Objet) :(

Problématique 2: Ce fichier sera partagé et plusieurs personnes vont l'utiliser. Si j'insère à la fois la ligne pour le demandeur et la ligne pour celui qui est demandé, je m'expose à des écritures concurrente sur une même ligne. Donc j'ai opté pour le faire en deux temps. D'abord que chaque personne travaille sur son tableau et exprime ces besoins. Ensuite j'ai un bouton "Importer les dépendances externes (double clic ici !)" dont j'ai mémorisé les adresses dans ThisWorkBook. Il me suffira de récupérer le nom du tableau dans la cellule de gauche entre les caractères "<< >>" mais peut être qu'il y a plus simple ?

Maintenant je suis ouvert à d'autre idées pour gérer mon besoin plus simplement ?

Je remercie sincèrement ceux qui pourront m'aider

J'ai presque réussi à gérer l'insertion sans doublon, je me heurte à un problème sur la date qu'il n'arrive pas à évaluer correctement.

Si je remplace la date par "test", je n'ai aucun problème.

Private Sub CommandButtonValiderDependance_Click()
    Dim TableauDemandeur As String
'    MsgBox Me.ComboBoxDemandeur & " " & Me.ComboBoxBesoinDe & " " & Me.TextBoxObjetDuBesoin & " " & Me.TextBoxQuand & " " & Me.ComboBoxProjet

    TableauDemandeur = Me.ComboBoxDemandeur & "_d"
'    MsgBox "Recherche de " & Me.ComboBoxDemandeur & " dans " & TableauDemandeur
    With Sheets("Board des dependances").ListObjects(TableauDemandeur).ListColumns(1).Range
        ok = False
        Set ici = .Find(Me.ComboBoxDemandeur, LookIn:=xlValues)
        If Not ici Is Nothing Then ' on a trouvé le Demandeur
            prem = ici.Address
            Do
                MsgBox ici.Offset(0, 1) & " = " & Me.ComboBoxBesoinDe
                If ici.Offset(0, 1) = Me.ComboBoxBesoinDe And ici.Offset(0, 2) = Me.TextBoxObjetDuBesoin And ici.Offset(0, 3) = Me.TextBoxQuand And ici.Offset(0, 4) = Me.ComboBoxProjet Then ok = True ' on a trouvé la ligne déjà renseignée
                If Not ok Then Set ici = .FindNext(ici)      ' sinon on boucle sur les autres lignes Projet
            Loop While Not ici Is Nothing And ici.Address <> prem And Not ok
        End If
    End With

    With Sheets("Board des dependances").ListObjects(TableauDemandeur)
        If ok Then
            MsgBox "Ligne dejà présente"
        Else
            ' on ajoute la ligne
            .ListRows.Add
            Ligne = .ListRows.Count
            .DataBodyRange.Cells(Ligne, 1) = Me.ComboBoxDemandeur
            .DataBodyRange.Cells(Ligne, 2) = Me.ComboBoxBesoinDe
            .DataBodyRange.Cells(Ligne, 3) = Me.TextBoxObjetDuBesoin
            .DataBodyRange.Cells(Ligne, 4) = Me.TextBoxQuand
            .DataBodyRange.Cells(Ligne, 5) = Me.ComboBoxProjet

        End If
    End With

End Sub

Bonjour

Peux-tu compléter ton profil et ajouter ta version Excel

Je pense que le plus simple est que chacun remplisse son tableau dans son classeur et que la restitution se fasse en exploitant ces classeurs via un requête PowerQuery

Bonjour 78Chris

Je vais creuser ta piste !

J'ai mis à jour ma version (2002) , la version de VB est la version 7.1

RE

2002 ? Tu es sûr ? Tu postes un xlsx (2007 minimum) avec des tableaux structurés nommés donc également 2007 minimum

Effectivement dans Fichiers > compte > Informations je vois 2002

Et dans le chemin Office je vois : Office16

ps :c'est une version pro avec office 365

Re

Donc ta version est 365 (et non 2002 ni 2016)

Tu peux donc utiliser PowerQuery

CI-joint :

  • 3 fichiers séparés (tu peux modifier ton Userform pour ne plus mettre le demandeur)
  • la synthèses via PowerQuery des tâches, propres ou demandées

Tout nouveau classeur de même structure dont le nom ne contient pas Dépendance, placé dans le dossier, sera automatiquement dans la synthèse.

Adapter ne nom du dossier puis Données, Actualiser Tout

7dependances.zip (110.80 Ko)

Merci !

Je trouve l'idée très intéressante, cependant je vois 3 inconvénients dans mon contexte :

- Environ 60 personnes donc autant de fichier à créer

- L'importation fonctionne si tous les fichiers sont fermés et enregistrés, je suis certains qu'ils vont oublier de fermer le fichier...

- Je préfère rester sur un fichier central où je pourrai contrôler au fur et à mesure les données entrées et alerter si une correction est nécessaire

En tout cas merci beaucoup pour ta proposition, je suis sur que ça peut m'aider dans d'autres cas (partage au sein de l'équipe) !

Merci !

Je trouve l'idée très intéressante, cependant je vois 3 inconvénients dans mon contexte :

- Environ 60 personnes donc autant de fichier à créer

- L'importation fonctionne si tous les fichiers sont fermés et enregistrés, je suis certains qu'ils vont oublier de fermer le fichier...

- Je préfère rester sur un fichier central où je pourrai contrôler au fur et à mesure les données entrées et alerter si une correction est nécessaire

En tout cas merci beaucoup pour ta proposition, je suis sur que ça peut m'aider dans d'autres cas (partage au sein de l'équipe) !

Utiliser un fichier Modèle xltm pour que chacun crée son ficher en 2 clics est le principe de base... d'autant qu'on n'utilise pas ici le nom du tableau mais celui du classeur pour identifier la personne

La requête fonctionne à partir des fichiers sur le disque même ouverts

Un fichier commun est mono accès donc possibles conflits d'accès (le mode partagé qui a toujours été source de plantages et de perte d'infos est incompatible avec pas mal de choses et notamment toutes les "nouveautés" d'Excel telles que les tableaux structurés que tu as utilisés)

On peut utiliser PowerQuery pour Synthétiser les tableaux d'un même classeur mais je ne l'ai pas proposé du fait du problème d'accès...

La seule solution sans ces inconvénients serait une base de Données (pour 60 même Accès est un peu léger)

Rechercher des sujets similaires à "formulaire inserer maj supprimer donnees tableaux"