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 :

Modification d'une range = arrêt de la fonction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Par défaut Modification d'une range = arrêt de la fonction
    Bonjour,

    J'essaie d'afficher un tableau de String sous forme de vecteur colonne dans Excel.
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub tableau(ByRef s() As String)
    ' Ecrit en tableau (vecteur colonne) le vecteur passé en paramètre
        Dim i As Long, row As Long
        Dim col As String
        col = ColumnLetter(ActiveCell.Column)
        row = ActiveCell.row
        For i = 1 To UBound(s)
            Range(col & (row + i)).Value = s(i)
        Next i
    End Sub
    Malheureusement, le code plante à la 1ère itération de la boucle. J'ai pourtant vérifié au débuggage que le paramètre col & (row+i) donnait bien quelque chose sous la forme "A3", et que s(i) était bien reconnu comme un String, mais la fonction s'arrête tout simplement à cette ligne, sans même créer une erreur...

    Si quelqu'un a une idée...
    Merci !

  2. #2
    Expert éminent 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
    Par défaut
    2 propositions pour faire ce que tu veux (malgré certaines réticences personnelles)
    1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub tableau1(ByRef s() As String)
    Dim i As Long
     
    For i = Lbound(s) To UBound(s)
        ActiveCell.Offset(i, 0) = s(i)
    Next i
    End Sub
    2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub tableau2(ByRef s() As String)
     
    Range(ActiveCell.Offset(Lbound(s), 0), ActiveCell.Offset(UBound(s), 0)) = Application.Transpose(s)
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Par défaut
    Merci pour ta réponse, mais aucune des 2 ne fonctionne... C'est la même chose qu'avec ma fonction, dès qu'une ligne de code essaie de modifier le contenu d'une cellule, l'exécution s'arrête...
    Please help !

  4. #4
    Expert éminent 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
    Par défaut
    Comment tu fais l'appelle de cette procédure (et non fonction). On a besoin de plus de détails

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2008
    Messages : 25
    Par défaut
    Voici la fonction qui appelle tableau() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function AffichePopIni(p_0 As Double, N As Long) As String
        Dim s As String
        s = ColumnLetter(ActiveCell.Column)
        Range(s & ActiveCell.row + 1).Select
        Dim P() As String
        ReDim P(1 To N)
        P = CreationPop(p_0, N)
        Call tableau(P)
        AffichePopIni = "Population"
    End Function
    Et voici la fonction qui crée mon tableau de String P :
    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
    Function CreationPop(p_0 As Double, N As Long) As String()
    ' Initialise une population de taille N avec une proportion initiale p_0 de malades
        Dim i As Long, P As Long, u As Double
        Dim P0() As String
        ReDim P0(1 To N)
     
        For i = 1 To N
            P0(i) = "S"
        Next i
     
        If p_0 = 0 Then GoTo fin
        P = PartieEntSup(p_0 * N)
     
        For i = 1 To P
            u = Rnd
            If P0(Int(u * N) + 1) = "S" Then
                Call infecter(P0(Int(u * N) + 1))
            Else
                i = i - 1
            End If
        Next i
        CreationPop = P0
     
    fin:
    End Function
    Merci pour ton aide !

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 122
    Par défaut
    Salut
    Et si tu expliquais clairement ce que tu souhaites faire, parce que j'ai beau relire ton code, tu utilises des fonctions dans tous les sens, tu sélectionne des range avec des méthodes plutôt alambiqués
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        s = ColumnLetter(ActiveCell.Column)
        Range(s & ActiveCell.Row + 1).Select
    Autant faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(1).Select
    Tu ne peux pas retourner un tableau de string, il faudrait soit retourner un tableau contenu dans un variant, soit passer ton tableau de string en paramètre et le modifier dans ta fonction.
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/04/2008, 10h02
  2. Modification d'une fonction pour selectionner une plage de cellule
    Par jackbauer972 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/08/2007, 15h07
  3. Réponses: 13
    Dernier message: 11/12/2006, 14h44
  4. Modification d'une fonction "ShellExit"
    Par The Lord of Nesquik dans le forum C++
    Réponses: 11
    Dernier message: 12/06/2006, 02h57
  5. Aide sur modification d' une fonction.
    Par superadnan3 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2006, 17h29

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