Problème d'écriture dans Excel

Résolu
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014 - 23 juil. 2007 à 11:11
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014 - 23 juil. 2007 à 15:35
Bonjour,

J'aurais besoin, pour un programme, de pouvoir écrire des données sur excel via VB. Pour l'instant j'ai ce bout de code:

Private
Sub excel()
Dim excel
As
New Excel.Application

Dim workbook
As Excel.Workbook

Dim worksheet
As Excel.Worksheet

Dim r
As Excel.Range

Dim firstcell
As Excel.Range

Dim lastcell
As Excel.Range

Dim rngg
As
String(,)

excel.Visible = True
'la fenêtre excel est visible

workbook = excel.Workbooks.Add(1)

'on ouvre un classeur dans excel
worksheet = workbook.Worksheets(1)
'on ouvre une feuille dans le classeur excel
WriteToExcel(worksheet, 1, 1,
"Acquisition temps réel")
'on écrit "acquisition temps réel" à l'intersection de la ligne 1 et la colonne 1
WriteToExcel(worksheet, 2, 1,
"Visualiser graphique appuyer sur ctrl+W")

Dim rng
As
String(,)

ReDim rng(5, 5)
rng(0, 0) =
"Date et heure"
'on choisit l'intersection de la ligne 0 et de la colonne 0 pour écrire "date et heure"
rng(0, 3) =
"Puissance kW"
'on choisit l'intersection de la ligne 0 et de la colonne 3 pour écrire "puissance W"
rng(0, 4) =
"Tension V"
'on choisit l'intersection de la ligne 0 et de la colonne 4 pour écrire "tension V"
rng(0, 5) =
"Courant A"
'on choisit l'intersection de la ligne 0 et de la colonne 5 pour écrire "courant A"
WriteToExcel(worksheet, 3, 1, rng)

'on écrit dans la feuille les expressions vu au-dessus en initialisant le curseur à la ligne 3 et la colonne 1

End
Sub

J'ai vu sur internet que quelqu'un utilisait WriteToExcel mais chez moi cela ne fonctionne pas... Auriez-vous une explication à ce problème? ou qu'est-ce que vous utiliseriez pour ecrire dans un fichier excel?

merci d'avance

19 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 juil. 2007 à 13:29
Re,
Mille excuses, cela ne fonctione pas car j'aurais du mettre

wS.Range("A1").Value = "Acquisition en Temps Réel"

En effet Range est objet de WorkSheet et non de WorkBook.

@+: Ju£i?n
Pensez: Réponse acceptée
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 juil. 2007 à 14:20
Salut,
Pour le premier problème essaie

Dim Li As Long
Li = 1
For  Each result  As SearchResult  In searcher.FindAll
   ' On récupère l'entrée trouvée lors de la recherche
   DirEntry = result.GetDirectoryEntry
   Dim a = DirEntry.Properties( "SAMAccountName" ).Value
   Dim b = DirEntry.Properties( "sn" ).Value
   Dim c = "Tél : " + DirEntry.Properties( "TelephoneNumber" ).Value
   ws.Range("A" & Li).Value = a
   ws.Range("A" & (Li + 1)).Value = b
   ws.Range("A" & (Li + 2)).Value = c
   
   Li = Li + 4

Next, ----
[code.aspx?ID=41455 By Renfield]
En revanche pour le second je n'ai pas trop compris ton problème

@+: Ju£i?n
Pensez: Réponse acceptée
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 juil. 2007 à 11:20
Salut,
je ne connais pas cette fonction
Mais en revanche
on écrit "acquisition temps réel" à l'intersection de la ligne 1 et la colonne 1
Ceci revient à écrire dans la cellule A1 donc

PS: change les nom de tes objets car Worksheet et WorkBook sont déjà des nom utilisés et cela peu être source de problème
Dim Wb
As Excel.WorkBook

Dim Ws
As Excel.Worksheet

Ws = Wb.WorkSheets(1)

Wb.Range("A1").Value = "Acquisition en Temps Réel"

@+: Ju£i?n
Pensez: Réponse acceptée
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 juil. 2007 à 11:23
Salut,
Sinon en cherchant sur le net tu aurais trouvé cette fameuse procédure WriteToExcel. ecrite en .NET
    Sub WriteToExcel(ByVal sheet As
Microsoft.Office.Interop.Excel.Worksheet, ByVal rownum As Integer, ByVal
colnum As Integer, ByVal text As String)
        'writes text to a single cell
        Dim r As Microsoft.Office.Interop.Excel.Range
        r = sheet.Cells(rownum, colnum)
        r.Formula = text
    End Sub , ----
(Coloration syntaxique automatique par Kenji)

@+: Ju£i?n
Pensez: Réponse acceptée
0

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

Posez votre question
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 11:31
Hum bizzard je n'ai psa du bien chercher alors. je vais tester ce code. Merci beaucoup
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 11:38
Sais-tu pas contre quelle référence je dois ajouter pour Microsoft.Office.Interop.Excel.Worksheet ?
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 juil. 2007 à 11:43
Salut,
Avant toutes choses travailles tu réellement sous .NET? ou sous VB6?

@+: Ju£i?n
Pensez: Réponse acceptée
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 11:44
Je suis sous .NET
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 juil. 2007 à 11:48
Salut,
Sans grandes conviction, tu peux peu être essayer de supprimer Microsoft.Office.Interop.

Cela reviendrait alors a tes déclarations que tu connais déjà Excel.WorkSheet

@+: Ju£i?n
Pensez: Réponse acceptée
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 11:56
En effet ça marche je suis bête de ne pas y avoir pensé. Merci
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
23 juil. 2007 à 12:00
Re,
Et bien tant mieux si cela fonctionne.

Si tu estimes que ton problème est résolu, n'oublie pas d'appuyer sur le bouton réponse acceptée sur le ou les post qui t'ont aidé.

@+: Ju£i?n
Pensez: Réponse acceptée
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 12:04
Oui mais pour l'instant mon problème principale n'est pas encore règler je suis actuellement en train d'adapter avec mon code. je test et je te donnerais des nouvelles.
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 13:22
J'ai abandonné l'idée du WriteToExcel parceque ça fout la m... pour le reste de mon code. Tu m'as proposé ceci :

Wb.Range("A1").Value = "Acquisition en Temps Réel"

Mais ça ne fonctionne pas
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 13:32
Oui en effet je venais juste d'essayer comme ça et ça fonctionne parfaitement. Merci beaucoup pour ton aide
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 14:15
J'ai une autre question, voici mon code maintenant:



Sub
Main()




Dim
User = InputBox(

"Veuillez entrer le nom d'utilisateur"
)


Dim
Password = InputBox(

"Veuillez entrer le mot de passe du compte "
+ User)


Dim
Ldap

As
DirectoryEntry =

New
DirectoryEntry(


[ldap://serveur LDAP://serveur]

, User, Password)


Dim
searcher

As
DirectorySearcher =

New
DirectorySearcher(Ldap)


Dim
DirEntry

As
DirectoryEntry


Dim
excel

As



New
Excel.Application


Dim
wb

As
Excel.Workbook


Dim
ws

As
Excel.Worksheet











searcher.Filter =

"(objectClass=user)"

excel.Visible =




True



'la fenêtre excel est visible

wb = excel.Workbooks.Add(1)

'on ouvre un classeur dans excel

ws = wb.Worksheets(1)

'on ouvre une feuille dans le classeur excel






For



Each
result

As
SearchResult

In
searcher.FindAll


' On récupère l'entrée trouvée lors de la recherche

DirEntry = result.GetDirectoryEntry







Dim
a = DirEntry.Properties(

"SAMAccountName"
).Value


Dim
b = DirEntry.Properties(

"sn"
).Value


Dim
c =

"Tél : "
+ DirEntry.Properties(

"TelephoneNumber"
).Value







ws.Range(

"A1"
).Value = a
ws.Range(

"A2"
).Value = b
ws.Range(

"A3"
).Value = c








Next

wb.SaveAs(

"C:\Documents and Settings\tanner\Desktop\liste_contact.xls"
)


End



Sub

En fait mon programme scan active directory afin de relver les nom et numéros de téléphone et ainsi pouvoir créer une liste sur excel. J'ai en faite 2 problèmes...

Le premier:

Comment lui dire d'afficher les contacts de cette manière

Nom1
Tel1

Nom2
Tel2

etc...

Pour l'instant a chaque contact, il réécrit par dessus l'existant....

2ème problème.

J'enregistre ensuite le fichier excel sur le bureau mais quand je veux l'ouvrir, ça n'affiche rien... y a la fenêtre excel mais ça bug! ça affiche mon bureau au lieu du contenu... je sais pas si c'est clair.

Merci
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 14:27
Arf merci beaucoup j'avais essayé avec des +  a la place des &!! qu'est-ce que je ferais sans toi

Pour le deuxième problème:

J'enregistre le fichier excel sur mon bureau comme tu as pu le voir dans mon code. Seulement quand je veux ouvrir le fichier excel, il m'affiche ceci:

http://img248.imageshack.us/my.php?image=imgqz4.png

Au lieu de voir les contacts, je vois mon bureau... comme s'il avait fait une print screen de mon bureau et l'avais mis a la place.... quand j'imprime ça joue mais il me faudrait quand meme pouvoir le lire sans imprimer....
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 14:27
Arf merci beaucoup j'avais essayé avec des +  a la place des &!! qu'est-ce que je ferais sans toi

Pour le deuxième problème:

J'enregistre le fichier excel sur mon bureau comme tu as pu le voir dans mon code. Seulement quand je veux ouvrir le fichier excel, il m'affiche ceci:

http://img248.imageshack.us/my.php?image=imgqz4.png

Au lieu de voir les contacts, je vois mon bureau... comme s'il avait fait une print screen de mon bureau et l'avais mis a la place.... quand j'imprime ça joue mais il me faudrait quand meme pouvoir le lire sans imprimer....
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 15:19
si tu peux pas m'aider pour le deuxième problème c'est pas grave. Mais j'en ai un autre qui peut être tu pourras m'aider. Dans mon active directory, il y a l'arborescence suivante:

Users
         OU1 (Unité d'organisation quoi)
         OU2
         OU3

Et il me faudrait qu'il prenne uniquement les users de l'OU1. Actuellement il prend scan l'ou Users donc il relève les users de tous les OU... Je n'ai malheureusement pas trouvé sur internet mais peut etre que si tu sais comment faire.

Merci
0
apache88 Messages postés 78 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 mars 2014
23 juil. 2007 à 15:35
Arf la mise en page fait que c'est assez dur à comprendre... en faite tu as l'OU Users ou tu mets tes utilisateurs mais tu peux créer d'autres OU DANS cette fameuse OU Users et j'aimerais pouvoir scanner uniquement une seule OU de l'OU Users.... Chaud à comprendre mais je fais de mon mieux
0
Rejoignez-nous