LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 2012
-
2 juil. 2008 à 13:42
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 2012
-
2 juil. 2008 à 17:58
Salut,
J' ai résolu la question de l' ajout.Reste à savoir comment appliquer
dynamiquement une mise en page.
Mon but est faire une mise en forme (manuellement) sur les premières
feuilles et de conserver la même pour celles qui vienderont s' ajouter au classeur.
Est-ce possible alors ?
Si oui, comment ?
Merci.
Notez bien que pour moi, Excel est une terre étrangère..
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
A voir également:
Question subsidiaire à VB6 et ajouter une feuille à un classeur.
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 2 juil. 2008 à 17:10
desole je trouve pas de solution dans cette voie.
par contre peut etre une autre solution avec une feuille template temporaire (en bleu dans le code)
Sub ENVOYER()
'OUVRIR LA TABLE
Dim rs As Recordset
Set rs = pDB.OpenRecordset("INSCRIPTIONS", dbOpenDynaset)
'SI LA TABLE EST VIDE
If rs.BOF And rs.EOF Then
MsgBox "Table vide !"
Exit Sub
End If
'- Ouvrir un fichier Excel
'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open(App.Path & "\NXLS.xls")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
Dim i As Integer, y As Integer, xPage As Integer
Dim enr As Integer 'numéro d' enregistrement
wsExcel.copy before:=wsExcel 'copy de la premiere feuille, avant la premiere feuille
WbExcel.activesheet.name = "template"
y = 0 'ligne 0 xPage 2 ' xpage 2 car la premiere feuille est le template
rs.MoveFirst
Do While Not rs.EOF
'LIRE L' ENREGISTREMENT
'ET
'ECRIRE DANS EXCEL
y = y + 1
'12 lignes par page
If y = 13 Then
'IMPRIMER
'wsExcel .PrintOut
'REINITIALISER L'INDEX LIGNE
'EN VUE DE LA PROCHAINE FEUILLE
y = 1
If xPage = wbExcel.Worksheets.Count Then
'AJOUTER UNE FEUILLE
wbExcel.Worksheets("template").Copy , wbExcel.Worksheets(xPage)
End If
xPage = xPage + 1
End If
Set wsExcel = wbExcel.Worksheets(xPage)
With wsExcel
Debug.Print .Name
.Activate
.Cells(y, 1) = rs!Nom
.Cells(y, 2) = rs!Prenom
.Cells(y, 3) = rs!Ne_le
.Cells(y, 4) = rs!ArNom
.Cells(y, 5) = rs!ArPrenom
End With
'enregistrement suivant
rs.MoveNext
Loop
MsgBox "TERMINE"
wbExcel.WorkSheets("template").delete 'on efface le template
'...DETRUIRE LES OBJETS
Set appExcel = Nothing
Set wbExcel = Nothing
Set wsExcel = Nothing
'Fermer et détruire l' objet recordset
rs.Close
Set rs = Nothing
End Sub
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 2 juil. 2008 à 14:02
Salut jack,
voila..
J' ai un classeur Excel.
Dans ce classeur j' ai 3 feuilles.
J' ajoute par code une quatrième.
Comment faire pour que cette dernière hérite des mêmes
caractéristiques que les 3 premières ?
A savoir Font, Taille, Couleur, Format de cellules etc.
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 2 juil. 2008 à 14:55
Le plus simple serait peut être dans ce cas de ne pas l'ajouter, mais de faire une copie d'une feuille précédente ?
Par code, tu copies une feuille de référence, par ex. la feuille 1, et sur cette feuille ainsi crée, tu n'as plus qu'à faire :
worksheets("Nouvelle feuille").cells.clearcontent
Ce qui en supprimera tout le contenu en conservant le format des cellules, etc ...
Molenn
Vous n’avez pas trouvé la réponse que vous recherchez ?
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 2 juil. 2008 à 15:21
Salut Molenn et merci,
A suppose que j' ai :
Sub ENVOYER()
'OUVRIR LA TABLE
Dim rs As Recordset
Set rs = pDB.OpenRecordset("INSCRIPTIONS", dbOpenDynaset)
'SI LA TABLE EST VIDE
If rs.BOF And rs.EOF Then
MsgBox "Table vide !"
Exit Sub
End If
'- Ouvrir un fichier Excel
'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel
'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open(App.Path & "\NXLS.xls")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
Dim i As Integer, y As Integer, xPage As Integer
Dim enr As Integer 'numéro d' enregistrement
y = 0 'ligne 0
xPage = 1 'page 1
rs.MoveFirst
Do While Not rs.EOF
'LIRE L' ENREGISTREMENT
'ET
'ECRIRE DANS EXCEL
y = y + 1
'12 lignes par page
If y = 13 Then
'IMPRIMER
'wsExcel .PrintOut
'REINITIALISER L'INDEX LIGNE
'EN VUE DE LA PROCHAINE FEUILLE
y = 1
If xPage = wbExcel.Worksheets.Count Then
'AJOUTER UNE FEUILLE
wbExcel.Worksheets.Add , wbExcel.Worksheets(xPage), 1
End If
xPage = xPage + 1
End If
Set wsExcel = wbExcel.Worksheets(xPage)
With wsExcel
Debug.Print .Name
.Activate
.Cells(y, 1) = rs!Nom
.Cells(y, 2) = rs!Prenom
.Cells(y, 3) = rs!Ne_le
.Cells(y, 4) = rs!ArNom
.Cells(y, 5) = rs!ArPrenom
End With
'...DETRUIRE LES OBJETS
Set appExcel = Nothing
Set wbExcel = Nothing
Set wsExcel = Nothing
'Fermer et détruire l' objet recordset
rs.Close
Set rs = Nothing
End Sub
Avec ça sera plus facile pour vous de m' indiquer ce que
je dois faire et surtout ou..
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
on vas bien encore y passer une journée pour un truc aussi simple
mais cela m'embete un peu de t'aider vu que tu demande l'avis des gents et que finalement tu n'en as rien a faire
l'activate et le select dans excel sont a proscrir ce sont des source de l'enteur et d'erreur
je ne vois pas en quoi d'activer la feuille de destination vas changer le faite que :
wbExcel.Worksheets(xPage).Cells(y, 1) = rs!Nom
si tu avait essayé directement dans excel tu aurais vu que cela ne fait aucune difference avec ou sans l'activate
.Cells(y, 1) = rs!Nom Sache que d'atribuer une valeur a une cellule de cette facon est une source de plantage. Pourquoi ?
et bien il y a 174
methodes et proprietes possible sur une cellule ! Donc pour eviter qu'excel ne ce melange les pinceaux il est preferable de faire comme suit
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 2 juil. 2008 à 17:41
Pour eviter le probleme des nom tu peux ajouter ici
If xPage = wbExcel.Worksheets.Count Then
'AJOUTER UNE FEUILLE
wbExcel.Worksheets("template").Copy , wbExcel.Worksheets(xPage)
WbExcel.activesheet.name = "feuil" & xPage + 1
End If
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 2 juil. 2008 à 17:45
modifications faites:
J' ai supprimé les feuill2 et 3.
Mon classeur ne comporte plus qu' une seule feuille.
Ce qui est en somme logique.Et c' est ce qu' au j' aurais dû faire depuis le début.
Résultat.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 2 juil. 2008 à 17:58
y = 0 'ligne 0
xPage = 1 'page 1
'il fallait mettre en deuxième argument After
'au lieu de Befre en premier
wsExcel.Copy , After:=wsExcel 'copy de la premiere feuille, avant la premiere feuille
wbExcel.ActiveSheet.Name = "template"
wbExcel.Worksheets(1).Copy wbExcel.Worksheets(1)
rs.MoveFirst
Do While Not rs.EOF
'LIRE L' ENREGISTREMENT
'ET
'ECRIRE DANS EXCEL
y = y + 1
'12 lignes par page
If y = 13 Then
'REINITIALISER L'INDEX LIGNE
'EN VUE DE LA PROCHAINE FEUILLE
y = 1
If xPage = wbExcel.Worksheets.Count Then
'AJOUTER UNE FEUILLE
wbExcel.Worksheets("template").Copy , wbExcel.Worksheets(xPage)
End If
xPage = xPage + 1
Set wsExcel = wbExcel.Worksheets(xPage)
End If
With wsExcel
....
ETC
ça donne
Feuill1(2) vide
Puis avec les données
Feuill1
Template
Template(2)
Template(3)
Template(4)
..
etc
Template(22)
merci bigfish.
Je valide.
<hr />... Y'en a même qui disent qu'ils l'ont vu voler.