dispatcher données de BDD sur classeur et onglet

wifi7768

XLDnaute Nouveau
Bonjour,

Je suis nouveau sur le forum et débutant en excel...
J'ai une BDD alimentée par un USF. Cette BDD comporte 8 colonnes, avec la première colonne "procéssus" et la 2eme colonne "sous-processus".
Je souhaiterais pouvoir apres avoir renseigné mon USF pour alimenter ma BDD, que les 2 premières colonnes soient riées dans un classeur X existant (en fonction du nom (4 possibilités) de la cellule de la 1ere colonne "processus" ) et dans un onglet existant, dans ce fameux classeur X , fonction du nom des cellules de la 2eme colonne (sous processus).
Merci de votre aide.

Je joins le code du formulaire pour remplir la BDD.
Le fichier excel est trop lourd pour être posté :(
Code:
Private Sub ajout_donnes_Click()

    
    Worksheets("donnees").Visible = True 'afficher la feuille "donnees"
    Worksheets("interface").Visible = False 'afficher la feuille "interface"
    Worksheets("documents").Visible = False 'masquer la feuille "document""
 
    Unload Me 'Fermer la boite de dialogue
    ajoutdon.Show 'afficher la boite de dialogue "ajoutdon"
    
End Sub

Private Sub ajouter_doc_Click()


 Worksheets("documents").Unprotect ("a") 'verrouiller la feuille "documents"


'on vérifie si la zone de texte n'est pas vide
    If titre.Text = "" And Not (combo_domaine = "") Then
        MsgBox ("Entrer le nom du document")
        Exit Sub
    End If
    
    
    If combo_domaine.Text = "" And Not (titre = "") Then
        MsgBox ("Entrer le domaine du document")
        Exit Sub
    End If

    If combo_domaine.Text = "" And titre.Text = "" Then
        MsgBox ("Entrer le domaine et le titre du document")
        Exit Sub
    End If



'On vérifie si le domaine n'existe pas

For i = 1 To (Worksheets("documents").Cells(1, 1))
If titre = Worksheets("documents").Cells(i, 4) Then
     MsgBox ("ce documents existe déjà")
        Exit Sub
    End If

Next



' recherche de la ligne vide
    ligne = 2
    Do While Cells(ligne, 4).Text <> ""
        ligne = ligne + 1
    Loop
      Cells(ligne, 2) = combo_domaine 'ajout du nom du domaine
      Cells(ligne, 3) = combo_SD 'ajout du nom du sous-domaine
      Cells(ligne, 4) = titre 'ajout du nom du document
      Cells(ligne, 5) = auteur1 'ajout du nom de l'auteur
      Cells(ligne, 6) = auteur2 'ajout du nom de l'auteur2
      Cells(ligne, 7) = ncbox4 'ajout de la date
      Cells(ligne, 8) = TextBox1 'ajout de la date
      Cells(ligne, 9) = biblio 'ajout de la bibliographie
      Cells(ligne, 10) = ncBox5 'ajout de la date revision
      
      Worksheets("documents").Rows(ligne).Select
      Selection.EntireRow.Hidden = False
      
    Worksheets("documents").Protect ("a") 'verrouiller la feuille "documents"

MsgBox ("le nouveau document a bien été ajouté à la liste")

'Vider les zone de saisie
combo_domaine = ""
combo_SD = ""
titre = ""
auteur1 = ""
auteur2 = ""

End Sub
Private Sub annuler_Click() 'retourner à l'acceuil de la base de données
    
    Worksheets("donnees").Visible = False 'masquer la feuille "donnees"
    Worksheets("interface").Visible = True 'afficher la feuille "interface"
    Worksheets("documents").Visible = False 'masquer la feuille "document""
    Unload Me 'Fermer la boite de dialogue
    
End Sub

Private Sub auteur1_Change()

End Sub

Private Sub auteur2_Change()

End Sub

Private Sub combo_domaine_Change()
If combo_domaine.Value = "" Then
        combo_SD.RowSource = ""
        combo_SD.Value = ""
    Else
        Select Case combo_domaine.ListIndex
            Case 0
                combo_SD.RowSource = "Liste!B1:B6"
            Case 1
                combo_SD.RowSource = "Liste!C1:C6"
            Case 2
                combo_SD.RowSource = "Liste!D1:D10"
            Case 3
                combo_SD.RowSource = "Liste!E1:E7"
        End Select
    End If
End Sub


Private Sub combo_SD_Change()

End Sub

Private Sub Label6_Click()

End Sub

Private Sub Label8_Click()

End Sub

Private Sub Label9_Click()

End Sub

'Afficher date d'enregistrement dans formulaire
Sub Affich_date()
ncbox4.Value = Format(DateSerial(spban.Value, spbmois.Value, spbjour.Value), "dd/mm/yyyy")
End Sub


Private Sub ncbox4_Change()

End Sub

Private Sub spban_Change()
    Affich_date
End Sub
Private Sub spbjour_Change()
    If spbjour.Value = 0 Then
        spbjour.Value = 31
    ElseIf spbjour.Value = 32 Then
        spbjour.Value = 1
    End If
    Affich_date
End Sub

Private Sub spbmois_Change()
    If spbmois.Value = 0 Then
        spbmois.Value = 12
    ElseIf spbmois.Value = 13 Then
        spbmois.Value = 1
    End If
    Affich_date
End Sub
'Afficher date d'enregistrement dans formulaire
Sub Affich_date1()
ncBox5.Value = Format(DateSerial(spban1.Value, spbmois1.Value, spbjour1.Value), "dd/mm/yyyy")
End Sub


Private Sub ncbox5_Change()

End Sub

Private Sub spban1_Change()
    Affich_date1
End Sub
Private Sub spbjour1_Change()
    If spbjour1.Value = 0 Then
        spbjour1.Value = 31
    ElseIf spbjour1.Value = 32 Then
        spbjour1.Value = 1
    End If
    Affich_date1
End Sub

Private Sub spbmois1_Change()
    If spbmois1.Value = 0 Then
        spbmois1.Value = 12
    ElseIf spbmois1.Value = 13 Then
        spbmois1.Value = 1
    End If
    Affich_date1
End Sub
Private Sub TextBox1_Change()

End Sub

Private Sub titre_Change()

End Sub

Private Sub UserForm_Activate()

    For i = 2 To (Worksheets("donnees").Cells(2, 1) + 1) 'remplir la combobox domaine
        combo_domaine.AddItem Worksheets("donnees").Cells(i, 2)
    Next
    
    For i = 2 To (Worksheets("donnees").Cells(2, 4) + 1) 'remplir la combobox sous-domaine
        combo_SD.AddItem Worksheets("donnees").Cells(i, 5)
    Next

    For i = 2 To (Worksheets("donnees").Cells(2, 7) + 1) 'remplir les comboboxs auteur
        auteur1.AddItem Worksheets("donnees").Cells(i, 8)
        auteur2.AddItem Worksheets("donnees").Cells(i, 8)
    Next
    
    
    
biblio.AddItem "VERSION" 'ajouter la valeur "X" à la liste de choix

End Sub

A bientôt.
 

Staple1600

XLDnaute Barbatruc
Re : dispatcher données de BDD sur classeur et onglet

Bonjour à tous

wifi7768
...
Je joins le code du formulaire pour remplir la BDD.
Le fichier excel est trop lourd pour être posté :(
...
A bientôt.
On a pas besoin de ton fichier original mais d'une copie allégée (surtout sans données confidentielles)
Dans le cas présent:
Ton classeur modifié ainsi:
  • La feuille donnees avec seulement une dizaine d'enregistrements (soit 11 lignes)
  • La feuille documents qui sera elle aussi allégée
  • Ton userform (et bien sur dedans le code VBA utilisé)
On peut se passer de la feuille interface pour le moment, ainsi de toutes les fioritures inutiles en "période de test" comme les couleurs, les bordures, les images etc...
  • Une fois ton fichier "amaigri", fermes Excel, clic-droit sur ce qui est devenu ton fichier exemple
    -> Envoyer vers dossiers compressés
Pour finir joins à ta discussion le fichier *.zip ainsi obtenu, et tu verras qu'il passera sans problème sur le forum ;)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : dispatcher données de BDD sur classeur et onglet

Bonjour wifi7768

Merci d'avoir joint un fichier que je vais aller voir de ce pas ;)

EDITION: Je viens de l'ouvrir... et horreur!! ... il y encore toutes ces cochoncetés inutiles :rolleyes::rolleyes:
(voir mon précédent message)

Néanmoins je m’attelle à essayer de t'aider de cet autre pas ;)

PS: Masquer la feuille interface, ce n'est pas la supprimer et donc cela n’allège en rien le classeur :rolleyes:
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : dispatcher données de BDD sur classeur et onglet

Bonsoir à tous

wifi7768
Quand tu postes ta question sur plusieurs forums, penses à le signaler, stp.
Cela permets d'éviter de chercher des solutions si la question a été résolue (ou en voie de l'être) Ce lien n'existe plus.

De ton côté, as-tu progressé ?
Quelles pistes as-tu suivies ?

J'ai quelques petites précisions à te demander:
Je souhaiterais pouvoir apres avoir renseigné mon USF pour alimenter ma BDD, que les 2 premières colonnes soient riées dans un classeur X existant (en fonction du nom (4 possibilités) de la cellule de la 1ere colonne "processus" ) et dans un onglet existant, dans ce fameux classeur X , fonction du nom des cellules de la 2eme colonne (sous processus).
  • Quel est le nom de ce classeur X?
  • Quel est le nom de l'onglet?
  • Pourrais-tu, stp, joindre un exemple du résultat final (fait manuellement) de ce que tu souhaites obtenir car j'ai du mal à comprendre ce que tu souhaites faire exactement?
Merci d'avance.

PS: Il manque l'userform nommé ajoutdon dans ta PJ.
VB:
Private Sub ajout_donnees_Click() 'ajouter une donnée
    Worksheets("donnees").Visible = True 'afficher la feuille "donnees"
    Worksheets("interface").Visible = False 'masquer la feuille "interface"
    Worksheets("documents").Visible = False 'masquer la feuille "documents"
    ajoutdon.Show 'donc bug ici
End Sub

EDITION: Bonsoir Sieur kjin ;)
Nous étions dimanche, alors j'ai mis ma casquette de dilettante prolixe en attendant l'hypothétique retour de wifi7748...:rolleyes:
 
