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 :

Code qui fonctionne depuis un module mais pas depuis un workbook


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut Code qui fonctionne depuis un module mais pas depuis un workbook
    Bonjour à tous,

    J'ai fait un code un peu laborieux dans un module où il semblait fonctionner. Mais comme je n'ai pas réussi à appeler ses methodes depuis un code situé dans thisworkbook, je l'ai replacé dans thisworkbook, et là il ne fonctionne plus.

    Arrivé à "While (Cells(i + 24, 2).Value <> 0)" il saute direct à la fin alors que la cellule n'est pas nulle...

    Je devrais apprendre mieux vba avant de faire tout çà mais c'est dans l'urgence...

    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
    Private Sub CZGrid()
    Dim i As Integer, j As Integer
     
    Worksheets("Speed & Aero Map").Select
     
    i = 0
    While (Cells(i + 24, 2).Value <> 0)
    i = i + 1
    ReDim Preserve FrontRideHeightCZ(i)
    FrontRideHeightCZ(i) = Cells(i + 23, 2).Value
    Wend
     
    i = 0
    While (Cells(23, i + 3).Value <> 0)
    i = i + 1
    ReDim Preserve RearRideHeightCZ(i)
    RearRideHeightCZ(i) = Cells(23, i + 2).Value
    Wend
     
    ReDim CZ(UBound(FrontRideHeightCZ), UBound(RearRideHeightCZ))
     
    For i = 1 To UBound(FrontRideHeightCZ)
        For j = 1 To UBound(RearRideHeightCZ)
     
            CZ(i, j) = Cells(i + 23, j + 2).Value
     
        Next
    Next
     
    End Sub

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Au lieu de sélectionner la feuille avant d'y lires les données, il suffit d’adresser convenablement les range.
    Un autre amélioration consiste à travailler avec des variables tableaux au lieu des vas et vient entre vba et feuille.
    Pour la pédagogie, j'ai utilisé des variables tableaux intermédiaires TbCol,TbLig et TbData pour remplir tes FrontRideHeightCZ, RearRideHaightCZ et CZ (Tu peux travailler directement avec les variables tableaux intermédiaires à 2 dimensions, cf ci dessous)
    Une dernière remarque, le code doit être public dans un module standard pour qu'il soit reconnu à partir de n'importe quel endroit de ton projet

    Donc, code dans module standard:
    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
    Option Explicit
    Public FrontRideHeightCZ
    Public RearRideHeightCZ
    Public CZ
     
    Public Sub CZGrid()
    Dim LastLig As Long, i As Long
    Dim LastCol As Integer, j As Integer
    Dim TbCol, TbLig, TbData
     
    With ThisWorkbook.Worksheets("Speed & Aero Map")
        LastLig = .Cells(.Rows.Count, 2).End(xlUp).Row
        TbLig = .Range(.Cells(24, 2), .Cells(LastLig, 2))
        LastCol = .Cells(23, .Columns.Count).End(xlToLeft).Column
        TbCol = .Range(.Cells(23, 3), .Cells(23, LastCol))
        TbData = .Range(.Cells(24, 3), .Cells(LastLig, LastCol))
    End With
     
    ReDim FrontRideHeightCZ(1 To UBound(TbLig, 1))
    ReDim RearRideHeightCZ(1 To UBound(TbCol, 2))
    ReDim CZ(1 To UBound(TbData, 1), 1 To UBound(TbData, 2))
     
    For i = 1 To UBound(TbLig, 1)
        FrontRideHeightCZ(i) = TbLig(i, 1)
    Next i
    For j = 1 To UBound(TbCol, 2)
        RearRideHeightCZ(j) = TbCol(1, j)
        For i = 1 To UBound(TbLig, 1)
            CZ(i, j) = TbData(i, j)
        Next i
    Next j
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Points : 111
    Points
    111
    Par défaut
    Merci!

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

Discussions similaires

  1. [ZF 1.10] Clause where qui fonctionne avec type int mais pas avec type String
    Par shadypierre dans le forum Zend_Db
    Réponses: 5
    Dernier message: 30/04/2010, 13h00
  2. Code qui s'execute sous IE mais pas sous FF ni Chrome
    Par FraocH dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/04/2010, 10h13
  3. Réponses: 5
    Dernier message: 26/08/2009, 15h40
  4. Code qui marche sur un poste mais pas sur un autre
    Par TOSCAN dans le forum Langage
    Réponses: 5
    Dernier message: 11/06/2008, 21h09
  5. [RegEx] Regex qui fonctionne dans un preg_replace mais pas dans un ereg
    Par méphistopheles dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2007, 11h56

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