Transfert de données d'une feuille excel vers un tableau VBA

Transfert de données d'une feuille excel vers un tableau VBA - VB/VBA/VBS - Programmation

Marsh Posté le 26-03-2010 à 12:48:11    

Hello,
 
Voila ca fait deux jours que je me galère la dessus donc je viens demander un petit coup de main.
Je dois synthétiser les informations provenant d'un extract de données d'un site SharePoint, j'obtiens donc une feuille avec différents champs de données.
Mon problème est que je n'arrive pas à créer un tableau en vba qui permet de stocker la velur de chaque cellule dans un champs tu tableau.
Je ne connais pas non plus le nombre de ligne que va m'importer mon tableau excel.
 
Je préfère vous le dire la programmation c'est pas vraiment mon fort mais j'ai reussi à pondre un code qui ne fonctionne pas ^^
 

Code :
  1. Dim statut() As String
  2. Dim i As Integer, j As Integer
  3.    
  4.         'Parcours de la colonne "Statut"
  5.         For i = 2 To i = Worksheets("Import SPS Altran" ).Cells(2, i) = Null
  6.         statut(i) = Worksheets("Import SPS Altran" ).Cells(2, i).value
  7.         Next i


 
Merci de votre aide ;)


---------------
L’impossible est déjà fait, pour les miracles prévoir un délai.
Reply

Marsh Posté le 26-03-2010 à 12:48:11   

Reply

Marsh Posté le 26-03-2010 à 15:35:11    

Tu veux en faire quoi de ton tableau?  
Parce que tu peux peut-être trouver une solution qui évite le tableau de String.  
La 1ére option est de lire la feuille une fois, déduire la taille, dimensionner la variable puis lancer le traitement.
La 2ème option est de redimensionner le tableau avant chaque ajout, (en cours de traitement) mais c'est moins beau, et consommateur de temps.
 
Et pendant que j'y pense, il n'aura qu'une dimension, ce tableau (une colonne à lire)?
 

Reply

Marsh Posté le 26-03-2010 à 18:21:01    

Merci pour ta réponse voila ce que j'ai trouvé comme solution pour le moment:
 

Code :
  1. Dim statut() As String
  2.     Dim mStatut As Double
  3.     Dim i As Integer, j As Integer
  4.    
  5.         For i = 2 To 10000 'Parcours de la colonne "Statut"
  6.        
  7.         If ThisWorkbook.Worksheets("Import SPS Altran" ).Cells(i, 2).Value = "" Then 'Sortie de boucle en cas de cellule vide
  8.             Exit For
  9.         End If
  10.        
  11.         j = j + 1
  12.         ReDim Preserve statut(j)
  13.         statut(j) = ThisWorkbook.Worksheets("Import SPS Altran" ).Cells(i, 2).Value
  14.        
  15.         mStatut = Val(statut(j)) 'Extraction de la valeur numerique de chaque statut qui vas permettre de determiner son etat
  16.        
  17.         If mStatut = 0 Then
  18.             ThisWorkbook.Worksheets("Synthèse" ).Range("F14" ).Value = ThisWorkbook.Worksheets("Synthèse" ).Range("F14" ).Value + 1
  19.         End If
  20.        
  21.         Next i


 
Dis moi si tu penses qu'il y a moyen d'optimiser ce code ?


Message édité par spolnix le 26-03-2010 à 18:22:58

---------------
L’impossible est déjà fait, pour les miracles prévoir un délai.
Reply

Marsh Posté le 29-03-2010 à 08:37:56    

Bon bah, je n'ai toujours pas tout compris, mais voilà un code qui fait la même chose, en plus simple.
Dans le code que tu donnes, la variable tableau statut(j) ne sert à rien.
 

Code :
  1. Sub Test()
  2. Dim statut() As String
  3.     Dim objSheetSPS As Worksheet, objSheetSynth As Worksheet
  4.     Dim mStatut As Double
  5.     Dim i As Integer, iCount As Integer
  6.  
  7.         ' Si les noms de feuilles changent, un seul endroit pour mettre le code à jour.
  8.         Set objSheetSPS = ThisWorkbook.Worksheets("Import SPS Altran" )
  9.         Set objSheetSynth = ThisWorkbook.Worksheets("Synthèse" )
  10.        
  11.         i = 1
  12.         Do While objSheetSPS.Cells(i, 2) <> ""  'Parcours de la colonne "Statut"
  13.              'Extraction de la valeur numerique de chaque statut qui vas permettre de determiner son etat
  14.              If Val(objSheetSPS.Cells(i, 2).Value) = 0 Then
  15.                   iCount = iCount + 1
  16.              End If
  17.              i = i + 1
  18.         Loop
  19.         objSheetSynth.Range("F14" ).Value = iCount
  20.        
  21. End Sub


