Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1150 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU] VBA EXCEL - remplissage tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] VBA EXCEL - remplissage tableau

n°1684646
geraldao59
Posté le 10-02-2008 à 22:08:56  profilanswer
 

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
mood
Publicité
Posté le 10-02-2008 à 22:08:56  profilanswer
 

n°1684748
Profil sup​primé
Posté le 11-02-2008 à 10:54:17  answer
 

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

n°1685036
Xpif
Posté le 11-02-2008 à 19:57:58  profilanswer
 

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
n°1685085
dreameddea​th
Posté le 11-02-2008 à 23:16:26  profilanswer
 

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
n°1685568
geraldao59
Posté le 12-02-2008 à 22:05:07  profilanswer
 

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
n°1685582
dreameddea​th
Posté le 12-02-2008 à 22:41:39  profilanswer
 

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
 
 

n°1685585
geraldao59
Posté le 12-02-2008 à 22:54:38  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [RESOLU] VBA EXCEL - remplissage tableau

 

Sujets relatifs
[VBA ou Excel] RechercheV inversée (RESOLU)[RESOLU] Titre de site qui ne s'affiche pas
[RESOLU]code minimal en java[Résolu]Interférence entre deux formulaires d'une même page
[Résolu] Aide pour la mise en place SSO[RESOLU] Validation W3C XHTML 1 Transitional
[RESOLU]Fenetre confirm JAvascriptExport d'un tableau en html
Plus de sujets relatifs à : [RESOLU] VBA EXCEL - remplissage tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR