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 :

[VBA-E] Problème de tableau dans macro VBA


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 5
    Points
    5
    Par défaut [VBA-E] Problème de tableau dans macro VBA
    Bonjour,

    j'ai fait un petit code qui permet de repartir des valeurs sur plusieurs colonnes suivant le poids d'autres colonnes.

    Mon problème est que je n'arrive pas à récupérer une selection non contigue de cellules dans excel.

    TableauS = Range(Source).Value

    Ou Source = (par exemple) : "Feuil1!$K$29;Feuil1!$K$31"

    Ensuite dans TableauS je n'obtient pas les valeurs des deux cellules séléctionnés alors que lorsque je selectionne deux ou plus de cellules contigues je n'ai pas de problème.

    Avez vous une idée pour résoudre mon problème???

    Merci.

  2. #2
    Expert confirmé
    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
    Points : 4 085
    Points
    4 085
    Par défaut
    Ceci t'irait peut-être mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub toto()
        Dim tblData() As Integer
        Dim cellule As Range, i As Integer
        i = 0
        For Each cellule In Feuil1.Range("A2:A10")
            ReDim Preserve tblData(i)
            tblData(i) = cellule.Value
            i = i + 1
        Next
        MsgBox tblData(3)
    End Sub

  3. #3
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    et tu ve récupérer quoi avec ce code ? la valeur de la 1° cellule ..?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableauS = Range("Feuil1!$K$29,Feuil1!$K$31").Value

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2005
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 617
    Points : 733
    Points
    733
    Par défaut
    Question au passage... On peut assigner un Tableau directement à un Range?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Tab1 = Feuil1.Columns(3)
    'un peu inutile mais ca l'est plus :
    Tab2 = Feuil1.Range("A3:A100")
    N'oubliez pas de mettre le

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    En fait j'ai créé une petite fenêtre avec laquelle je récupère via un refEdit des cellules séléctionnés. Lorsque ces cellules sont contigues j'ai bien un tableau qui est créé avec la ligne de code:

    TableauS = Range(Source).Value

    Source est le nom de mon refEdit.

    En revanche lorsque la selection dans mon refedit ne presente pas des cellules contigues, mon tableauS ne se remplie pas comme je le voudrais avec toutes les valeurs des cellules selectionnés.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    En fait le code fourni par zaza... m'irait presque si au lieu de "A2:A10" on pouvait utiliser "A2;A10;B8" par exemple. Si je reprend le code de zaza... il fonctionne bien mais tout comme le mien il faut des cellules qui sont toutes les unes apres les autres...

    Merci pour votre aide en tous cas, c'est très sympa.

  7. #7
    Expert éminent sénior


    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
    Points : 20 038
    Points
    20 038
    Par défaut
    à priori un probléme de ; et , ..... bon j'ai pas trouvé de solution plus élégante que le replace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Dim r As Range
     If RefEdit1 <> "" Then
       Set TableauS = Range(Replace(RefEdit1.Value, ";", ","))
       For Each r In TableauS
        MsgBox r.Address & " : " & r.Value
       Next
     End If

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup, j'avais testé avec le replace mais je n'avais pas mis de "set"...


    Merci encore.

    Si j'ai encore un problème je reviens vous voir.

    Ciao Ciao.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Bonjour, je suis toujours sur le même code qui marche bien sauf lorsque l'utilisateur selectionne une seule case avec le refedit, la j'ai une erreur de type incompatible.

    Une idée?

    Voici mon code: (ca plante sur le message box)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim tableauS As Variant
     
     If Source <> "" Then
     
       Set T = Range(Replace(Source.Value, ";", ","))
     
     End If
     
    tableauS = T
     
    MsgBox ("coucou" & UBound(T, 2))

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 5
    Points
    5

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

Discussions similaires

  1. [VBA-E]problème d'indice pour macro dans perso.xls
    Par fred38 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/05/2007, 23h33
  2. [VBA-E]Problème d'éxécution de macros à l'ouverture d'éxcel
    Par mulot03 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 26/04/2006, 18h02
  3. [VBA-E]problème de date dans une requete
    Par isa21493 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 24/02/2006, 11h45
  4. [VBA-E]problème de requete dans microsoft query
    Par isa21493 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/02/2006, 14h39
  5. [VBA][WORD]Identifier un tableau dans un document
    Par mister3957 dans le forum VBA Word
    Réponses: 15
    Dernier message: 10/01/2006, 13h56

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