Message édité par Arcbitre le 29-03-2010 à 08:55:34
Reply

Marsh Posté le 30-03-2010 à 10:17:26    

En fait c'est juste de la manipulation de donnée c'est un tableau qui me permet de faire une synthèse d'un export de donnée. Par exemple dans ma colonne statut je peux avoir 220 statut "Prévisionel" sur 220 lignes mon but est de savoir combien de ligne sur les 2000 exportés ont un statut prévisionel !
J'espère avoir été plus clair ;)
 
Merci pour ton astuce pour éviter le nommage répétitif des feuilles ;)


---------------
L’impossible est déjà fait, pour les miracles prévoir un délai.
Reply

Marsh Posté le 30-03-2010 à 16:27:56    

Bonjour
 
Pourquoi passer par du code ??
Vu ta demande, un filtre automatique semble suffire...
 
Ensuite, les listes sharepoint (d'ailleurs, wss ou moss ?) sont accessibles et modifiables avec une base Access...
Donc pour le traitement de données, export etc. pas besoin de code ou vraiment tres tres peu sur Access. Jouer avec des requetes suffira.
 
Cordialement


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 01-04-2010 à 10:37:02    

Citation :

Pourquoi passer par du code ??  


 
Pas le choix par la suite le tableau devra avoir des fonction avancées que je ne peux gérer qu'en VBA
 

Citation :

Ensuite, les listes sharepoint (d'ailleurs, wss ou moss ?) sont accessibles et modifiables avec une base Access...  


 
Ca ne m'interesse pas des modifier les données mais seulement de les recupérer et de les synthètiser pour pouvoir les présenter lors de reunion, je ne pense pas que access soit l'outil adequate.


---------------
L’impossible est déjà fait, pour les miracles prévoir un délai.
Reply

Marsh Posté le 01-04-2010 à 12:31:44    

spolnix a écrit :

Ca ne m'interesse pas des modifier les données mais seulement de les recupérer et de les synthètiser pour pouvoir les présenter lors de reunion, je ne pense pas que access soit l'outil adequate.


Possible, m'enfin avec Access pour réaliser l'identique de vos 20 lignes de code, une requete toute bete suffit...
 
Ensuite, manipuler des données... Un sgbd, aussi "petit" soit il comme Access, c'est toujours plus simple qu'un tableur, aussi evolué soit il comme Excel.
 
Par exemple, avec Access je fais des stats assez complexes, venant de sources diverses comme sql server ou des listes wss, que j'exporte en xml en vu d'etre utilisé par des outils de graphiques dynamiques en flash, directement dans des formulaires Access... Pour un petit SGBD c'est deja pas mal...
Les outils de graphiques sont ici d'ailleurs si ca interresse qqun.
 
Apres en effet, je ne sais pas ce que tu comptes faire de ce tableau par la suite...


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 09-06-2010 à 17:18:05    

j'ai un probleme encore plus basic  
je veux stocker les données d'une feuille excel sur un tableau en VBA
j'ai penser naturellement a utiliser une double boucle pour remplir mon tableau mais je ne sais pas comme faire balader ma 2eme varibles sur les colones car c'est un chiffre et les cologne sont nommée par des lettres
 
merci de votre aide

Reply

Marsh Posté le 09-06-2010 à 18:27:13    

Bonjour
 
A = 1
B = 2
Etc.
 
Regarde du coté Column() ou de Cell()
 
Cordialement


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 09-06-2010 à 18:27:13   

Reply

Marsh Posté le 10-06-2010 à 09:49:20    

Merci de ta réponse
je pense que j'utilise mal cette fonction.
voila mon code:
 
For J = 3 To 8
 
    For I = 5 To 1071
        Worksheets(3).Cells(J, I) = T(J - 3, I)
    Next I
Next J
 
et le message d'erreur me dit "erreur prédéfinie par l'aplication ou par l'objet
pour le moment j'en suis donc reduit a fair une boucle simple par colone..
ca m'arrangerai vraiment de comprendre le pb de la double boucle

Reply

Marsh Posté le 10-06-2010 à 10:01:29    

Ben en faite il fallait que j'inverse I et J...  -_-
les colones sont en 2eme !
Merci du coup de main

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed