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 :

Récupérer la valeur d'une variable et l'integrer dans un UserForm


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut Récupérer la valeur d'une variable et l'integrer dans un UserForm
    Bonjour,

    J'ai une fonction me permettant de récupérer la cellule vide de mon tableau :

    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 tableau
    Dim j As Long
    Dim LastRow As Long
    Dim BlockName As String
    'Recuperation de la derniere ligne selon la colonne D
        With Sheets("Coordinates")
            .Activate
            LastRow = .Cells(.Rows.Count, "D").End(xlUp).Row
            'boucle pour trouver une cellule vide dans D pour integrer le bloc
            For j = 5 To LastRow
                BlockName = .range("D" & j).Value
                If BlockName = vbNullString Then
                [???]
                End If
            Next j
        End With
    End Function
    J'utilise l'évènement click de mon UserForm pour déclencher l'action d'écriture dans ma cellule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub test2_Click()
        Dim i As Long 
        i = 'La valeur de j correspondant à ma ligne vide
        If ListD.ListIndex = 0 Then Application.Cells(i, 4) = ' Ma formule
    Je n'arrive pas à récupérer la valeur de la variable (j) qui est dans ma fonction pour l’intégrer dans le code de mon userForm

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ta variable est déclaré dans une Sub, donc tu ne peux y accéder que dans celle-ci.

    Il faut la déclarer en entête de module, pour que celle-ci soit accessible en lecture et écriture sur ton code.

    Philippe

  3. #3
    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,

    une fonction doit retourne quelque-chose...


    modifie sa déclaration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function tableau as range

    puis retourne un range par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    '(...)
     BlockName = .range("D" & j).Value
                If BlockName = vbNullString Then
              '[????]
                set tableau  =  .range("D" & j)
                End If
     
    '(...)
    et ensuite pour l'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ListD.ListIndex = 0 Then Application.Cells(i, 4) =tableau ' Ma formule

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut
    Merci pour vos réponses,

    Bbil j'aimerais seulement récupérer le N° de la ligne où insérer ma formule, pour ensuite l'affecter à "i" dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Cells(i, 4) = formule
    Est ce que c'est possible?

  5. #5
    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
    Ben tu modifie la fonction pour qu'elle retourne un entier ... et tu change la ligne retour valeur ...

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut
    Merci BBil,

    C'est au niveau de l'utilisation dans mon UserForm que je bloque, la valeur de i est toujours égale à 0...

  7. #7
    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
    ok ben tu modifie ta fonction tableau comme dit précédemment .. et ta ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     i = 'La valeur de j correspondant à ma ligne vide
    devient


  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut
    C'est ce que j'ai fait, avec ma fonction "tableau as long"

    mais j'ai une erreur d’exécution 1004 application defined or object defined error, avec une valeur de i =0

  9. #9
    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
    montre nous ton code modifié ... et pense lorsque tu signale une erreur à dire sur qu'elle ligne de code elle survient ...

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut
    Merci et désolé pour mon imprécision!

    La fonction du module :
    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 tableau() As Long
    Dim j As Long
    Dim LastRow As Long
    Dim BlockName As String
    'Recuperation de la derniere ligne selon la colonne D
        With Sheets("Coordinates")
            .Activate
            LastRow = .Cells(.Rows.Count, "D").End(xlUp).Row
            'boucle pour trouver une cellule vide dans D pour integrer le bloc
            For j = 5 To LastRow
                BlockName = .range("D" & j).Value
                If BlockName = vbNullString Then
                tableau = j
                End If
            Next j
        End With
    End Function
    La Sub de mon UserForm :
    Mon erreur est sur la ligne 5/6 car la valeur de i est 0

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub test2_Click()
        Dim i As Long  
        i = tableau
        If ListD.ListIndex = 0 Then Application.Cells(i, 4) = _
            "=LEFT(CELL(""filename""),FIND(""["",CELL(""filename""))-1)&""Arbre_PA_1.dwg"""
        If ListD.ListIndex = 1 Then Application.Cells(i, 4) = _
            "=LEFT(CELL(""filename""),FIND(""["",CELL(""filename""))-1)&""Arbre_PA_2.dwg"""
        If ListD.ListIndex = 2 Then Application.Cells(5, 4) = _
            "=LEFT(CELL(""filename""),FIND(""["",CELL(""filename""))-1)&""Arbre_PA_3.dwg"""
        If ListD.ListIndex = 3 Then Application.Cells(i, 4) = _
            "=LEFT(CELL(""filename""),FIND(""["",CELL(""filename""))-1)&""Arbre_PA_4.dwg"""
    End Sub

  11. #11
    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
    Ben c'est ta fonction qui ne renvoi rien ? ta condition BlockName = vbNullString ne doit jamais être vrai..

    si toutes tes lignes sont "pleine" entre ta ligne 5 et ta ligne lastRow (qui est en fait la dernière ligne dont D et non vide ...) ta fonction retourne 0 ..

    modifie ta boucle for pour renvoyer le numéro de ligne suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          For j = 5 To LastRow + 1

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 23
    Par défaut
    C'était bien ca, ca fonctionne!

    Dur dur la progra VBA quand on est nul

    Merci beaucoup Bbil !

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

Discussions similaires

  1. [PHP 5.4] récupérer la valeur d'une variable qui se trouve dans un fonction
    Par aspkiddy dans le forum Langage
    Réponses: 2
    Dernier message: 11/02/2014, 17h06
  2. Réponses: 2
    Dernier message: 02/04/2008, 19h55
  3. Réponses: 7
    Dernier message: 16/06/2006, 16h31
  4. Réponses: 1
    Dernier message: 21/11/2005, 12h07
  5. Récupérer la valeur d'une variable distante
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/09/2005, 16h10

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