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 :

Probleme de sous procedure


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Par défaut Probleme de sous procedure
    Bonjour a tous,

    Dans une procedure, a un moment j'ai une boucle: i=66 to 70
    Je souhaites que dans le code a l'interieur de cette boucle utiliser une sous procedure pour que mon 66 devienne 1, mon 67 -> 22, 68 -> 25, 69 -> 29 et 70 devienne 41.

    J'ai donc cree une sous procedure toute simple qui est la suivante:

    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
     
    sub conversion(ByRef x as Integer)
    Select Case x
         Case is = 66
              x = 1
         Case is = 67
              x = 22
         Case is = 68
              x = 25
         Case is = 69
              x = 29
         Case is = 70
              x = 41
         Case Else
    End Select
     
    end sub
    puis je teste en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub testconversion()
    Dim i as Integer
     
    For i = 66 to 70
         conversion i
         Debug.Print Cells(i,1).value    'car le but est de recuperer des valeurs de cellule
    Next i
     
    End Sub

    J'ai l'erreur 1004 Application-defined or object-defined qui apparait a ma ligne ou il y a debug.print (j'ai essaye avec MsgBox et idem ca ne marche pas)

    Mais si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub testconversion()
    Dim i as Integer
     
    i = 66 'puis ensuite je change manuellement jusqu'a 70
    conversion i
    Debug.Print Cells(i,1).value
     
     
    End Sub
    Bah la ca marche! Pourquoi? Je ne comprends pas pourquoi le fait d'utiliser une boucle m'empeche de convertir correctement. Comment puis-je trouver une methode/astuce pour obtenir ce que je veux?

    Merci de votre aide

    vanhoa

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,


    Déjà tu utilise Cells sans le préfixer par le couple classeur/feuille et donc tu travaille sur la feuille active ...: est tu sur d'avoir une feuille de calcul active au moment de l'exécution de ton code ...?



    tu peu aussi regarder la valeur de ton i après convertion.. précède la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print Cells(i,1).value    'car le but est de recuperer des valeurs de cellule
    d'un
    par exemple.


    Cdt.

  3. #3
    Membre expérimenté Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Par défaut
    Bonjour,

    Oui, dans mon code, j'utilise le nom interne de la feuille, je voulais juste simplifier pour mon exemple.
    J'avais deja essaye avec seulement i, et ca me lancait une boucle qui ne se terminait pas, donc oblige de faire ctrl+break

    vanhoa

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par vanhoa Voir le message
    Bonjour,

    Oui, dans mon code, j'utilise le nom interne de la feuille, je voulais juste simplifier pour mon exemple.
    J'avais deja essaye avec seulement i, et ca me lancait une boucle qui ne se terminait pas, donc oblige de faire ctrl+break

    vanhoa
    à oui j'avais pas vu tu modifie le "i" d'une boucle for dans cette boucle.... il ne faut pas ... utilise une variable supplémentaire ou transforme ta sub convertion en fonction


    var supplémentaire


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim i as Integer
    Dim x As integer
    For i = 66 to 70
        x  = i ' affecte à x la valeur de i pour ensuite utiliser x et ainsi préserver i.. 
         conversion x
         Debug.Print Cells(x,1).value    'car le but est de recuperer des valeurs de cellule
    Next i

    ou bien en transformant conversion en fonction :

    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
    function conversion( x as Integer) as integer
     
    Select Case x
         Case is = 66
              conversion = 1
         Case is = 67
              conversion = 22
         Case is = 68
              conversion = 25
         Case is = 69
              conversion = 29
         Case is = 70
              conversion = 41
         Case Else
              conversion = x
    End Select
     
    end sub
    et ensuite dans ta procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print Cells(conversion(i),1).value

  5. #5
    Membre expérimenté Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Par défaut
    Super, merci beaucoup!
    Je ne savais pas qu'on ne pouvait pas modifier la valeur de i, en terme de logique je me suis dit que tout collait et je ne voyais pas la ou ca clochait.
    Un detail qui ne m'echappera plus desormais :-)

    Merci

    vanhoa

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    en fait c'est pas qu'on peu pas y toucher mais c'est qu'il vaut mieux éviter pour ne pas provoquer de problèmes dans ce genre..


    ici tu as une boucle For qui fait varier i de 66 à 70 en l'incrémentant de 1 à chaque tour de cycle sauf que pendant ta fonction conversion transforme ton 66 en 1 , et à l'incrémentation suivante (au Next) i passe à 2 ...

    i s'incrémente alors à chaque tours de boucle de 1..à 66 puis une fois à 66 la fonction conversion le repasse à 1 .. et l'on "repart pour un tour"...



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

Discussions similaires

  1. probleme postgresql sous windows
    Par sunshine2004 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 29/03/2005, 04h21
  2. Problème réseau sous FedoraCore2
    Par PeGaZe dans le forum Réseau
    Réponses: 6
    Dernier message: 02/10/2004, 10h00
  3. Probleme dans une procedure stockée
    Par malbaladejo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/07/2004, 14h08
  4. [C#] [Oracle] Probleme avec une procedure stockée
    Par sronin1 dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/05/2004, 19h04
  5. probleme de sous requete
    Par JD_Lyon dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 09/04/2004, 22h18

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