[RESOLU] VBA EXCEL - remplissage tableau

VBA EXCEL - remplissage tableau [RESOLU] - VB/VBA/VBS - Programmation

Marsh Posté le 10-02-2008 à 22:08:56    

Bonjour a tous, voila je débute et je cherche le facon la plus            "simple" pour integrer des valeurs dans un tableau au croisement d'une ligne et d'une colonne...   je m'explique
 
20 colonnes avec des couleurs
70 lignes avec des fruits
 
Un formulaire s'ouvre, on selectionne    1 fruit et 1 couleur et on donne une note ...
 
Cette note doit s'integrer dans le tableau au croisement du fruit et de la couleur choisie !!!
 
Merci d'avance.


Message édité par geraldao59 le 17-02-2008 à 11:02:06
Reply

Marsh Posté le 10-02-2008 à 22:08:56   

Reply

Marsh Posté le 11-02-2008 à 10:54:17    

Hum...
Bon, après, pour mettre un "sélecteur", je sais pas trop,
mais tu peux toujours faire un truc du style :
 

Code :
  1. Sub Fruits()
  2.    Fruit = InputBox "Quel est le fruit ?"
  3.    Couleur = InputBox "Quelle est la couleur ?"
  4.    Note = InputBox "Quelle est la note ?"
  5.    '--- On cherche la case à remplir
  6.    For Colonne = 1 To 20
  7.       For Ligne = 1 To 70
  8.          If Cells(Ligne, 1) = Couleur and Cells(1, Colonne) = Fruit Then
  9.             Cells(Ligne, Colonne) = Note
  10.          End If
  11.      Next Ligne
  12.    Next Colonne
  13. End Sub

Reply

Marsh Posté le 11-02-2008 à 19:57:58    

je me permets de mettre un petit bemol a ton code, thejulienlepage si tu permets :jap:
a la place de Couleur & Fruit je ferai un truc du genre
... if lcase(cells(Ligne,1)) = lcase(Couleur) ...
ca permet d'eviter des inconsistences sur des casses differentes entre ce qu'est rentré l(utilisateur et les valeurs des celluls...
apres, comme tu dis un selecteur est le plus efficace mais dans ce cas, il faudrait utiliser une VBForm et un bouton de commande pour afficher cette fenetre et ca doit se compliquer serieusement :lol:


Message édité par Xpif le 11-02-2008 à 19:58:13
Reply

Marsh Posté le 11-02-2008 à 23:16:26    

Bah question perf, c'est pas terrible :
si la cellule à trouver se trouve à la position [70,20], on fait 20*70 itérations (*2 comparaisons) : 2800 comparaisons (car je crois que VBA ne fait pas de l'évaluation en "court-circuit" ).
 
Avec deux boucles consécutives, on fait 20+70 : 90 Comparaisons

Code :
  1. col_found = -1
  2. for colonne = 1 to 20
  3.     if (lcase(...)=...)then
  4.          col_found = colonne
  5.          Exit for
  6.     end if
  7. next
  8. ligne_found = -1
  9. for ligne = 1 to 70
  10.     if(...) then
  11.         ligne_found = ligne
  12.         Exit For
  13.     end if
  14. next
  15. if (ligne_found <0 or col_found<0)then
  16.     MsgBox("error" )
  17.     Exit Sub
  18. End if


 
Sinon pour être encore plus efficace, il vaut (bien) mieux utiliser la fonction find

Code :
  1. Dim cell_col as Range
  2. Dim cell_ligne as Range
  3. Set cell_col = ActiveSheet.Range("A1:T1" ).Find(Fruit)
  4. Set cell_ligne = ActiveSheet.Range("A1:A70" ).Find(Couleur)
  5. if(cell_col is nothing or cell_ligne is nothing) then
  6.      MsgBos("erreur" )
  7.      Exit Sub
  8. Else
  9.     ActiveSheet.Cells(cell_ligne.row,cell_col.column) = Note
  10. end if


Message édité par dreameddeath le 11-02-2008 à 23:19:46
Reply

Marsh Posté le 12-02-2008 à 22:05:07    

merci a tous de vos réponses, je vais tout prendre et tout tenter !
 
Si quelqu'un peut me dire pourquoi ma solution ne fonctionne pas !!
 
j'ai d'abord, sous excel, selectionné mon tableau  ensuite  dans le menu j'ai fait INSERTION / NOM / CREER  =>   ligne du haut et colonne de gauche  ...
 
ensuite sous VBA =>   Ds un formulaire on choisit une couleur (checkbox)    et un fruit (listbox)     on indique une note
 
et enfin ma ligne de code qui ne fonctionne pas..
 
RANGE(fruit & " " & couleur).value = note
 
Merci d'avance...


Message édité par geraldao59 le 12-02-2008 à 22:06:04
Reply

Marsh Posté le 12-02-2008 à 22:41:39    

Bah en fait range ne prend que deux structures de string à ma connaissance :
L[xx]C[xx]:L[xx]C[xx]

a[xx]:b[xx] (où a et b peuvent valoir de A à IV ex : A10:B40)
 
Toute autre syntaxe sera refusée, donc "Orange Rouge" n'est pas une plage valide
 
 

Reply

Marsh Posté le 12-02-2008 à 22:54:38    

en fait cela fonctionne sur un tableau tres petit !!!
je l'ai testé !!!!
 
l'espace est l'opérateur d'intersection de plages pour excel. Comme ; (; pour les feuilles en français et , en vba) est l'opérateur d'union de plages

Reply

Sujets relatifs:

Leave a Replay

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