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 :

Tableau attendu VBA [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 14
    Par défaut Tableau attendu VBA
    Bonjour à tous ! j'ai un problème sur mon code. Je passe par un tableau pour retranscrire les données (selon la méthode de monsieur boisgontier alain). Mais je n'arrive pas à faire fonctionner.
    Je passe par beaucoup de moyens détournés afin que même si les données bougent, cela fonctionne toujours mais je n'arrive pas à voir où est mon erreur ? VBA me dit tableau attendu
    Une âme charitable s'il vous plaît ?

    Merciiii


    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
     
    Sub quinemarchepas()
     
      Application.ScreenUpdating = False
     
    Dim principal As ThisWorkbook
    Dim repertoire As String, fichier As String
    Dim myrg As Range
    Dim delai_pos As Long, delai_h As Long, lastrow As Long, lastcolumn As Long
      'empêche l'actualisation de l'écran
      Application.ScreenUpdating = False
      'définit le fichier actif comme fichier principal
      Set principal = ThisWorkbook
      repertoire = "L:\Stat_Activite\TDB xxx\" & annéetdb & moistdb & "\MO"
     
      ChDrive "L"
      ChDir repertoire
      fichier = Dir(repertoire & "\" & "xxx.xls")
      Workbooks.Open fichier
     
    'définir le dictionnaire pour insérer les données
    Set mydico = CreateObject("Scripting.dictionary")
     
    'chercher la cellule statut
    Cells.Find(What:="xxx", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
      xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
      , SearchFormat:=False).Activate
     
    'definir la position de statut
    delai_pos = ActiveCell.Column
    delai_h = ActiveCell.Row
     
    Cells.Find(What:="xxx", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
      xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
      , SearchFormat:=False).Activate
     
    'definir la position de statut
    xxx = ActiveCell.Column
     
    lastrow = Cells(delai_h, delai_pos).End(xlDown).Row
    lastcolumn = Cells(delai_h, delai_pos).End(xlToRight).Column
    Set myrg = Range(Cells(delai_h, delai_pos), Cells(lastrow, lastcolumn))
     
      For i = LBound(myrg) To UBound(myrg)
     
      mydico.Item(myrg(i, 1)) = Array(myrg(i, 1), myrg(i, 2), myrg(i, 3))
     
      Next i
     
      Application.ScreenUpdating = True
     
    ActiveWorkbook.Close False
     
    Workbooks("Tableau de correspondances.xlsm").Activate
     
    Sheets("alim").Activate
     
    b = Application.trnasplose(Application.Transpose(mydico.items))
    [F2].Resize(UBound(mydico), UBound(b, 2)) = b
     
     
      Application.ScreenUpdating = True
     
     
    End Sub

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    à quel endroit dans ce "bazar" qui ne marche pas (ne le prend pas mal, c'est pas l'idée !) il te demande un tableau

    au passage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    b = Application.trnasplose(Application.Transpose(mydico.items))
    relis bien ce que tu as écris, je ne sais pas ce que fais VBA quand tu veux trnasplose un tableau ? Il l'éclate ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 14
    Par défaut
    ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = LBound(myrg) To UBound(myrg)
    Merci, je n'ai pas fais attention en tapant mon code

    En fait, l'idée est de créer un tableau via myrg (qui n'est pas défini car il dépendra de plusieurs paramètres)
    le myrg, je le déclare comme tableau.
    Puis j'utilise un dictionnaire pour encapsuler le tableau dans le dictionnaire

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    là ton myrg est un Range, une variable objet qui représente la plage physique des cellules

    si tu veux que ça soit un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim myrg
    myrg = Range(Cells(delai_h, delai_pos), Cells(lastrow, lastcolumn)).Value
    Attention du coup, c'est un tableau en 2 dimensions (lignes / colonnes)
    donc cette ligne va encore planter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = LBound(myrg) To UBound(myrg)
    tu dois spécifier la dimension, si tu boucles sur les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = LBound(myrg,1) To UBound(myrg,1)
    et ne jamais oublier de spécifier la dimension dans la suite de la procédure (que je n'ai pas décortiqué)

    Ps : sans m'attarder sur la procédure en elle-même pour le moment, tu travailles sur des objects actifs là (par exemple tes ranges et cells ne sont pas rattachés à la feuille hôte) ... c'est TRES dangereux de travailler comme ça

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 14
    Par défaut
    maintenant j'ai incompatibilité de type sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = LBound(myrg) To UBound(myrg)
    C'est à dire
    tu travailles sur des objects actifs là (par exemple tes ranges et cells ne sont pas rattachés à la feuille hôte) ... c'est TRES dangereux de travailler comme ça
    ???

    Merci de ton aide !

    EDIT :

    J'ai vu ton message après avoir posté, cela me met toujours incompatibilité de type sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = LBound(myrg, 1) To UBound(myrg, 1)

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    montre tes déclarations de variables
    et la ligne où tu alimentes myrg avec ta plage de cellules

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 14
    Par défaut
    La ligne du classeur ?
    Excuse moi, je n'ai pas compris ta demande. Je suis loin d'être un pro en la matière
    Le myrg est alimenté par les coordonnées des colonnes et des lignes :

    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
                            'chercher la cellule statut
                            Cells.Find(What:="xxx", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
                                   xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
                                   , SearchFormat:=False).Activate
                                   
                            'definir la position
                            delai_pos = ActiveCell.Column
                            delai_h = ActiveCell.Row
    
    
    
                            lastrow = Cells(delai_h, delai_pos).End(xlDown).Row
                            lastcolumn = Cells(delai_h, delai_pos).End(xlToRight).Column
    
    Set myrg = Range(Cells(delai_h, delai_pos), Cells(lastrow, lastcolumn))
    cela donne en gros dans ce cas :

    range(cells(1,5), cells(16,5)

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim myrg
    myrg = Range(Cells(delai_h, delai_pos), Cells(lastrow, lastcolumn)).Value

    Tu as respecté la première ligne
    Mais pas la seconde :

    - tu continues d'utiliser myrg comme une variable objet (utilisation de Set pour l'instancier)
    - tu y injectes la plage de données (oublie du .Value à la fin) au lieu des données de la plage (c'est subtil à la lecture, mais lourd de conséquence en VBA)

    Etant donné que la variable myrg n'est pas typée (= c'est VBA qui décidera du type de variable quand tu l'utiliseras), hey bien il la prend comme un Range et non pas comme un Tableau

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

Discussions similaires

  1. Ecrire après un tableau en vba
    Par asphalte01 dans le forum VBA Word
    Réponses: 4
    Dernier message: 04/03/2009, 12h46
  2. Gestion de tableau en VBA
    Par lilian65 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/02/2009, 17h37
  3. traiter un tableau en vba
    Par jrege75 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/01/2009, 21h48
  4. tableau en VBA
    Par Daranc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/09/2008, 10h22
  5. [VBA-E] Comment créer un tableau sous vba excel
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/01/2007, 09h52

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