Dernière édition:

wifi7768

XLDnaute Nouveau
Re : dispatcher données de BDD sur classeur et onglet

Bonjour,

Non, je n'ai pas progréssé...J'ai pourtant cherché..mais trop débutant en VBA.
Je poste donc un zip avec l'userform ajoutdon, et un fichier excel d'exemple pour le processus réalistaion (je souhaiterais normalement 4 fichiers excel nommés chacun au nom des processus Managament, amélioration, réalisation et support).
Dans chaque fichier excel, des onglets au nomdes sous-processus correspondants au processus en question.
Ainsi à partir de la BDD , un tri des documents à fin de la saisi, en fct du processus et sous-processus dans le classeur excel en question.
Merci encore de votre aide.
 

Pièces jointes

  • M SD EN 07 V2 liste SD ajout.zip
    158.1 KB · Affichages: 57
  • Management.xls
    45 KB · Affichages: 76
  • Management.xls
    45 KB · Affichages: 91
  • Management.xls
    45 KB · Affichages: 88
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : dispatcher données de BDD sur classeur et onglet

Bonjour à tous

wifi7768
Il faut joindre des classeurs sans données confidentielles
(cf. la feuille Direction de ton classeur Management.xls)
Rédacteur/vérificateurApprobateur
Dr D. D******kZ***** V***c

