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:

pierrejean

XLDnaute Barbatruc
Re : Modifier une feuille Excel en VBA

bonjour Barodchaise

et bienvenue sur XLD

Teste remplacer

Code:
[U]Do While (Cells(1, i) <> "Sous-Fonction" Or Cells(1, i) <> "")[/U]

par

Code:
[U]Do While (Cells(1, i) <> "Sous-Fonction" [COLOR=red]And[/COLOR] Cells(1, i) <> "")[/U]
 

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

Merci PJ. Le programme ne bute plus, mais c'est bien ce que je pensais, la msgbox s'affiche sur Menu.xls du coup il faut que je trouve un moyen de rester sur la feuille Excel que je dois modifier.

Pourquoi Sheet('WSBUDGND').Select est coloré en rouge dans le sub supssfct ? Il manque quoi ?
 

Pierrot93

XLDnaute Barbatruc
Re : Modifier une feuille Excel en VBA

Bonjour barodchaise, re PierreJean

remplace :

Code:
Sheet('WSBUDGND').Select

par :

Code:
Sheet([B][COLOR="Red"]"[/COLOR][/B]WSBUDGND[COLOR="red"][B]"[/B][/COLOR]).Select

A noter que les "select" sont rarement utilise en vba...

bon après midi.
@+
 

pierrejean

XLDnaute Barbatruc
Re : Modifier une feuille Excel en VBA

Re

Salut Pierrot :)

Voila comment je verrais la chose:

Code:
Sub ouvrirDaP()
Call docaouvrir
Call supssfct("WSBUDGND")
End Sub


Code:
Sub supssfct(lafeuille as String) 'supprime la colonne sous-fonction de la feuille excel
Dim i As Integer
i = 1
[U]Do While (Sheets(lafeuille).Cells(1, i) <> "Sous-Fonction" And Sheets(lafeuille).Cells(1, i) <> "")[/U] '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 ([U]Sheets(lafeuille).[/U]Cells(1, i))
End Sub
 

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

Sheets("WSBUDGND").Select ne fonctionne pas.
En effet, quand je lance l'appli, le programme s'arrête et me demande fin ou débugage. Je fais débugage pour voir où ça plante, et c'est cette ligne que j'ai ajouté dans ma fonction supssfct (Sheets("WSBUDGND").Select en fond jaune).

Et si j'utilise ta version PJ, ça me met la ligne de la condition de la boucle en jaune (Do While (Sheets(lafeuille).Cells(1, i) <> "Sous-Fonction" And Sheets(lafeuille).).Cells(1, i) <> "") en fond jaune)

J'ai fais quelques recherches à droite et à gauche sur le net, je ne comprends pas pourquoi Sheets ne fonctionne pas. Cela DEVRAIT fonctionner lol
 

Pierrot93

XLDnaute Barbatruc
Re : Modifier une feuille Excel en VBA

Re

lorsque le message d'erreur est renvoyé, il existe bien une feuille nommée "WSBUDGND" dans le classeur actif ?

Edition : la casse et l'accentuation doivent être respectées dans le nom de la feuille...
 

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

Oui bien sûr.
Au début je lance le fichier excel Menu.xls
Je clic sur le bouton approprié (qui s'appelle DAP).
Cela a pour effet d'ouvrir le fichier WSBUDGND.xls
Là il ne se passe plus rien. Je ferme manuellement le fichier WSBUDGND.xls
Et là je vois le message d'erreur qui était sur le classeur Menu.xls (forcément puisque c'est sur ce fichier qu'il y a le code vb).
"Erreur d'exécution '9' - L'indice n'appartient pas à la sélection "
et me sélectionne en fond jaune la ligne où il y a Sheets("WSBUDGND").Select
 
Dernière édition:

Barodchaise

XLDnaute Nouveau
Re : Modifier une feuille Excel en VBA

Oui excuse moi je me suis mal exprimé.
Mais j'ai déjà essayé avec Workbooks("WSBUDGND.xls").Activate en l'utilisant comme ceci :

Code:
Sub supssfct(feuille As String) 'supprime la colonne sous-fonction de la feuille excel
    
    Dim i As Integer
    i = 1
    
    Workbooks("WSBUDGND.xls").Activate
    Sheets(feuille).Select
    
    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

en vain, puisque ça me fait la même erreur décrite précédemment (et cette fois c'est Workbooks("WSBUDGND.xls").Activate en fond jaune) :/
 

Discussions similaires

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

Statistiques des forums

Discussions
312 380
Messages
2 087 793
Membres
103 664
dernier inscrit
wolvi71