XL pour MAC Création de feuille selon un modèle et report des données automatiques

NikoBarr

XLDnaute Nouveau
Bonjour,

Je suis en train de découvrir excel et ses fonction plus avancées que juste celles d'un tableur.

Ça fait un moment que je cherche et que j'essaie d'adapter des morceaux de code pour obtenir ce que je veux.

Sur la feuil1, j'ai un tableau avec des données.
Avec la création d'une nouvelle entrée (nom en B2) je voudrais créer une nouvelle feuille selon le modèle (feuil2) dont le nom est celui rentré en B2
Et les données rentrées dans le tableau se reportent dans des cellules de la feuille créée

En espérant avoir été clair...

je vous joint le fichier,

D'avance merci votre attention et votre aide!
 

Pièces jointes

  • registre elevage.xls
    101 KB · Affichages: 64

youky(BJ)

XLDnaute Barbatruc
Bonjour,
Bienvenu ici pour ton 1er message.
Voici de retour ton fichier avec une macro qui s'effectue quand tu fais un double_click sur une ligne qui est remplie.
Il te faudra complèter cette macro pour les cases restantes (explication en macro)
Un click droit sur Registre et visualiser le code.
Bon début dans la prise de tête des macros mais finalement c'est simple.
je viens de rajouter un fichier en .xls version2003 au cas ou
Bruno
 

Pièces jointes

  • registre elevage.xlsm
    28.7 KB · Affichages: 59
  • registre elevage.xls
    82.5 KB · Affichages: 57

NikoBarr

XLDnaute Nouveau
Merci beaucoup pour cette aide plus que précieuse!
En effet je pense que ce n'est pas si compliqué une fois qu'on a intégré les bases du code et qu'on fait preuve de logique, mais je suis loin de maitriser les subtilité des macros.

J'ai bien rentré l'ensemble des lignes et essayé tout ça. ça marche exactement comme je veux.
Par contre j'aurais besoin d'une ou deux précision ... et je m'en excuse par avance...

1- est il possible d'actualiser une feuille déjà créée après avoir modifié la ligne "source" sur la feuille1?

2- j'ai dans un deuxième temps masqué la feuille "modele" mais lorsque j'ai voulu exécuter la macro, ça n'a pas fonctionné comme il faut... Et par sécurité je préfèrerais que la feuille "modele" puisse rester masquée. Ça évitera des modifications intempestive par un tiers qui veut remplir une nouvelle fiche par exemple...

Merci beaucoup en tout cas!

Amicalement,

Nicolas
 

job75

XLDnaute Barbatruc
Bonjour NikoBarr, Bruno,

Voyez le fichier joint.

La feuille "REGISTRE" était passablement vérolée, je l'ai refaite.

Dans la feuille "modele j'ai mis des formules de liaison en B3 B6 B9 etc... et l'option d'affichage des valeurs nulles a été décochée, les zéros sont donc masqués.

La macro pour créer (et aussi supprimer) les feuilles des noms :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range, w As Worksheet, vis%
Set r = Intersect(Target, Range("B2:B" & Rows.Count), Me.UsedRange)
If r Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'---suppression des feuilles des noms effacés ou supprimés---
For Each w In Worksheets
  If w.Name <> Me.Name And (CStr(w.[B3]) = "0" Or w.[B3].Text = "#REF!") Then w.Delete
Next
'---création des feuilles---
With Sheets("modele")
  vis = .Visible 'la feuille "modele" peut être masquée
  .Visible = xlSheetVisible 'affiche la feuille
  For Each r In r 'si entrées multiples
    If r <> "" Then
      On Error Resume Next
      Set w = Nothing: Set w = Sheets(r.Text)
      On Error GoTo 0
      If w Is Nothing Then 'si la feuille n'a pas déjà été créée
        .Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = r 'renomme la feuille
        ActiveSheet.[B3:F21].Replace 1, r.Row, xlPart 'MAJ des formules de liaison
      End If
    End If
  Next
  .Visible = vis 'état initial
End With
Columns("B").AutoFit 'ajustement largeur
Me.Activate
End Sub
Nota important : il y avait un espace après le nom "modele", je l'ai supprimé...

A+
 

Pièces jointes

  • registre elevage(1).xls
    98 KB · Affichages: 56

youky(BJ)

XLDnaute Barbatruc
Voici la macro modifiée
Bruno
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
lig = Target.Row
nom = Cells(lig, 2)
If nom = "" Then Exit Sub
For k = 2 To Sheets.Count
If Sheets(k).Name = nom Then Sheets(k).Select: GoTo suite
Next
If MsgBox("Vous voulez créer un nouvel onglet !", vbYesNo + vbExclamation, "NOUVEAU") = vbNo Then Exit Sub
Feuil4.Visible = True
Feuil4.Copy after:=Sheets(Sheets.Count)
Feuil4.Visible = xlSheetVeryHidden
suite:
ActiveSheet.Name = nom
With Sheets(nom)
.[B3] = nom
.[B6] = Feuil1.Cells(lig, 4)
.[B9] = Feuil1.Cells(lig, 8)
.[B12] = Feuil1.Cells(lig, 10)

'ici à complèter
'feuil1.cells(lig,ici c'est le N° de colonne)

End With
End Sub
 

NikoBarr

XLDnaute Nouveau
Merci beaucoup,
Ça règle en effet le problème que j'ai eu en masquant la feuille "modele" .

désolé si la page registre était vérolée... mais je suis plus cavalier qu'informaticien ^^

Re,

Il y a cependant un sérieux inconvénient avec les formules de liaison : il ne faut pas trier la feuille "REGISTRE" car les formules de liaison ne suivent pas !!!

A+
Je n'aurais pas besoin de trier la feuille registre car elle me sert juste à l'enregistrement à l'arrivée des chevaux. La seule chose dont j'ai besoin éventuellement c'est de pouvoir rentrer la date de départ des écuries et que ça se reporte sur la feuille cible.

Merci beaucoup à vous deux en tout cas!
 

job75

XLDnaute Barbatruc
Re,
Il y a cependant un sérieux inconvénient avec les formules de liaison : il ne faut pas trier la feuille "REGISTRE" car les formules de liaison ne suivent pas !!!
Heureusement avec VBA on a remède à tout, placer dans ThisWorkbook :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim exclu, oldlig&, newlig As Variant
exclu = Array("Registre", "DONNEES", "modele") 'feuilles à ne pas étudier
With Sh
  If IsNumeric(Application.Match(.Name, exclu, 0)) Then Exit Sub
  If LCase(.Name) = LCase(.[B3]) Then Exit Sub
  oldlig = Mid(.[B3].Formula, InStr(.[B3].Formula, "!") + 2)
  newlig = Application.Match(Sh.Name, Sheets("Registre").[B:B], 0)
  If IsNumeric(newlig) Then .[B3:F21].Replace oldlig, newlig, xlPart
End With
End Sub
Fichier (2).

A+
 

Pièces jointes

  • registre elevage(2).xls
    100.5 KB · Affichages: 54

job75

XLDnaute Barbatruc
Re,

A mon avis il vaut mieux placer les feuilles créées en dernier mais si vous voulez les placer avant la feuille "REGISTRE" :
Code:
        .Copy Before:=Sheets("REGISTRE")
J'en ai profité pour améliorer le formatage de la feuille "modele", en particulier avec le format Code postal.

Fichier (3).

A+
 

Pièces jointes

  • registre elevage(3).xls
    101.5 KB · Affichages: 73

Discussions similaires

Réponses
6
Affichages
267

Statistiques des forums

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