Gros probleme avec VBA et son ami Excel

Résolu
Baguauda Messages postés 219 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 28 novembre 2008 - 17 oct. 2005 à 14:08
Baguauda Messages postés 219 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 28 novembre 2008 - 20 oct. 2005 à 15:55
Bonjour a tous,
me voici parmis vous car je crains de perdre la bataille face a l'ordi.
Je dois me faire une petite application sous Excel et donc en VB6, je connais parfaitement VB.Net mais VB6 je calle un peut, et la prog sous excel est encore pire.
Ce qui m'aiderais enormement c'est des sources mais n'ayant que Visual Studio 2003 il a tendence a pourrir les sources VB6 pour les afficher a ca manière.

Premier problème les constructeurs VB6.
Public sub new () bas il prend pas une explication ?
ca non plus il n'aime pas
Sub Article(Cod As Integer, libelle As String, qte As Long, ref As Long, encours As String)
End Sub

Second probleme plus serieux celui la.
Explication du projet, pour commencer histoire de mieux recituer.
Je dois manipuler plusieur feuille excel pour faire un petit traitement dessus, bien sur le classeurs ne seras pas toujours le meme et donc les noms de feuilles non plus. Il faut que je generalise.
J'ai fait quelques test et malgres que je pense avoir compris comment ce langage fonctionne je n'arrive pas a "pointer" mes feuille.
J'ai toujours 2 message d'Erreur un qui veut absolument que j'utilisa With, et meme apres utilisation de With il continue a gueuler.
Apres moulte bidouilles pour arriver a enlever ce message d'erreur j'ai un nouveau message me disant que a l'index donné il n'y a rien et pourtant 9 feuilles c'est pas rien.
J'ai un peu tout essayer mais rien n'y fait.

Donc je serais extrement ravi que quelqu'un entende ce message de detresse et me vienne en aide avec un code ou bien un lien, des conseils, ou alors mon cas est vraiment desesperant.

Merci a tous.

14 réponses

Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
17 oct. 2005 à 16:27
Fait plutot comme ça !

With Worksheets(5).Range("A1")
.Select
.Value = 2 * 2
End With
3
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
18 oct. 2005 à 11:26
lut,
Encore des explications

Dim ws As Worksheet
Dim wsIndex As Long


'Tu peux parcourir ta colection
For Each ws In Worksheets
With ws
If .Name = "toto" Then

.Range("A1").Value = "C'est la feuille toto"
Else
.Range("A1").Value = ""
End If
End With
Next


' ou acceder par index
' mais faut tester si l'index est bon
wsIndex = 3
If Worksheets.Count > wsIndex Then Exit Sub
Set ws = Worksheets(wsIndex)


With ws
.Name = "Tata" & wsIndex
.Cells(1, 1).Value = "là c'est tata"

End With

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
3
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
17 oct. 2005 à 14:47
Tu n'auras pas oublié de faire référence à Microsoft Excel librairy 9.0

Car en général, l'erreur 91 du bloc with non défini vient de là...

Sinon, si tu veux des exemples de codes VBA sous Excel, rien de plus simple...

Tu n'as qu'à faire une macro enregistrée sous Excel de ce que tu veux
faire manuellement. Tu verras alors comment la machine écrit en VBA, tu
pourras récupérer ce code afin de le coller dans ton code VB6.
TBBUIM
0
Baguauda Messages postés 219 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 28 novembre 2008 1
17 oct. 2005 à 16:04
j'ai regarder sous excel,
outils references puis Microsof Excel 10.0 Object Library est bien selectionner!

Mais je crois que le probleme n'est viens pas de la mais de mon code, et c'est pas les macro automatiques qui vont m'aider.

Je souhaite selectionner une feuille dans mon classeur
donc si je me trompe pas le code devrais etre

sub main

dim mafeuille as range
mafeuille.WorkSheets.Item(5)

mafeuille.cell("A1") = 2*2
end sub

non?

merci
0

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

Posez votre question
Tuning Max Messages postés 314 Date d'inscription mercredi 15 juin 2005 Statut Membre Dernière intervention 31 août 2006 1
17 oct. 2005 à 16:27
Fait plutot comme ça !

With Worksheets(1).Range("A1")
.Select
.Value = 2 * 2
End With
0
Baguauda Messages postés 219 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 28 novembre 2008 1
17 oct. 2005 à 17:10
t'as reponse m'as bien aider a comprendre le fonctionnement.
Je tiens a dire que l'une des plus grosse erreur etait la non utilisation de Set.
Je ne ferme pas le topic pour le moment car j'aurais peu etre encore besoin d'aide.

voici un bout de mon code

Sub alpha()


With Worksheets(5).Select
Dim mapage As Worksheet
Set mapage = ActiveSheet
Dim nom As String
nom = mapage.Name
mapage.Range("A1").value = nom
End With

