Modifier une feuille Excel en VBA

Barodchaise

XLDnaute Nouveau
Bonjour tout l'monde.

Voilà je suis sur un projet de stage, et pour le réussir, je dois me mettre à fond dans le VB sous Excel.
Je transforme du code Excel 95 (pour ceux qui connaissent vous savez que c'est immonde ;) )

Bref, en ce moment je suis sur Menu.xls qui propose une interface de gestion d'une page excel générée par un logiciel privé.
Lorsque je clic sur un bouton de ce menu, il doit m'ouvrir ladite page excel en question et doit me faire certaines modifications sur cette même feuille (supprimer des colonnes, des lignes en fonction de certains critères, faire un tableau avec ce qui reste, faire des totaux etc ...)

Le soucis que je rencontre actuellement, c'est qu'après avoir ouvert la feuille excel, je ne peux pas sélectionner la colonne que j'aimerai supprimé (l'intitulé de cette colonne, en cellule M1 (donc 13° colonne), s'appelle Sous-Fonction).

Voici le code :

VB du Menu.xls à dit:
Sub ouvrirDaP()

Call docaouvrir
Call supssfct

End Sub


Sub docaouvrir() 'fonction qui ouvre le fichier Excel généré par le logiciel privé
Dim nomfic As String 'Déclaration de la variable qui contiendra le nom du fichier à modifier
nomfic = "G:\C-DGRMG\C-DSIT\Dossiers-Equipe-Développement\Macros_excel\Excel95\Gestion\Gestcomp\LaCriee\WSBUDGND.xls"

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(nomfic)
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
'on rend visible cette feuille
appExcel.Visible = True

End Sub

Sub supssfct() 'supprime la colonne sous-fonction de la feuille excel

Dim i As Integer
i = 1


Do While (Cells(1, i) <> "Sous-Fonction" Or Cells(1, i) <> "") 'boucle qui s'arrête soit en ayant trouvé la colonne à supprimer, soit en ayant trouvé une colonne vide (fin du tableau)
i = i + 1
Loop

MsgBox (Cells(1, i))

End Sub


La ligne soulignée étant la ligne de code sur laquelle le programme bute.
Mais je ne suis pas aussi sur la feuille que je dois modifier, car à mon avis ce code ne sélectionnera que la colonne de la feuille excel de Menu.xls
Du coup j'ai essayé de faire Sheet('nomdlafeuillàmodif').Select mais ça m'affichait cette ligne en rouge ...
 
Dernière édition:

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

OK les voilà.
J'ai renommé le classeur WSBUDGND.xls en Machin.xls et le classeur qui contient le menu en Menutest.xls

Selon mon code actuel, il devrait afficher l'intitulé de la colonne que je veux supprimer.
 

Pièces jointes

  • Menutest.xls
    34.5 KB · Affichages: 64
  • Machin.xls
    16.5 KB · Affichages: 67

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

Juste une précision. Le Menu que j'ai mis en pièce jointe, j'ai comme contrainte de garder la forme (pour le moment du moins).
C'est juste le bouton DAP qui fait appel au code VB. Les autres boutons étant associés aux maccros d'excel 95, je n'y fais pas attention pour le moment.
Donc il n'y a que le bouton DAP qui sert à quelque chose dans le fichier Menu.xls
 

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

Bon j'ai trouvé !

Workbooks.Open Filename:="G:\C-DGRMG\C-DSIT\Dossiers-Equipe-Développement\Macros_excel\Excel95\Gestion\Gestcomp\LaCriee\Machin.xls"

à la place de

Workbooks("Machin.xls").Activate

Et la msgbox me renvoie bien "Sous-Fonction"
 

Pierrot93

XLDnaute Barbatruc
Re : Modifier une feuille Excel en VBA

Re

d'après ton code tu ouvres une 2ème instance d'Excel :

Code:
Sub docaouvrir() 'fonction qui ouvre le fichier Excel généré par le logiciel Coriolis
    Dim nomfic As String 'Déclaration de la variable qui contiendra le nom du fichier à modifier
    nomfic = "G:\C-DGRMG\C-DSIT\Dossiers-Equipe-Développement\Macros_excel\Excel95\Gestion\Gestcomp\LaCriee\Machin.xls"
    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(nomfic)
    'wsExcel correspond à la première feuille du fichier
    Set wsExcel = wbExcel.Worksheets(1)
    'on rend visible cette feuille
    appExcel.Visible = True
End Sub

et l'éxécution du code à lieu dans la première, de ce fait le classeur est considéré comme étant fermé...

Perso suis pas sur qu'il soit nécessaire d'ouvrir un nouvel Excel...

@+
 

Pierrot93

XLDnaute Barbatruc
Re : Modifier une feuille Excel en VBA

Re

essaye en modifiant la procédure "docaouvrir" comme suit, si tu peux n'utiliser qu'une seule instance d'Excel :

Code:
Sub docaouvrir() 'fonction qui ouvre le fichier Excel généré par le logiciel Coriolis
    Dim nomfic As String 'Déclaration de la variable qui contiendra le nom du fichier à modifier
    nomfic = "G:\C-DGRMG\C-DSIT\Dossiers-Equipe-Développement\Macros_excel\Excel95\Gestion\Gestcomp\LaCriee\Machin.xls"
    Dim wbExcel As Excel.Workbook 'Classeur Excel
    Dim wsExcel As Excel.Worksheet 'Feuille Excel
    'Ouverture d'un fichier Excel
    Set wbExcel = Workbooks.Open(nomfic)
    'wsExcel correspond à la première feuille du fichier
    Set wsExcel = Worksheets(1)
End Sub

@+
 

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

Cela donne donc un code plutôt allégé maintenant :

Code:
Sub ouvrirDaP()

    Dim nomfic As String
    nomfic = "G:\C-DGRMG\C-DSIT\Dossiers-Equipe-Développement\Macros_excel\Excel95\Gestion\Gestcomp\LaCriee\Machin.xls"
    Call supssfct(nomfic) 'en paramètre : nom du fichier Excel à ouvrir

End Sub


Sub supssfct(classeur As String) 'supprime la colonne sous-fonction de la feuille excel
    
    Dim i As Integer
    i = 1
    
    Workbooks.Open Filename:=classeur
    
    Do While (Cells(1, i) <> "Sous-Fonction" And Cells(1, i) <> "") 'boucle qui s'arrête soit en ayant trouvé la colonne à supprimer, soit en ayant trouvé une colonne vide (fin du tableau)
        i = i + 1
    Loop

    MsgBox (Cells(1, i))
    
End Sub
 

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

Ouep :D
Cela va surement revenir, ça fait un moment que j'avais pu coder en VB.

En tout cas merci beaucoup tout l'monde.
De toute manière vous risquez de me voir assez souvent, j'aurai surement pas mal d'autres soucis sous peu ;)
 