Édites ton précédent message et remplaces ta PJ par une PJ contenant des classeurs anonymisés, stp.

Pour revenir à ta création de fichier, je serai plus disponible pour t'aider en fin d’après-midi.
(retour au taf d'ici 30 minutes)
 

wifi7768

XLDnaute Nouveau
Re : dispatcher données de BDD sur classeur et onglet

Bonsoir à Tous, Bonsoir Staple 1600

J'ai tenté de passer par l'enregistrement d'une macro en ayant déterminé préalablement les critères (processus) mais ce n'est pas du tout une réussite...cela ne fonctionne pas du tout..:(
'
Code:
sub dispatcher()
'
' dispatcher Macro
'

'
    Range("B58:B87").Select
    Sheets("Feuil1").Select
    Range("A1:A4").Select
    ActiveWorkbook.Names.Add Name:="processus", RefersToR1C1:= _
        "=Feuil1!R1C1:R4C1"
    ActiveWorkbook.Names("processus").Comment = ""
    Sheets("documents").Select
    Range("B46:B76").Select
    Application.WindowState = xlMinimized
    Windows("M SD EN 07 V0 liste des documents du SD essai 2.xls").Activate
End Sub


A bientôt
 

Staple1600

XLDnaute Barbatruc
Re : dispatcher données de BDD sur classeur et onglet

Bonsoir à tous

wifi7768
Pendant que mon chou cuit, je vais pouvoir faire des essais sur ton fichier. ;)

NB: J'attends toujours de savoir quel est ce classeur X (son nom?) et le nom de l'onglet.
Est-ce que ce classeur est déjà ouvert ou pas ?

N'oublie pas que je ne suis pas dans ta tête, et que par conséquent tout cela n'est pas aussi évident que ce l'est pour toi ;)

PS: Merci d'avoir anonymiser tes fichier ;)
 
Dernière édition:

wifi7768

XLDnaute Nouveau
Re : dispatcher données de BDD sur classeur et onglet

Bonsoir Staple 1600,

Le classeur nommé X devrait correspondre soit au processus (colonne B de mon fichier initial dans la feuille "documents") Management, amélioration, réalisation, support.
Donc 4 classeurs.
Chaque classeur contient divers onglets correspondants au sous-processus (colonne C de mon fichier "documents").
classeur management, onglets direction, enreg archives, info.comm..etc..
classeur amélioration onglets amélioration, dysfonct, evaluation, mesures...
etc..pour les 2 autres classeurs (réalisation et support)
Les classeurs ne sont pas ouverts. C'est au moment ou j'alimente la BDD principale avec mon USF, et que je ferme le USF, que il devrait y avoir le dispatching dans les divers classeurs en fonction du nom du processus(classeur) et en fonction du sous-processus (onglet ).
Pas simple à expliquer...désolé...

Merci.
 

Staple1600

XLDnaute Barbatruc
Re : dispatcher données de BDD sur classeur et onglet

Bonsoir à tous

wifi7758
Comme j'ai peu de temps dispo en cette fin de mois, j'avance lentement sur ton projet (et avec ma comprenette difficile et diffuse des choses :rolleyes::eek::p)
Pour vérifier que je ne m'égare pas en route, peux-tu, stp, importer* dans un classeur vierge
(dans lequel tu auras crée une feuille nommée documents, protégée par le mot de passe a)
le module et l'userform contenu dans la pièce jointe de ce message ?
Ensuite lance la macro nommée TestUSF() et regarde notamment l'utilisation des Arrays pour remplir les Combobox et l'utiliation de la proprité Tag pour boucler sur les controles qui nous intérresssent.
Je te laisse étudier tout cela.
Si tu y trouves intérêt, je poursuivrai plus avant l'aventure, sinon je privilégierai d'utiliser mon temps libre pour le taf ;)
(date de clôture budgétaire plus très loin désormais, donc un peu overbooké ces temps-ci ;) )

NB: *Dans VBE, faire Fichier/Importer et choisir les fichiers *.frm et *.bas qui auront été dézippés dans le répertoire de ton choix.
Si difficulté à réaliser cet import, voir dans l'aide VBA (touche F1) ou tutos disponibles sur le net à foison.
 

Pièces jointes

  • wifi7758.zip
    2.7 KB · Affichages: 67

wifi7768

XLDnaute Nouveau
Re : dispatcher données de BDD sur classeur et onglet

Bonjour à Tous,
Bonjour Staple 1600

Merci pour ton travail.
J'ai testé comme tu me l'as indiqué, cela fonctionne parfaitement pour constituer la bdd des documents.
En fait à la fermeture du userform, serait-il possible de trier dans 4 nouveaux classeurs (non ouverts, mais existants et créés auparavant) en fonction du type de processus (Management, amélioration, réalisation, support) les données de la BDD initiale ainsi constituée.
Les feuilles de chaque classeur correspondraient à chaque sous processus.
Merci de ton aide surtout en cette période overbookée.

bonne journée.
 

Discussions similaires

Statistiques des forums

Discussions
312 176
Messages
2 085 967
Membres
103 070
dernier inscrit
jujulop