End Sub
0
Baguauda Messages postés 219 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 28 novembre 2008 1
18 oct. 2005 à 11:34
merci beaucoup je vais tester.

Comme je suis pas tres en forme avc vba est ce que quelqu'un sait pourquoi ceci ne fonctionnne pas

dim nb as long
nb = workSheets.count
worksheets.add(after := nb)

car il ajoute les pages systematiquement avant la fenetre active.
Merci
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
18 oct. 2005 à 13:34
Normal il de demande un objet donc

worksheets.add(after := Worksheets(Worksheets.count))
ou
worksheets.add(after := Worksheets(nb))
dans ton cas

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
Baguauda Messages postés 219 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 28 novembre 2008 1
18 oct. 2005 à 15:58
Cette solution Mr Excel n'est veut point.
il souhaite avoir un := suplementaire, par contre je ne sais pas ou il veut que ca soit.

Bon bas vba commence a me fatiguer
meme une collection toute simple decide de m'*****
dim art as new Article
liste.add(index) = art

je vois pas comment faire autrement.
En plus les temps d'execution sont vraiment trop long.
Je ne fait que la lecture pour le moment et il lui faut deja 1 minute.

J'ai tenter de voire ce que ca donnais avec vb.net mais du coup il manque pas mal de methodes.

Je sens que la semaine va etre tes longue
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
18 oct. 2005 à 18:20
Re,
Envoi ton code que je le regarde si u veux si c'est possible je te donnerais qq explications
[mailto:valtrase@free.fr Ecris-Moi]

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
tbbuim1 Messages postés 940 Date d'inscription jeudi 20 février 2003 Statut Membre Dernière intervention 3 février 2011 9
19 oct. 2005 à 09:52
Je ne vois pas en quoi les macros enregistrées ne peuvent pas t'aider, au contraire!
Lorsque j'ouvre mon classeur et que je clic sur la feuil2 pour la sélectionner.

Il m'affiche:

Sheets("Feuil2").select

Une fois que tu es sur la page que tu désires, tu peux tout simplement écrire

Range("A1").value = 2x2

Tout ça tu le vois en faisant une macro enregistrée...
TBBUIM
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
19 oct. 2005 à 17:16
Les macros c'est bien pour apprendre mais il faut bien épurer le code


un Sheets("Feuil2").Range("A1").formula = "=B1*2" et quand même plus rapide que de passer par des select.


Sinon cela permet de voir la structure du code donc toujours bon à prendre



Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
Baguauda Messages postés 219 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 28 novembre 2008 1
19 oct. 2005 à 17:32
Remoi.
Euh donc le programme est ecrit et fonctionne presque parfaitement.
Je l'ai fait sous vb ce qui fut nettement plus facile pour moi.

1 probleme viens d'apparaitre et je ne trouve pas d'info, ce qui est plus deroutant c'est ca fonctionnais tres bien cet aprem


Private
Sub affichage()



Dim ws
As Worksheet



Dim rw
As Range



Dim ligne
As
Integer


ligne = 2


ws = cl.getWbExcel.Worksheets(1)


rw = ws.Rows

Dim article
As article



For
Each article
In liste_All_Articles



Try


rw.Cells(ligne, 1) = article.getCode


rw.Cells(ligne, 2) = article.getNom


rw.Cells(ligne, 3) = article.getSection


rw.Cells(ligne, 4) = article.getTyp


rw.Cells(ligne, 5) = article.getQuantite


rw.Cells(ligne, 6) = article.getreference



Dim ls
As
Integer



For ls = 0
To article.getListe.Count - 1


rw.Cells(ligne, 7 + ls) = article.getListe(ls)



Next


ligne = ligne + 1



Catch ex
As System.Runtime.InteropServices.COMException


MsgBox(ex.Message)



End
Try
Next
End
Sub

et boum j'ai le droit a
System.runtime.InteropServices.Comexception
HRESULT 0x800A03EC

la modif que j'ai faite c'est que met getCode, getQuantite au lieu de retourné une String retourne un Long et un Decimel, mais je pense pas que ca vienne de la car il ne prend pas le getNom qui est un String

euh le second probleme c'est comment supprimer ou vide une veuille excel depuis vb, j'ai tester pas mal de truc mais sans resultat.

Merci.
0
Baguauda Messages postés 219 Date d'inscription mercredi 31 août 2005 Statut Membre Dernière intervention 28 novembre 2008 1
20 oct. 2005 à 15:55
voila je clos ce sujet la programme est terminer et il fonctionne tres bien.
L'erreur juste au dessus a ete corriger en mettant tous les type en string et en me demerdant apres avec les .Parse.

pour Effacer une feuille j'ai utilisé

mafeuille.Cells.Clear()

Merci a tous pour votre aide
0
Rejoignez-nous