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 avec la fonction Split et un tableau [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut Problème avec la fonction Split et un tableau
    Bonjour à tous,

    Tout d'abord, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim x, y As Integer
    Dim CI As String
    For x = 8 To 9 Step 1
        For y = 4 To 8 Step 1
            If Cells(x, y).Value <> "" Then
                Tableau = Split(Pointage.Cells(x, y), "-")
                CI = Tableau(2)
                Cells(x, y).Value = CI
            End If
        Next
    Next
    En gros, je parcours les cellules d'un tableau et dès que l'une d'elles n'est pas vide, je fais un split afin de récupérer une partie de son contenu, le stocke dans la variable CI, et remplace l'ancien contenu de la cellule par la variable. Mais j'ai une erreur "L'indice n'appartient pas à la sélection" au niveau de la ligne CI = Tableau(2).

    Pouvez-vous me dire ce qui ne va pas svp ?
    Merci beaucoup.

  2. #2
    Membre actif
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 269
    Points
    269
    Par défaut
    Bonjour,

    Comment as-tu défini ton tableau ?

    car la je ne vois aucune déclaration

    essaye de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim tableau(LaLongueurSouhaitePourLeTableau)

  3. #3
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    L'indice de la première partiie est 0. Tableau(2) est donc la troisième partie. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tableau = Split("aaa-bbb-ccc", "-")
    Tableau(2) correspondra à ccc. S'il n'y a pas deux tirets dans la chaine, tu auras cette erreur.

    Pour récupérer la dernière partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Tableau(UBound(Tableau))

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut [XL-2007] Problème avec la fonction Split et un tableau
    Rebonjour,

    J'avais déjà esssayé d'écrire : Mais j'ai l'erreur suivante : "Impossible d'affecter à un tableau" au niveau de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tableau = Split(Pointage.Cells(x, y), "-")
    Ma cellule contient au départ ce genre de texte : "20005 - COGOLIN - 713501.EV - routage". Et je veux récupérer "713501.EV" donc Tableau(2).
    Donc je ne vois toujours pas...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Il peut être intéressant de s’assurer de la conformité des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub TestSplit()
    Const txt = "aaa-bbb-ccc"
    CI = ""
    If InStr(1, txt, "-") <> 0 Then
        Tableau = Split(txt & "--", "-")
            If Trim("" & Tableau(2)) <> "" Then CI = Tableau(2)
    End If
    End Sub
    en plus CI est un string et Tableau(2) non:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CI = Trim("" & Tableau(2))

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut [XL-2007] Problème avec la fonction Split et un tableau
    J'ai essayé ce test mais ça ne fonctionne toujours pas... N'avez-vous pas une autre idée à me soumettre ?

  7. #7
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    Quelle est la valeur de la cellule "Pointage.Cells(x, y)" qui fait planter l'instruction ?

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Si tu es sûr de tes données, tu peux écrire directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Split(Pointage.Cells(x, y), " - ")(2)
    Si tu es à court d'idées, mets un classeur exemple - sans données confidentielles - en PJ.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut [XL-2007] Problème avec la fonction Split et un tableau
    J'ai légèrement changé mon code qui ressemble maintenant à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim x, y As Integer
    Dim Tabl() As String
    For x = 8 To 9 Step 1
        For y = 4 To 8 Step 1
            If Pointage.Cells(x, y).Value <> "" Or Pointage.Cells(x, y).Value <> "Férié" Or Pointage.Cells(x, y).Value <> "Congé" Then
                Tabl = Split(Pointage.Cells(x, y).Value, "/")
                Pointage.Cells(x, y).Value = Tabl(2)
            End If
        Next
    Next
    Ce qui plante c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pointage.Cells(x, y).Value = Tabl(2)
    L'erreur est la suivante : "L'indice n'appartient pas à la sélection".
    J'y comprends rien... C'est le "Tabl(2)" qui foire mais je sais pas pourquoi...

  10. #10
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Citation Envoyé par Daniel.C Voir le message
    Si tu es à court d'idées, mets un classeur exemple - sans données confidentielles - en PJ.
    +1000

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut [XL-2007] Problème avec la fonction Split et un tableau
    Voici mon fichier en pièce jointe.
    Le code est dans le module 1, méthode "Public Sub BT_OK_2_Clic()". C'est sans doute pas optimisé mais faites y pas attention...
    J'attends vos remarques pour m'aider.
    Merci d'avance.
    Fichiers attachés Fichiers attachés

  12. #12
    Invité
    Invité(e)
    Par défaut
    bonjour,
    je n'ai pas tous regardé, mais j'ais trouvé une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If  Pointage.Cells(x, y).Value <> "" Or Pointage.Cells(x, y).Value <> "Férié" Or Pointage.Cells(x, y).Value <> "Congé" Then
    "" c'est bien différent "Congé" ["" or Pointage.Cells(x, y).Value <> "Congé" ]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Trim("" & Pointage.Cells(x, y).Value) <> "" and  Pointage.Cells(x, y).Value <> "Férié" andPointage.Cells(x, y).Value <> "Congé" Then
    petite astuce:
    Et (AND)-> 0 X 1= 0
    OU (OR)-> 0 + 1= 1
    si tu enchaine des OR il suffit qu'une condition soit vrai pour que toute la formule soit vrai:
    "" + "Férié" + "Congé" = vrai
    "" X "Férié" X "Congé" = faux
    Dernière modification par AlainTech ; 02/05/2013 à 04h22. Motif: Fusion de 2 messages

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Points : 1 394
    Points
    1 394
    Par défaut
    Citation Envoyé par flo1411 Voir le message
    Rebonjour,

    J'avais déjà esssayé d'écrire : Mais j'ai l'erreur suivante : "Impossible d'affecter à un tableau" au niveau de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tableau = Split(Pointage.Cells(x, y), "-")
    Ma cellule contient au départ ce genre de texte : "20005 - COGOLIN - 713501.EV - routage". Et je veux récupérer "713501.EV" donc Tableau(2).
    Donc je ne vois toujours pas...
    Au sujet de cette erreur regardez ceci:
    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
    Sub test()
    ' test de split avec un tableau de type variant
    Dim tableau()
    Debug.Print VBA.Information.TypeName(tableau)
     
    On Error Resume Next
    tableau = Split("test-de-tableau", "-")
    Select Case Err.Number
        Case 0
            Debug.Print "La procédure s'est déroulé normalement et tableau(2) vaut " & tableau(2)
        Case Else
            Debug.Print "Erreur d'affectation du résultat de split (tableau de texte)"
    End Select
    On Error GoTo 0
     
     
    'test d'affectation avec un tableau de type texte
    Dim tableau2() As String
    Debug.Print VBA.Information.TypeName(tableau2)
    On Error Resume Next
    tableau2 = Split("test-de-tableau", "-")
    Select Case Err.Number
        Case 0
            Debug.Print "La procédure s'est déroulé normalement et tableau(2) vaut " & tableau2(2)
        Case Else
            Debug.Print "Erreur d'affectation du résultat de split (tableau de texte)"
    End Select
    On Error GoTo 0
     
    End Sub

    il aurait donc fallu déclarer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim tableau() as string

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonsoir Benjîle,
    J'ai extrait ça de son code le problème ne vient pas du split!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For x = 8 To 9 Step 1
            For y = 4 To 8 Step 1
                If  Pointage.Cells(x, y).Value) <> "" Or Pintage.Cells(x, y).Value <> "Férié" Or Pointage.Cells(x, y).Value <> "Congé" Then
                    Tabl = Split(Pointage.Cells(x, y).Value, "/")
                    Pointage.Cells(x, y).Value = Tabl(2)
                End If      
      Next
        Next

  15. #15
    Membre expérimenté
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Points : 1 394
    Points
    1 394
    Par défaut
    j'ai vu j'ai vu mais il a eu un problème sur split, et c'est un problème que j'ai mis un bout de temps à comprendre, donc je voulais partager

    désolé pour le hors sujet

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu
    Bonjour

    tu pourrais tester le nombre de ligne dans ton tablo splité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ubound(split(quelquechose,"-"))> X then
    Au plaisir

  17. #17
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2013
    Messages : 54
    Points : 34
    Points
    34
    Par défaut [XL-2007] Problème avec la fonction Split et un tableau
    Merci Apparemment ça venait des OR que j'ai remplacé par des AND. Merci pour votre aide !

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

Discussions similaires

  1. problème avec la fonction split(":")
    Par polo42 dans le forum Général Python
    Réponses: 2
    Dernier message: 15/08/2007, 16h13
  2. [VB6]Problème avec la Fonction Split
    Par Goupo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/06/2007, 19h23
  3. [Tableaux] problème avec la fonction split()
    Par Marcus15 dans le forum Langage
    Réponses: 3
    Dernier message: 26/02/2007, 11h17
  4. Réponses: 11
    Dernier message: 14/10/2006, 21h26
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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