pierrejean

XLDnaute Barbatruc
Re : Modifier une feuille Excel en VBA

Re

Je pense que le probleme vient du fait qu'une seconde instance d'Excel est ouverte
Si ce n'est pas necessaire
un code inspiré de celui-ci devrait faire l'affaire

Code:
Public nomfic As String
Sub ouvrirDaP()
nomfic = "E:\texcel1\barodchaise.xls"
Call supssfct(nomfic, "Feuil1")
End Sub
 
Sub supssfct(fichier As String, lafeuille As String) 'supprime la colonne sous-fonction de la feuille excel
Workbooks.Open nomfic
Dim i As Integer
i = 1
Do While (Sheets(lafeuille).Cells(1, i) <> "Sous-Fonction" And Sheets(lafeuille).Cells(1, i) <> "") 'boucle qui s'arrête soit en ayant trouvé la colonne à supprimer, soit en ayant trouvé une colonne vide (fin du tableau)
i = i + 1
Loop
MsgBox (Sheets(lafeuille).Cells(2, i))
End Sub

Notes : modifier les noms de fichier (et chemin) et de feuille
le msgbox voit la cellule située en dessous de la ligne ou l'on trouve Sous-Fonction

Edit: Plutot a la traine moi !!!
Excuses: Avais pas rafraichi
 

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

Pas de soucis :D
Encore merci.
J'ai opté pour cette version définitive qui est la plus légère possible et qui me permet de rester sur la feuille que je veux modifier. Du coup je peux créer les autres fonctions qui vont s'enchainer.

Code:
Sub ouvrirDaP()

    Dim nomfic As String
    nomfic = "G:\C-DGRMG\C-DSIT\Dossiers-Equipe-Développement\Macros_excel\Excel95\Gestion\Gestcomp\LaCriee\Machin.xls"
    Workbooks.Open Filename:=nomfic
    
    Call supssfct
    
    Call sectiondap

End Sub


Sub supssfct() 'supprime la colonne sous-fonction de la feuille excel
    
    Dim i As Integer
    i = 1

    Do While (Cells(1, i) <> "Sous-Fonction" And Cells(1, i) <> "") 'boucle qui s'arrête soit en ayant trouvé la colonne à supprimer, soit en ayant trouvé une colonne vide (fin du tableau)
        i = i + 1
    Loop

    MsgBox ("La colonne " & Cells(1, i) & "  va être supprimée !")
    Columns(i).Delete
    
End Sub
 

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

Voilà je suis sur la suite de mon projet et je rencontre un petit obstacle.
J'ai lancé une fonction dans le menu, qui va ouvrir un autre classeur excel qui possède des fonctions communes à tous les services (Menu.xls fait partie d'un service).
Bref, ce que j'aimerai faire, c'est lancé la fonction de ce nouveau classeur avec en paramètres, des informations propres à chaque service.

Voici mon code :

Code:
Sub ouvrirDaP()

    Dim nomFichFctCommune As String 'nom du fichier possédant la fonction commune à tous les services
    nomFichFctCommune = "G:\C-DGRMG\C-DSIT\Dossiers-Equipe-Développement\Macros_excel\Excel95\Gestion\Gestcomp\FonctionCommune.xls"
    
    Dim nomfic As String 'nom du fichier du service à traiter
    nomfic = "G:\C-DGRMG\C-DSIT\Dossiers-Equipe-Développement\Macros_excel\Excel95\Gestion\Gestcomp\LaCriee\Machin.xls"

    Workbooks.Open Filename:=nomFichFctCommune
    
    
    Dim valCritere(10) As String 'création de la liste des valeurs pour les critères de sélection du service
    valCritere(0) = "60222.5"
    valCritere(1) = "60224.8"
    valCritere(2) = "60226.2"
    valCritere(3) = "60228.0"
    valCritere(4) = "60228.9"

    Call [FonctionCommune.xls].selectionParService("Art", valCritere, nomfic)

End Sub

Pourquoi ma fonction Call ne fonctionne pas ? J'ai essayé avec un Sheets devant, mais ça me mettait la ligne Sheets en fond jaune lors du lancement du programme :/

PS : la fonction selectionParService se trouve dans la fichier nomFichFctCommune (classeur FonctionCommune.xls)
 
Dernière édition:

Discussions similaires

Réponses
5
Affichages
220
Réponses
2
Affichages
285
Réponses
12
Affichages
284
Réponses
7
Affichages
382

Statistiques des forums

Discussions
312 379
Messages
2 087 779
Membres
103 663
dernier inscrit
b4ri5.c