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 :

Erreur compilaton avec l'instruction redim


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut Erreur compilaton avec l'instruction redim
    bonjour,

    J'ai implémenter le code suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub DonneesConformiteDDC()
    personnes = Array()
    ReDim personnes(1)
    End Sub()
    Mais quand je compile j'obtiens le message d'erreur suivant :

    Erreur compilation
    Redim incorrect

    Quelqu'un pourrait m'aider à identifier le problème?

    bien cordialement.

  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,

    ce n'est pas ainsi qu'on déclare une variable tableau
    étant donné que tu n'expliques pas ce que tu comptes faire, pas évident de te proposer la meilleur explication
    voici donc quelque chose de générique

    déclarer un tableau dynamiquement et le redimensionner derrière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MonTableau()
    Redim MonTableau(1)
    Attention, par défaut on est en base 0, donc Redim MonTableau(1) crée deux positions (0 et 1)
    pour travailler en base 1, il faut ajouter en haut du module

    ou alors bien préciser qu'on commence à 1 sur un tableau en particulier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MonTableau
    Redim MonTableau (1 To 1)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub DonneesConformiteDDC()
    dim personnes()
    ReDim Preserve personnes(1)  'un redim efface le tableau d'ou l'instruction preserv
    EndSub

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    Bonjour,

    je créer un XML
    Merci pour vos réponses, j'ai effectué les modifications et j'ai debuggé maintenant mon code il y a un problème qu eje ne vois pas quand il rentre dans ma première boucle : "For Each Enfant " ca passe à la deuxièle boucle il me dit qu'il y a un problème de compatibiloté de type sur cette ligne de commande : "nomElement.Text = enfant(0)"
    je me demande si c'est pa sun problème d'indexation dans le tableau le fait de commencer à 0 au lieu de 1? Vosu en pensez quoi?
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    Sub DonneesConformiteDDC()
    Dim personnes
    ReDim personnes(1)
     
     
    Dim georges
    ReDim georges(4)
     
    georges(0) = "Baud"
    georges(1) = "Georges"
    georges(2) = "Marié"
    georges(3) = 49
     
    Dim enfants
    ReDim enfants(1)
     
    Dim elisabeth
    ReDim elisabeth(1)
     
    elisabeth(0) = "Tiop"
    elisabeth(1) = "Elisabeth"
     
    enfants(0) = elisabeth
     
    georges(4) = enfants
     
    personnes(0) = georges
     
    Dim judith
    ReDim judith(4)
     
    judith(0) = "Trinzka"
    judith(1) = "Judith"
    judith(2) = "Célibataire"
    judith(3) = 22
    judith(4) = Array()
     
    personnes(1) = judith
     
    Set xmlDoc = CreateObject("Microsoft.XMLDOM")
     
    Set oCreation = xmlDoc.createProcessingInstruction("xml", "version='1.0' encoding='ISO-8859-1'")
    xmlDoc.InsertBefore oCreation, xmlDoc.ChildNodes.Item(0)
     
    Set Root = xmlDoc.createElement("personnes")
     
    xmlDoc.appendChild (Root)
     
    For Each personne In personnes
        Set personneElement = xmlDoc.createElement("personne")
     
        Set nomElement = xmlDoc.createElement("nom")
        nomElement.Text = personne(0)
        personneElement.appendChild (nomElement)
     
        Set prenomElement = xmlDoc.createElement("prenom")
        prenomElement.Text = personne(1)
        personneElement.appendChild (prenomElement)
     
        Set etatElement = xmlDoc.createElement("etat")
        etatElement.Text = personne(2)
        personneElement.appendChild (etatElement)
     
        personneElement.setAttribute "age", personne(3)
     
        If UBound(personne(4)) > -1 Then
            Set enfantsElement = xmlDoc.createElement("enfants")
     
            For Each enfant In personne(4)
                Set enfantElement = xmlDoc.createElement("enfant")
     
                Set nomElement = xmlDoc.createElement("nom")
                nomElement.Text = enfant(0)
                enfantElement.appendChild (nomElement)
     
                Set prenomElement = xmlDoc.createElement("prenom")
                prenomElement.Text = enfant(1)
                enfantElement.appendChild (prenomElement)
     
                enfantsElement.appendChild (enfantElement)
            Next
     
            personneElement.appendChild (enfantsElement)
        End If
    End Sub

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

    avant de plonger dans ton code, je vais rebondir sur ta supposition :

    je me demande si c'est pa sun problème d'indexation dans le tableau le fait de commencer à 0 au lieu de 1? Vosu en pensez quoi?
    comme je l'ai expliqué dans mon message, si tu places en haut du module

    alors l'index de tes tableaux commencera à 1 au lieu de 0

    Nous te laissons le soin de passer en Base 1 et de vérifier de ton côté pour commencer si c'est bien le problème

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut Erreur de compilation
    Comme indique le titre j'ai mis Option Base 1 au tout debut des declaration dans le module et j'obtiens un message d'erreur de compilation :

    "Instruction incorrecte dans une procédure"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    Sub DonneesConformiteDDC()
    
    Option Base 1
    
    Dim personnes
    ReDim personnes(1)
    
     
    Dim georges
    ReDim georges(4)

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    J'ai compris où étais l'erreur,

    En effet je déclarait un tableau de 3 enfant mais je n'itialisait que le premier enfant
    Il fallait que je definisse égalmeent enfant(1) et enfant(2).

    Merci encore.

    c'est un exerciec d'entrainement que j'ai trouvé sur internet.
    Il va me servait d'exemple pour ecrire un code qui créerait un fichier xml client avec encore plus de données de manières automatiques et il fallait que je comprennes comment marche l'algo.
    Les erreurs ca aident.
    mais du coup il y a plein d'erreurs dans le code trouvé sur internet : http://baptiste-wicht.developpez.com.../xpath/#L5.2.2

  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
    Les codes de ton lien ne sont pas du VBA mais du VBScript (VBS)

    bien que similaires, il n'en demeure pas moins qu'ils ont chacun leur particularité

    je n'ai pas été éplucher le code, mais si tu le lis "comme du VBA", il est normal que tu penses y voir, parfois, des erreurs

    voici un lien de vulgarisation au sujet de la "famille" VB : http://faq.vb.free.fr/index.php?question=122

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Bonsoir
    perso quand je fait tea tableaux avec sous tableau je fait des PSEUDO CLASSE avec des variables typées d'autant plus que comme ca on a déjà un peu la structure d'un xml(object/ children)

    voici une démonstration toute simple je te laisse examiner cela et attends ton retour
    a la fin je demande le prenom de l'enfant(1) de MR toto (regarde bien comment je le demande )
    il est donc plus facile d'avoir toute les donnée a partir de personne(x).propriété( propriété etant une de celle a l'interier du type de l'object
    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
    Private Type enf
        nom As String
        prenom As String
        age As Long
        sexe As String
    End Type
    Private Type pers
        nom As String
        prenom As String
        age As Long
        situationM As String
        enfant(10) As enf
    End Type
    Sub test()
        Dim personne(10) As pers, Mr
        With personne(1)
            .nom = "toto"
            .prenom = "titi"
            .age = 46
            .situationM = "marié"
            With .enfant(1)
                .nom = personne(1).nom    ' meme nom de le papa
                .prenom = "juliette"
                .age = 15
                .sexe = "feminin"
            End With
        End With
        With personne(2)
            .nom = "bidule"
            .prenom = "robert"
            .age = 35
            With .enfant(1)
                .nom = personne(2).nom
                .prenom = "antoine"
                .age = 10
                .sexe = "masculin "
            End With
        End With
        ' allez maintenant on teste
        'quel est le prenom du premier enfant de MR titi toto
        For i = 1 To UBound(personne)
            If personne(i).nom = "toto" Then Exit For
        Next
    ' maintenant avec la variable personne(i)  on ce que l'on veut sur le bonhomme
    MsgBox "le premier enfant de Mr " & personne(i).nom & " s'appelle " & personne(i).enfant(1).prenom
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re
    Bonsoir
    perso quand je fait tea tableaux avec sous tableau je fait des PSEUDO CLASSE avec des variables typées d'autant plus que comme ca on a déjà un peu la structure d'un xml(object/ children)

    voici une démonstration toute simple je te laisse examiner cela et attends ton retour
    a la fin je demande le prenom de l'enfant(1) de MR toto (regarde bien comment je le demande )
    il est donc plus facile d'avoir toute les donnée a partir de personne(x).propriété( propriété etant une de celle a l'interier du type de l'object
    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
    Private Type enf
        nom As String
        prenom As String
        age As Long
        sexe As String
    End Type
    Private Type pers
        nom As String
        prenom As String
        age As Long
        situationM As String
        enfant(10) As enf
    End Type
    Sub test()
        Dim personne(10) As pers, Mr
        With personne(1)
            .nom = "toto"
            .prenom = "titi"
            .age = 46
            .situationM = "marié"
            With .enfant(1)
                .nom = personne(1).nom    ' meme nom de le papa
                .prenom = "juliette"
                .age = 15
                .sexe = "feminin"
            End With
        End With
        With personne(2)
            .nom = "bidule"
            .prenom = "robert"
            .age = 35
            With .enfant(1)
                .nom = personne(2).nom
                .prenom = "antoine"
                .age = 10
                .sexe = "masculin "
            End With
        End With
        ' allez maintenant on teste
        'quel est le prenom du premier enfant de MR titi toto
        For i = 1 To UBound(personne)
            If personne(i).nom = "toto" Then Exit For
        Next
    ' maintenant avec la variable personne(i)  on ce que l'on veut sur le bonhomme
    MsgBox "le premier enfant de Mr " & personne(i).nom & " s'appelle " & personne(i).enfant(1).prenom
    End Sub

    Le but à la fin ce serait d'avoir un fichier de données XML qui sera exploiter pour faire de l'automatisation de test avec SOAP UI.
    Il faut vraiment que j'ai une structure XML de ce style là :

    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <personnes>
    	<personne age="50">
    		<nom>Baud</nom>
    		<prenom>Georges</prenom>
    		<etat>Marié</etat>
    		<enfants>
    			<enfant>
    				<nom>Tiop</nom>
    				<prenom>Elisabeth</prenom>
    			</enfant>
    		</enfants>
    	</personne>
    	<personne age="23">
    		<nom>Trinzka</nom>
    		<prenom>Judith</prenom>
    		<etat>Célibataire</etat>
    	</personne>
    	<personne age="89">
    		<nom>Godoh</nom>
    		<prenom>Madeleine</prenom>
    		<etat>Veuve</etat>
    		<enfants>
    		</enfants>
    	</personne>
    </personnes>
    ou chaque personne est une donnée. Le code utilisé ici était pour moi un exemple pour comprendre l'algo et l'appliqué sur des données beaucoup plus importantes.

  11. #11
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 44
    Par défaut
    Effectivement, pour moi ce serait plus quelque chose comme ca que remplirait le code VBA :
    Il yaurait des boucles i, j qui serait rempli automatiquement par le code VBA implicitement.
    Dans le fichier xml on aurait pa de i ni de j ils sont implicites mais on aurait des choses ordonnées en fait, je ne sais pas si vous comprenez où je veux en venir, je ne m'exprime pas très bien?

    ?xml version="1.0" encoding="ISO-8859-1"?>
    <personnes>
    <personne(i) age="50">
    <nom(i)>Baud</nom>
    <prenom(i)>Georges</prenom>
    <etat(i)>Marié</etat>
    <enfants(i)>
    <enfant(i,j)>
    <nom>Tiop</nom>
    <prenom>Elisabeth</prenom>
    </enfant(i,j)>
    <enfant(i,j+1)>
    <nom>Tiop</nom>
    <prenom>Elisabeth</prenom>
    </enfant(i,j+1)>
    </enfants(i)>
    </personne(i)>
    <personne(i+1) age="50">

    <nom(i+1)>Baud</nom>
    <prenom(i+1)>Georges</prenom>
    <etat(i+1)>Marié</etat>
    <enfants(i+1)>
    <enfant(i+1,j)>
    <nom>Tiop</nom>
    <prenom>Elisabeth</prenom>
    </enfant(i+1,j)>
    </enfants(i+1)>
    </personne(i+1)>
    </personnes>

  12. #12
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    re
    bonsoir
    même si tu t'exprime pas bien tes démos xml parles d'elles même

    tout d'abords
    comment obtiens tu les données personnes et celle des sub déjà il faudrait savoir ca

    ensuite si tu comprends ma demo il est facile de boucler sur toutes les personne et écrire le xml soit par string en dur direct soir par adob et ces nodes
    je vois pas ou est la complexité la dedans

    je t'ai proposé cette méthode de pseudo classe pour simplifier ta version avec les noms en dur qui est tout bonnement inconcevable et inutile en cas de longue liste

    donc question
    comment obtiens tu tes données
    1. sur un sheets
    2. sur un document X le quel et quel format
    3. faut il une application pour extraire ces données


    dans le cas positif pour la 3 eme question je ne peux rien pour toi ni personne d'ailleurs car je n'ai certainement pas ton APP ni le fichier qui va avec
    j'attends ton retour
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. DELPHI XE - Erreur ADOQuery avec instruction order by
    Par vitch8 dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/01/2016, 11h37
  2. erreur avec l' instruction include
    Par saida29 dans le forum Fortran
    Réponses: 5
    Dernier message: 06/02/2015, 14h26
  3. Levée d'erreur avec l'instruction OPENRECORDSET
    Par formidable78 dans le forum VBA Access
    Réponses: 7
    Dernier message: 06/10/2008, 20h24
  4. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  5. Erreurs IIS avec Multiples Frames avec xmlrad
    Par powerlog dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/07/2003, 13h15

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