Bonjour à tous,
Je débute en VBA et parfois il me manque quelques subtilités
Mon fichier est constitué d'une macro qui va me chercher un fichier source et copie des données (dites périmètre)
D'un onglet modèle qui doit être généré à chaque création d'un nouvel onglet.
A partir du périmètre, j'ai une macro qui crée des onglets : elle fonctionne très bien, c'est parfait sauf que les onglets se créent dans l'ordre inverse du tableau : dernière ligne du tableau = 1er onglet
Et j'ai besoin, pour pouvoir intégrer des éléments de synthèse à cette liste de départs:
- que le 1er onglet corresponde à la 2eme ligne de tableau (1er nom et non intitulé du tableau), que le 2e onglet corresponde à la ligne 3 du tableau donc au 2eme nom et ainsi de suite.
- qu'il ne crée pas d'onglet pour la dernière ligne du tableau qui est un "total" et qui n'est pas toujours sur la même ligne selon les fichiers sources (qui ne dépassent cependant pas 20 lignes)
Qu'est ce qu'il manque à mon code?!
je pense que c'est là : For ln = 20 To fb.Range("B" & Rows.Count).End(xlUp).Row (je triche en laissant une ligne vide pour que la ligne total ne soit pas prise en compte 😛 ) mais je ne comprends pas comment faire autrement, tout ce que je tente plante ou est trop complexe pour mon niveau
	
	
	
	
	
		
Et si je peux abuser , histoire d'apprendre et de comprendre, est ce que vous pouvez commenter vos réponses code ?! 😛
Merci d'avance!
	
		
			
		
		
	
				
			Je débute en VBA et parfois il me manque quelques subtilités
Mon fichier est constitué d'une macro qui va me chercher un fichier source et copie des données (dites périmètre)
D'un onglet modèle qui doit être généré à chaque création d'un nouvel onglet.
A partir du périmètre, j'ai une macro qui crée des onglets : elle fonctionne très bien, c'est parfait sauf que les onglets se créent dans l'ordre inverse du tableau : dernière ligne du tableau = 1er onglet
Et j'ai besoin, pour pouvoir intégrer des éléments de synthèse à cette liste de départs:
- que le 1er onglet corresponde à la 2eme ligne de tableau (1er nom et non intitulé du tableau), que le 2e onglet corresponde à la ligne 3 du tableau donc au 2eme nom et ainsi de suite.
- qu'il ne crée pas d'onglet pour la dernière ligne du tableau qui est un "total" et qui n'est pas toujours sur la même ligne selon les fichiers sources (qui ne dépassent cependant pas 20 lignes)
Qu'est ce qu'il manque à mon code?!
je pense que c'est là : For ln = 20 To fb.Range("B" & Rows.Count).End(xlUp).Row (je triche en laissant une ligne vide pour que la ligne total ne soit pas prise en compte 😛 ) mais je ne comprends pas comment faire autrement, tout ce que je tente plante ou est trop complexe pour mon niveau
		VB:
	
	
	Option Explicit
Dim fm As Worksheet, f As Worksheet, MSA As String, dico As Object
Dim fb As Worksheet
Dim i&, ln&, lgn&, col&
Sub Onglet()
    Application.ScreenUpdating = False
    Set fb = ActiveSheet ' fiche perimetre
    Set fm = Sheets("Modele") 'fiche modele
    Set dico = CreateObject("Scripting.Dictionary") ' liste du périmetre
    
    
    For Each f In Worksheets
        dico(f.Name) = ""
    
    Next f
    
    Sheets("Modele").Visible = True
    
    For ln = 20 To fb.Range("B" & Rows.Count).End(xlUp).Row 'à partir de la ligne 20 prendre les données de la colonne B jusqu'à la cellule vide
        MSA = fb.Range("B" & ln) 'une feuille par ligne du périmètre
        If Not dico.exists(MSA & " ") Then
            Sheets("Modele").Copy after:=Sheets("Périmètre") 'copie le modele du guide pour chaque onglet créée après périmètre
            ActiveSheet.Name = MSA & " " ' la donnée MSA (colonn B) est le nom de l'onglet
            Range("C10") = MSA 'Range la donnée en C10 de chaque onglet
            Range("H10") = fb.Range("F" & ln) 'Range la donnée de la colonne F en N10 de chaque onglet
            Range("K10") = fb.Range("G" & ln) 'Range la donnée de la colonne G en O10 de chaque onglet
            
            
        End If
    
    Next ln
    
    Sheets("Modele").Visible = True 'passer en false quand tout est ok pour masquer la feuille modèle
    
End Sub
	Et si je peux abuser , histoire d'apprendre et de comprendre, est ce que vous pouvez commenter vos réponses code ?! 😛
Merci d'avance!