IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

aide programme débutant [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut aide programme débutant
    bonjour, voici un draft de ce que je veut programmer . Ce que j'ai mis entre guillemets et en rouge c'est ce que je ne sait pas faire.Je suis débutant et je vous remercie de votre aide!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    For Cpt1 = 1 To DL_burst Step 1
                    For Cpt2 = 1 To DL_burst Step 1
                        If Cpt1 * Cpt2 = DL_burst Then
                           "Ranger les résultats des cpti et cptj dans un tableau"
                        End If
                    Next Cpt2
                Next Cpt1
    
    
    Function optimum(nb_sub_tr, nb_bis_tr) 
    
    rect_width=0
    rect_height=0
    
    For ("tout le tableau des cpti cptj -> tableau de  deux colonnes donc avec nombre de lignes indéfini")
        If cpti<=nb_sub_tr And cptj<=nb_bis_tr Then
            While (nb_bis_tr-rect_width)>=0
                rect_width=rect_width + cpti
            Wend
            While (nb_sub_tr-rect_height)>=0
                rect_height=rect_heigth + cptj
            Wend
        End If
        
    Next
    End function
    
    "Récupérer le couple rect_height et rect_width tel que rect_height x 
    rect_width est le max des couples"
    
    nb_sub_tr - rect_height("max") = a
    nb_bis_tr - rect_width("max") = b
    
    Call Optimum(a,b)
    
    "Trouver point d'arrêt "

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bonjour

    Les balise code ca existe et c'est très pratique (regarde vers la fin du premier message de ce forum)

    Pour apprendre a faire un tableau
    http://silkyroad.developpez.com/vba/tableaux/
    Tu trouvera ce qu'il faut pour le deuxième point rouge avec ubound

    ensuite je ne sais pas si ce qui te bloque c'est la méthode ou l'utilisation du tableau.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    Merci pour ta réponse!
    J'ai regardé pour baliser le code et en effet c'est plus lisible comme cela.
    Cependant, j'ai lu l'aide que tu m'a envoyé, mais pour faire ce que je veux (première ligne rouge: mettre les résultats dans un tableau) il faudrait d'après ce que j'ai compris faire deux boucles imbriquées sur i et j avec Ubound en plus de mes boucles sur cpti cptj que j'ai déjà; c'est ce qu eje veux éviter.

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    bon je t'aide mais je ne sais pas ce que tu appelel résultat cpti c'est pas un resultat mais une variable et si le résultat c'est le produit c'est toujours le même. C'est quoi les dimension de ton tableau? Il contient quoi?
    Je peux pas imaginer tout ca a ta place
    Quand tu sauras ce que tu veux et que tu sauras l'exprimer on pourra envisager une réponse adapté

    La j'ai un tableau de dim DL_bursxDL_burs qui contient vrai au coordonné i j si i*j = DL_burs faux sinon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    dim tableau() as boolean
     
    redim tableau(1 to DL_burs,1 to DL_burs)
    For Cpt1 = 1 To DL_burst Step 1
                    For Cpt2 = 1 To DL_burst Step 1
                        If Cpt1 * Cpt2 = DL_burst Then
                           burst(cpt1,cpt2)=true
                     End If
                 Next Cpt2
    Next Cpt1

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    quand tu dis tu veux dire plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tableau(cpt1,cpt2)=true
    n'est-ce pas?

    Oui c'est vrai que c'est pas très clair tout ça; mais si j'arrive à sortir ça dans un tableau ça me règle tout mon problère.

    Si je comprends bien tu mets vrai dans le tableau si la condition i*j est vraie.
    Mais faudrait en fait que le tableau soit de 2 colonnes avec les i et j qui vérifient la condition dans chaque colonne(une colonne avec les i et une autre avec les j). Tu vois?

  6. #6
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    effectivement c'était bien tableau
    A tableau n'a ni ligne ni colonne, il a des dimensions.
    Quand tu le représente tu parle de ligne et de colonnes mais on est entre personne civilisé alors pas de ligne pas de colonne.
    Sinon ca va être pire, car il va te falloir utiliser la commande redim preserve et elle ne permet de redimensionner que la dernière dimension. Du coup la première dimension sera tes "colonnes" et la deuxième les "ligne" et là ceux qui ont des souvenir sur les matrice vont crier au scandale (et je m'en balance leur convention mon brisé les bonbons pendant 5ans)

    donc tableau(1,k) c'est la première valeur du k ème couple et tableau(2,k) la deuxième valeur du k ème couple Ni ligne Ni colonne


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    'même dédlaration de variable plus
    dim n as integer
    n=1
    For Cpt1 = 1 To DL_burst Step 1
                    For Cpt2 = 1 To DL_burst Step 1
                        If Cpt1 * Cpt2 = DL_burst Then
                           n=n+1
                           redim preserve tableau(1 to 2, 1 to n)
                           tableau(1,n)=i
                           tableau(2,n)=j
                     End If
                 Next Cpt2
    Next Cpt1
    par contre tu aura des doublons il y a eu un sujet ou j'ai fait un poste pour éviter cela (il doit avoir moins de 2 semaine) je te laisse le chercher,. Il devait utiliser comme mot clef multiple d'un nombre au quelque chose comme ca

  7. #7
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    Salut krovax,
    Merci pour le tableau ça marche nickel chrome!!

    Cependant pour la suite du code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
     
    Function optimum(nb_sub_tr, nb_bis_tr) 
     
    Dim i As Integer
    rect_width = 0
    rect_height = 0
    nb_sub_tr = Sheets("OFDMA PHY").Range("C24").Value         
    nb_bis_tr = (Sheets("OFDMA PHY").Range("C40").Value) / 2   
     
    For i = 1 To n Step 1
        If Tableau(1, i) <= nb_sub_tr And Tableau(2, i) <= nb_bis_tr Then
            While (nb_bis_tr - rect_width) >= 0
                rect_width = rect_width + Tableau(1, i)
            Wend
            While (nb_sub_tr - rect_height) >= 0
                rect_height = rect_heigth + Tableau(2, i)
            Wend
        End If
     
    Next i
     
    End Function
    j'aimerais récupérer le (rect_heigth x rect_width) max parmi tous ceux obtenus avec la boucle sur i.

  8. #8
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    je te laisse adapter cette exemple

    j'ai un tableau dimention 2xN

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    dim i as integer
    dim N as integer
    dim  max as double, imax as integer
     
    'plus d'autre
    max=tableau(1,1)*tableau(2,1)
    imax=1
    for i=2 to N
        if tableau(1,i)*tableau(2,i)>max then
            max=tableau(1,i)*tableau(2,i)
            imax = i
       end if
    next i
     
    msgbox "le premier max trouvé est le " & i & "ème du tableau et vaut : " & max

  9. #9
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Par défaut
    Merci l'expert!

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par Krovax, à propos du redimensionnement des tableaux à deux dimensions
    Sinon ca va être pire, car il va te falloir utiliser la commande redim preserve et elle ne permet de redimensionner que la dernière dimension. Du coup la première dimension sera tes "colonnes" et la deuxième les "ligne" et là ceux qui ont des souvenir sur les matrice vont crier au scandale
    Heureusement, il y a la fonction Excel "Transpose" qui corrige le tir et met les lignes et les colonnes là ouifo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UnTablo = Application.Transpose(LeTablo)
    Juste pour embêter "ceux-là qui m'ont brisé les bonbons pendant 5 ans avec les matrices"

  11. #11
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Et mon tableau a 9 dimensions tu me le transpose comment? hein ?
    Parce que moi j'aime bien avoir plein de dimensions c'est pratique et les gens regardent ca avec de grand yeux

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Désolé, Krovax, j'ai modifié ton message par erreur. Edite-le pour le remettre en l'état, je crois que tu étais content de savoir que transpose... etc. 2D
    Ceci étant :
    Citation Envoyé par Krovax
    Et mon tableau à 9 dimensions tu me le transposes comment? hein ?
    Parce que moi j'aime bien avoir plein de dimensions c'est pratique et les gens regardent ca avec de grand yeux
    Tiens, je te le rends, ton tableau avec plein de dimensions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub TableauAvecPleinDeDimensions()
    Dim Montab, Tablo1, Tablo2, Tablo3, Tablo4, Tablo5, Tablo6, Tablo7, Tablo8, Tablo9
        Tablo1 = Array(1, 2, 3, 4, 5)
        Tablo2 = Array(6, 7, 8, 9, 10)
        Tablo3 = Array(11, 12, 13, 14, 15)
        Tablo4 = Array(16, 17, 18, 19, 20)
        Tablo5 = Array(21, 22, 23, 24, 25)
        Tablo6 = Array(26, 27, 28, 29, 30)
        Tablo7 = Array(31, 32, 33, 34, 35)
        Tablo8 = Array(36, 37, 38, 39, 40)
        Tablo9 = Array(41, 42, 43, 44, 45)
        Montab = Array(Tablo1, Tablo2, Tablo3, Tablo4, Tablo5, Tablo6, Tablo7, Tablo8, Tablo9)
        MsgBox Montab(8)(3)
    End Sub
    (d'après AlainTech, quand il était beaucoup plus jeune et qu'il avait encore beaucoup de cheveux )

  13. #13
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    pas mal la méthode mais il a toujours que deux dimension un vecteur de vecteur

    C'est ca un tableau avec plein de dimensions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim tableau(2,8,8,8,8,9)
    la j'ai 73 728 valeur et 6 coordonnés par valeur. Celui la on peut pas le transposer ni parler de ligne ou de colonne
    Et ca se trouve des tableau comme ca
    Mais la je crois que je m'éloigne du problème

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/11/2014, 22h12
  2. Réponses: 4
    Dernier message: 12/05/2010, 17h54
  3. aide programmation débutant
    Par azerty0125 dans le forum Débuter avec Java
    Réponses: 29
    Dernier message: 16/06/2009, 14h48
  4. Aide programme débutant en C++
    Par beufa59 dans le forum Débuter
    Réponses: 4
    Dernier message: 10/03/2009, 16h30
  5. Aide pour débutant : addition
    Par playentry dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/03/2005, 20h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo