Question subsidiaire à VB6 et ajouter une feuille à un classeur.

Résolu
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 2 juil. 2008 à 13:42
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Derniè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.

18 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
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

     'AFFICHER EXCEL
          wbExcel.Windows.Application.Visible = True
    
   '...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
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 juil. 2008 à 13:51
Salut
De quoi parles-tu ?
Ne penses-tu pas qu'il serait bon de poser des questions bien expliquées et documentées.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
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.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
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
           
            'enregistrement suivant
            rs.MoveNext
   
    Loop


      MsgBox "TERMINE"
   
     'FERMER l' objetEXCEL
      ' wbExcel .Close False
     
     'AFFICHER EXCEL
          wbExcel.Windows.Application.Visible = True
    
   '...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.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
2 juil. 2008 à 15:31
Mais en tout cas j' ai compris ou tu voulais en venir.
Au lieu de Add, il faudra insèrer une copie de la feuille1.
Astucieux mais comment le traduire?

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
2 juil. 2008 à 15:55
Salut,

wbExcel.Worksheets.Copy , wbExcel.Worksheets(xPage), 1

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

.Cells(y, 1).Value = rs!Nom

a ce qui prennent le temps lire : bonne journee
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
2 juil. 2008 à 16:14
une petit correction :

enleve ,1 en fin de ligne et precise qu'elle est la feuille a copier

wbExcel.Worksheets("sheet1").Copy ,wbExcel.Worksheets(xPage)

mais attention les valeurs seront copier avec donc il est preferable d'avoir template qui reste vide
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
2 juil. 2008 à 16:18
re-salut,
c' est noté !


Pour la copie
wbExcel.Worksheets.Copy , wbExcel.Worksheets(1), 1


et pour l' insertion ça serait donc
wbExcel.Worksheets.Insert , wbExcel.Worksheets(xPage), 1


c' est ça ?



>>on vas bien encore y passer une journée
t' es pas obligé !

>>pour un truc aussi simple
Tu parles pour toi, là !



>>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..


t' inquiètes, je lis tout et j' en retiens l' essentiel.


Pour preuve,Voici une chose que je ne savais pas.



>>l'activate et le select dans excel sont a proscrir ce sont des source
de l'enteur et d'erreur



>>.Cells(y, 1) = rs!Nom Sache que d'atribuer une valeur a une cellule de cette
facon est  une source de plantage


jusqu' à preuve du contraire, non !
Mais je ne perderais rien si j' ajoute .Value.


Bonne journée à toi aussi.


                 
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
2 juil. 2008 à 16:22
Poste croisé..
Pour la copie donc
wbExcel.Worksheets("sheet1").Copy ,wbExcel.Worksheets(1)

le mieux serait de faire une copie une fois pour toute.
dans une autre variable, non ?

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
2 juil. 2008 à 16:23
n'oublie pas la correction deja postee
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
2 juil. 2008 à 16:27
Un copy de feuille dans une variable ? pourquoi pas jamais essayé
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
2 juil. 2008 à 16:31
j' ai fais ceci:
 Dim wsClone As Excel.Worksheet 'Feuille Excel
 Set wsClone = wbExcel.Worksheets(1)

mais je bloque sur l' insertion.
Je ne connais pas la synthaxe.

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
2 juil. 2008 à 17:34
Presque ! Mais acceptable .
Avec ta proposition, voici le résultat et l' ordre des feuilles.


Template(2)
Template
Feuill1
Feuill2
Feuill3
Template(3)
Template(4)
...
etc
Template(21) en dernier.


Les templates conservenet tous la même mise en forme,
à l' image de feuill1.
Les feuilles 2 et 3 ont la mise en form par defaut.


 





<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
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
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
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.


Template(2)
Template
Feuill1
Template(3)
Template(4)
..
etc
Template(22)
Template(23)


et devinez quoi !
elles ont toutes la même mise en forme.


Teste à rectifier le tir pour que Templte et template(2) se placent après feuill1.
ça sera du gâteau !

Bravo bigfish..
t' es un vrai !





<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
2 juil. 2008 à 17:51
comprend pas pourquoi la feuille template(2) ce retrouve en premiere position ?

j'ai teste la methode et j'ai pas ce probleme
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
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.
0
Rejoignez-nous