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 :

Incompréhension d'une procédure compilant les données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Par défaut Incompréhension d'une procédure compilant les données
    Bonjour,

    Après avoir repris tous vos conseils du départ jusqu'à maintenant .... je ne comprends pas une chose. (sur une explication de MARCELG)

    Voila on m'a expliqué cette procédure évènementielle qui se déclenche quand je sélectionne une cellule en colonne 4 à partir de la ligne 26.

    Après avoir des noms définis comme "CLI_1", "CLI_2", ..., "REC1", ... en tant que noms de cellules.

    Concernant le rangement de mes résultats, ce dernier se fait dans la feuille "Nom" dans les ranges correspondants ...(CLI,REC, .... )

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    ' regroupement des données
     
    Dim listdon As Variant
    Dim lign As Byte
    Dim donexp As String
     
    With Target
            If .Column <> 4 Or .Row < 27 Then Exit Sub
            lign = .Row - 26
            listdon = Array("CLI", "REC", "PAY", "PAY", "DS", "SF", "VD", "AMCCY1", "AMCCY2", "CCYO", "CCYT", "RATE")
            donexp = ""
            For Each donnée In listdon
                    donexp = donexp & Range(donnée & "_" & lign)
            Next donnée
     
    Call crea_page
     
            Sheets(nom).Range("CLI", "REC", "PAY", "PAY", "DS", "SF", "VD", "AMCCY1", "AMCCY2", "CCYO", "CCYT", "RATE").Value = donexp
     
     End With
     
    Call TypOpe
     
    Call transvalneg
     
    End Sub
    J'ai trois questions :

    -Pourquoi mon code précédent génére une erreur à la ligne suivante en me disant que la méthode range de l'objet worksheet a échoué ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    donexp = donexp & Range(donnée & "_" & lign)
    - Dois je appeler la création de la page avant de ranger les données dans cette dernière ?? (comme le code précédent le premier code )

    et

    -Est ce que je dois définir les ranges dans mon modules ? Et faire une boucle comme le code suivant ?

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Sub varcop()
     
        '  Determine destination variables ds "deal" worksheet
     
     For i = 1 To 20
     
            CLI = Sheets(nom).Range("C6:D6")
            REC = Sheets(nom).Range("C14:D14")
            PAY = Sheets(nom).Range("C15:D15")
            DS = Sheets(nom).Range("C4:D4")
            SF = Sheets(nom).Range("C7:D7")
            VD = Sheets(nom).Range("C8:D8")
     
     
        If Worksheets("2401").Range("G" & i).Value > 0 Then
            AMCCY1 = Sheets(nom).Range("D11")
        Else
            AMCCY2 = Sheets(nom).Range("D12")
        End If
     
     
        If Worksheets("2401").Range("H" & i).Value < 0 Then
            AMCCY2 = Sheets(nom).Range("D12")
        Else
            AMCCY2 = Sheets(nom).Range("D11")
        End If
     
        If Worksheets("2401").Range("G" & i).Value > 0 Then
            CCYO = Sheets(nom).Range("C11")
        Else
            CCYO = Sheets(nom).Range("C12")
        End If
     
        If Worksheets("2401").Range("H" & i).Value < 0 Then
            CCYT = Sheets(nom).Range("C12")
        Else
            CCYT = Sheets(nom).Range("C11")
        End If
     
            RATE = Sheets(nom).Range("C13:D13")
     
       Next i
     
    End With
     
    Dim intcount As Integer
        For intcount = 1 To 11
            For i = 1 To 10
                Select Case intcount
                Case 1: CLI = Range(CLI)
                Case 2: REC = Range(REC)
                Case 3: PAY = Range(PAY)
                Case 4: DS = Range(DS)
                Case 5: SF = Range(SF)
                Case 6: VD = Range(VD)
                Case 7: AMCCY1 = Range(AMCCY1)
                        AMCCY1 = NumberFormat = "0.0000"
                Case 8:  AMCCY2 = Range(AMCCY2)
                         AMCCY2 = NumberFormat = "0.0000"
                Case 9: CCYO = Range(CCYO)
                Case 10: CCYT = Range(CCYT)
                Case 11: RATE = Range(RATE)
            End Select
            Next i
        Next intcount
     
    End Sub

  2. #2
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Bien, je vois que tu as des variables non déclarées et d'autres qui le sont. À moins que celles qui me semblent ne pas être déclarées le soit plus haut au niveau module.

    Pour t'assurer que les variables soient correctement déclarées (explicitement) et qu'il n'y ait pas d'embrouilles avec celles-ci lors de l'exécution tu mets Option Explicit dans le haut de ton code. (si tu connais, ignore ce conseil)

    Je vois aussi que la variable donnée comprend un caractère accentué. Le problème vient peut-être de là.

    Si nom est le le nom de la feuille (ce qui me surprendrait, mais bon...) et non une variable, il faut le mettre entre "".

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Par défaut
    Bonjour,

    Tout d’abord, Merci pour ton aide.

    En faite, elles sont toutes déclarées au niveau du module, je les ai déclaré en public car elles vont être appelées par plusieurs sub dans le projet.

    Option explicit est déjà incorporée en haut de mon code.

    De plus, je n 'ai pas mis sheets(nom) sans nom entre "" car c est une variable appelée par plusieurs sub dans le projet donc si je comprends bien déclarée en public ...


    Le problème est que quand j’enlève l’accent sur donnée il y a un nouveau message d’erreur me disant variable pas défini, cela m amène à une autre question pourquoi donnée marche et pas donnee ??

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    D'abord petit conseil utile, avant de lancer ta procédure , compile ton projet.
    Pour cela tu cliques sur Débogage/Compiler VBAProject qui se trouve dans l'éditeur VBA (VBE). Celui-ci va déjà te détecter une bonne partie de choses incohérentes dans ton code, erreurs de syntaxes, variables non déclarées etc ...
    Déjà, cela va dégrossir beaucoup.
    Le problème est que quand j’enlève l’accent sur donnée il y a un nouveau message d’erreur me disant variable pas défini, cela m amène à une autre question pourquoi donnée marche et pas donnee ??
    Il est normal que si tu modifies l'orthographe d'une variable en oubliant de modifier également sa déclaration, tu obtiennes un message d'erreur Donnee et Donnée pour VBA c'est 2 variables distinctes
    Petit conseil.
    1 - Pour éviter d'autres soucis, utilise à l'avenir l'éditeur pour remplacer des noms de variables, cela t'éviteras des déconvenues.
    2 - Ensuite comme la très justement souligné zazaraignée, évite d'utiliser des variables avec accents, cela peut devenir la source de problèmes.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Par défaut
    Bonjour,

    Voila j'ai bien suivi vos conseils, donc j'ai premièrement utilisé la fonction compilation de mon projet qui m'a d ailleurs permis de réaliser un certains nombre de modifications, donc cela m'a effectivement permis de dégrossir mes fautes.
    J'ai ensuite modifiée l'orthographe de la déclaration de la variable mais aussi de chaque nom de cette dernière dans la procédure. (bien sûr sans accent)


    Par contre, qu'est que l'éditeur sous vba ? à quoi sert-il ?

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'Editeur de VBE permet de faire pas mal de choses et notamment, comme dans tous les logiciels, remplacer une chaine de caractères par une autre.
    Ainsi si tu cliques sur Edition/Remplacer... ou Ctrl+H tu as une boîte de dialogue qui te permets de remplacer par exemple Donnée par Donnee.
    Attention de bien sélectionner dans quel endroit de ton programme tu souhaites remplacer ces chaines.
    Ainsi tu as 3 choix possibles : Procédure en cours, Module en cours, Projet en cours
    Fais ton remplacement pas à pas (Remplacer au lieu de Remplacer Tout) pour éviter des surprises du genre : Je remplace la variable Lign par Ligne, l'éditeur rencontrant une variable nommée LignAuto remplacera par LigneeAuto
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/08/2006, 16h23
  2. Réponses: 3
    Dernier message: 18/07/2006, 17h37
  3. Réponses: 12
    Dernier message: 22/06/2006, 12h09
  4. [MySQL] Afficher une page avec les données de la base de données... Assez compliqué
    Par snakejl dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 19/05/2006, 10h46
  5. Réponses: 3
    Dernier message: 09/04/2006, 12h58

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