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 :

problème de code?


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 66
    Points
    66
    Par défaut problème de code?
    bonjour à tous,

    J'ai une cellule comprenant 3 chaines de caractères séparées par un saut de ligne.
    dans ma cellule [A1], j'ai donc :
    adresse1
    adresse2
    adresse3

    Et je souhaiterai repérer les saut de ligne dans cette cellule pour couper coller sur les colonnes de droite : adresse1 en [B1] puis adresse2 en [C1] et adresse3 en [D1].

    NB : je souhaite faire cette opé depuis ma ligne A1 jusqu’à A200.

    J'ai commencé ce code mais j'ai une erreur « d'exécution 9 : l'indice n’appartient pas à la sélection. »

    Visiblement il y a un problème avec mes tableaux ou je ne sais quoi…
    Qu’est e qui cloche dans mon code ?

    Merci

    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
     
    Sub test()
     
    Dim a As Variant
    Dim i As Integer
     
    For i = 0 To 200
     
    a = Split(Range("A1").Offset(i, 0).Value, Chr(10))
    Range("B1").Offset(0, i).Value = a(0)
    Range("C1").Offset(0, i).Value = a(1)
    Range("D1").Offset(0, i).Value = a(2)
     
    Next i
     
    End Sub

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("B1").Offset(0, i).Value = a(0)
    Range("C1").Offset(0, i).Value = a(1)
    Range("D1").Offset(0, i).Value = a(2)
    cette partie me laisse perplexe car
    Range("B1").Offset(0, i).Value est la cellule C1, puis D1 idem pour le reste
    mais je n'ai pas vérifié au dela de ça, il ne vaudrais pas mieux ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("B1").Value = a(0)
    Range("C1").Value = a(1)
    Range("D1").Value = a(2)
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    La commade split dimmensionne ton tableau si tu n'a aucun CHR(10) alors ton tableau est définni en (0 to 0), il n'y a donc qu'un seul indice.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Aalex_38 :
    La commande split dimensionne ton tableau; si tu n'as aucun CHR(10) alors ton tableau est défini en (0 to 0), il n'y a donc qu'un seul indice.
    Or, Dado91400 a écrit :

    J'ai une cellule comprenant 3 chaines de caractères séparées par un saut de ligne.
    dans ma cellule [A1], j'ai donc :
    adresse1
    adresse2
    adresse3
    Dado91400 essayez :

    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
    Sub test()
     
    Dim a As Variant
    Dim i As Integer
     
    For i = 1 To 200
     
    a = Split(Range("A" & i).Value, Chr(10))
    Range("B" & i).Value = a(0)
    Range("C" & i).Value = a(1)
    Range("D" & i).Value = a(2)
     
    Next i
     
    End Sub
    Dernière modification par AlainTech ; 05/04/2009 à 14h52. Motif: Balises [quote], pas code

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut
    Attention avec offset, on inverse row et column

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("D1").Offset(0, i).Value = a(2)
    devient donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("D1").Offset(i, 0).Value = a(2)
    Pour le reste je n'est pas le temps désolé

    Bon WeekEnd a tous
    A++
    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

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Une proposition si j'ai bien compris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For i = 1 To 200
        a = Split(Cells(i, 1), Chr(10))
        For j = LBound(a) To UBound(a)
            Cells(i, 2 + j) = a(j)
        Next j
    Next i

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 66
    Points
    66
    Par défaut
    merci à tous pour vos pistes mais malheuresmeet j'ai toujours le mêm message d'erreur...
    erreur d'exécution '9' : l'indice n'appartient pas à la sélection.

    Il y a une subtilité qui m'échape...

    dois-je effacer le contenu de mes tableaux avant chaques boucles ou un truc du genre ?

    la premiere ligne fonciotnne mais lma boucle ne va pas plus loin.

    Si vous avez des pistes je suis preneur.

    MERCI d'avance.
    A+

  8. #8
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    As tu testé ma proposition ?

    On ne parcours que les données renseignées tu tableau, j'ai testé et ça semble fonctionner.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 66
    Points
    66
    Par défaut
    ouai merci aalex 38!!

    c'est cool ça marhe nikel!

    j'avais envoyé mon message en même temps que le tiens apparement.

    Merci c'est sympas.
    bonne journée, et merci encore à tous!

  10. #10
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    A ta demande un commentaire sur le code :

    Au lieu d'utiliser range, j'ai utilisé Cells ou on peut facilement indiquer le numéro de ligne et le numéro de colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = Split(Cells(i, 1), Chr(10))
    Ici tu renseigne un tableau qui peut avoir plusieurs dimensions, regarde les valeurs de a en ajoutant un espion dans le deboggueur.
    Tu verra que le type de ta variable sera de type STRING(0 TO x)
    x est le plus gros indice du tableau, il va donc varier seulon le nombre de caractères de retour dans ta cellule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     For j = LBound(a) To UBound(a)
    Ici on boucle sur le tableau a en partant du plus petit indice (0) jusqu'au plus grand (qui varie selon la cellule).

    A gauche : La cellule de la ligne i et la colonne 2 + l'indice du tableau, donc colonne 2 pour le premier poste, 3 pour le deuxième ...
    A droite le poste du tableau

    Le premier poste renseigne donc la colonne 2, ...

    Un peu long l'explication mais j'espère qu'elle est suffisamment claire.

    Dans ton test j'ai modifié

    par


  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 63
    Points : 66
    Points
    66
    Par défaut
    super merci.

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

Discussions similaires

  1. problème de code avec un tableau
    Par richard038 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/05/2006, 17h35
  2. problème de code javascript pour une vue 360°
    Par tomguiss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/03/2006, 22h50
  3. [POO] Problème de code PHP avec Internet Explorer
    Par bzoler dans le forum Langage
    Réponses: 5
    Dernier message: 12/02/2006, 11h00
  4. Problème de code besoin d un petit depannage
    Par rakengoule dans le forum MFC
    Réponses: 3
    Dernier message: 10/10/2005, 16h25
  5. Probléme de code non portable
    Par Stany dans le forum Windows
    Réponses: 2
    Dernier message: 23/08/2005, 11h02

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