Création d'onglets à partir d'une base de données et récupération d'informations

fabprovost

XLDnaute Nouveau
Bonjour,:)
J'ai une base de données comportant plusieurs informations. Je souhaite à partir de cette base de données créer un onglet pour chaque ligne et récupérer les infos correspondantes.

Exemple :1 onglet principal nommé "BDD"comportant ces informations :

A B C D E
1 N° de dossier Nom Prénom Age taux endettement
2 2012123 Martin Jules 30 33 %
3 2012523 Dupont Henri 28 24 %
4 2012188 Bernard Joel 47 0 %
5 2012224 Hollande Nicolas 52 15 %
6 2012985 Sarkozy François 48 40 %

Je souhaite créer un onglet pour chaque numéro de dossier, qui reprendrait les informations relatives au dossier (nom, prénom, âge et tx d'end.) et qui les insererait à des endroits prédéfinis.

Exemple de résultat attendus :
La macro créée un nouvel onglet nommé "2012123"
Dire à la macro << tu prends le nom de l'onglet BDD correspondant au dossier 2012123 et tu l'insert en cellule A2 du nouvel onglet 2012123 créé >>, << tu prends le prénom de l'onglet BDD correspondant au dossier 2012123 et tu l'insert en cellule B2 du nouvel onglet 2012123 créé >>, << tu prends l'âge de l'onglet BDD correspondant au dossier 2012123 et tu l'insert en cellule C2 du nouvel onglet 2012123 créé >>, << tu prends le tx d'end. de l'onglet BDD correspondant au dossier 2012123 et tu l'insert en cellule D2 du nouvel onglet 2012123 créé >>.

La macro créée un nouvel onglet nommé "2012523"
Dire à la macro << tu prends le nom de l'onglet BDD correspondant au dossier 2012523 et tu l'insert en cellule A2 du nouvel onglet 2012523 créé >>, << tu prends le prénom de l'onglet BDD correspondant au dossier 2012523 et tu l'insert en cellule B2 du nouvel onglet 2012523 créé >>, << tu prends l'âge de l'onglet BDD correspondant au dossier 2012523 et tu l'insert en cellule C2 du nouvel onglet 2012523 créé >>, << tu prends le tx d'end. de l'onglet BDD correspondant au dossier 2012523 et tu l'insert en cellule D2 du nouvel onglet 2012523 créé >>.

Etc....

Bien entendu, il s'agit ici d'un exemple assez simple car ma bdd contient en réalité plusieurs centaines de lignes et de colonnes.
Pouvez-vous m'aider car je suis un débutant en macro....
J'espère avoir été assez clair.
Par avance Merci
 

Nairolf

XLDnaute Accro
Re : Création d'onglets à partir d'une base de données et récupération d'informations

C'est un premier jet à améliorer, mais teste la macro du module 1 et dis-moi si c'est ce que tu voulais.
 

Pièces jointes

  • Classeur1macro onglet_NAirolf.xls
    42 KB · Affichages: 74
  • Classeur1macro onglet_NAirolf.xls
    42 KB · Affichages: 79
  • Classeur1macro onglet_NAirolf.xls
    42 KB · Affichages: 80

fabprovost

XLDnaute Nouveau
Re : Création d'onglets à partir d'une base de données et récupération d'informations

Merci parfait c'est exactement ça !!
Peux-tu stp maintenant me "l'expiquer" pour que je la reproduise sur mon fichier à traiter et que je l'adapte (par exemple changer les cellules de destinations des nouveaux onglets)
merci encore
 

Nairolf

XLDnaute Accro
Re : Création d'onglets à partir d'une base de données et récupération d'informations

Quelques éléments ci-dessous.
Code:
Sub sheet_autocreate()

'boucle sur le nombre de cellules de la colonne A ayant une valeur non nulle
For i = 1 To WorksheetFunction.CountA(Range("A:A")) - 1

'ajout d'une feuille en dernière position en utilisant le nombre de feuilles déjà existantes    
    Worksheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Select

'renomme l'onglet ajouté avec la valeur de la cellule de ligne i+1 et de colonne 1
    ActiveSheet.Name = Sheets("BDD").Cells(i + 1, 1).Value

' j'ai mis une boucle jusqu'à 5 comme ça, mais cette valeur correspond à ton nombre de colonnes copiées (on pourrait utiliser un CountA() aussi)
    For j = 1 To 5
        
'ajout de la ligne d'en-tête
        ActiveSheet.Cells(1, j) = Sheets("BDD").Cells(1, j + 1).Value
'ajout de la ligne correspondante à l'onglet
        ActiveSheet.Cells(2, j) = Sheets("BDD").Cells(i + 1, j + 1).Value
        
    Next
    
Next

End Sub
 

fabprovost

XLDnaute Nouveau
Re : Création d'onglets à partir d'une base de données et récupération d'informations

Merci pour ces éléments de réponse.
J'affine maintenant ma demande. En fait, il faudrait réorganiser le résultat à partir d'une feuille modèle. Je joins un exemple dans le fichier excel.
Objectif : il faudrait créer un onglet qui reprendrait la feuille modèle pour chaque ligne. La macro renommerait chaque nouvel onglet avec le numéro de dossier de chaque ligne et alimenterait ce modèle. De plus, dans la feuille modele, il faudrait que la macro effectue des calculs simples (division, pourcentage,...) dans certaines cellules.
J'espere avoir été assez clair.
Merci
 

Pièces jointes

  • Classeur1macro onglet_NAirolf.xls
    47.5 KB · Affichages: 58
  • Classeur1macro onglet_NAirolf.xls
    47.5 KB · Affichages: 61
  • Classeur1macro onglet_NAirolf.xls
    47.5 KB · Affichages: 59

Nairolf

XLDnaute Accro
Re : Création d'onglets à partir d'une base de données et récupération d'informations

C'est assez simple, il te suffit de remplacer dans la feuille modèle, de faire les calculs que tu souhaites et dans le code:
- Worksheets.Add par Worksheets("Feuille modèle").copy
- mettre les coordonnées des nouvelles cellules de destination
Et voilà!
 

fabprovost

XLDnaute Nouveau
Re : Création d'onglets à partir d'une base de données et récupération d'informations

Ok ca marche.
Juste une petite précision : comment fonctionne la mise à jour des nouvelles cellules de destination (i, j ...j+1...) je ne comprends pas tout. Comment dire : tu met le contenu de la cellule B3 dans le nouvelle feuille modèle cellule D12 par exemple.
Encore merci de ton aide.

Comme dit un proverbe chinois : "Pose une question tu seras idiot 5 minutes, ne la pose pas, tu seras idiot toute ta vie."
 

Nairolf

XLDnaute Accro
Re : Création d'onglets à partir d'une base de données et récupération d'informations

En fait comme tu ne veux plus mettre les valeurs à la suite les unes des autres tu ne peux plus faire faire ça par la boucle j, tu es obligé de le faire à la main.

Edit: J'aime bien ton proverbe chinois.
 

Nairolf

XLDnaute Accro
Re : Création d'onglets à partir d'une base de données et récupération d'informations

En fait j'ai écrit la boucle j pour n'avoir à écrire que: ActiveSheet.Cells(2, j) = Sheets("BDD").Cells(i + 1, j + 1).Value.
Au lieu d'avoir à écrire:
ActiveSheet.Cells(2, 1) = Sheets("BDD").Cells(i + 1, 2).Value
ActiveSheet.Cells(2, 2) = Sheets("BDD").Cells(i + 1, 3).Value
ActiveSheet.Cells(2, 3) = Sheets("BDD").Cells(i + 1, 4).Value
...
Ce qui n'a aucun intérêt car les valeurs sont ordonnées de façon identique dans les deux fichiers.

Par contre, si tu as des positions "aléatoire" entre les fichiers, tu es "obligé" de passer par toutes ces lignes de code.

On pourrait trouver une solution par une recherche sur les en-têtes, mais pour peu de valeur c'est un peu lourd, par contre si tu dois le faire sur une centaine de champ ça vaut le coup de le faire.

En espérant ne pas t'avoir embrouillé.
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof