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 :

BUG fonction split [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
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Par défaut BUG fonction split
    Bonjour à tous je bloque sur une erreur due à la fonction split.

    L'objectif de mon code est de supprimer des lignes identiques sur 6 des 20 colonnes après avoir concaténer certaines données.

    Voici l'ensemble de mon code :

    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
     
    Dim I, J, K, L, M, N, O As Integer
    Dim x, y As Integer
    Dim Tableau1(), Tableau2() As String
    Dim z, v, w As String
    z = " / "
    For I = 7 To Sheets.Count 'Boucle sur feuille
       For J = 2 To Sheets(I).Range("A65000").End(xlUp).Row
           If Sheets(I).Cells(J, 2) = "" Then 'S'il s'agit d'une cellule fusionnée
               x = J + 1
           Else
               y = J
               If x <> y Then
                    For K = x To y
                        If Sheets(I).Cells(K, 1) = Sheets(I).Cells(K + 1, 1) _
                        And Sheets(I).Cells(K, 2) = Sheets(I).Cells(K + 1, 2) _
                        And Sheets(I).Cells(K, 3) = Sheets(I).Cells(K + 1, 3) _
                        And Sheets(I).Cells(K, 4) = Sheets(I).Cells(K + 1, 4) _
                        And Sheets(I).Cells(K, 5) = Sheets(I).Cells(K + 1, 5) _
                        And Sheets(I).Cells(K, 6) = Sheets(I).Cells(K + 1, 6) _
                        And Sheets(I).Cells(K, 7) = Sheets(I).Cells(K + 1, 7) _
                        And Sheets(I).Cells(K, 9) = Sheets(I).Cells(K + 1, 9) _
                        And Sheets(I).Cells(K, 10) = Sheets(I).Cells(K + 1, 10) _
                        And Sheets(I).Cells(K, 16) = Sheets(I).Cells(K + 1, 16) Then
                        x = 0
                        If InStr(Sheets(I).Cells(K, 13), z) <> 0 Then 'Localisation
                            v = Sheets(I).Cells(K, 13)
                            w = Sheets(I).Cells(K + 1, 13)
                            Tableau1 = Split(v, z)
                            'Boucle sur le tableau pour tester le résultat
                            For L = 0 To UBound(Tableau1)
                                If Tableau1(L) = w Then x = 1
                                Sheets(I).Cells(K, 13) = Sheets(I).Cells(K, 13) & z & Sheets(I).Cells(K + 1, 13)
                            Next L
                            If x = 0 Then Sheets(I).Cells(K, 13) = Sheets(I).Cells(K, 13) & z & Sheets(I).Cells(K + 1, 13)
                        Else
                            If Sheets(I).Cells(K, 13) <> Sheets(I).Cells(K + 1, 13) Then
                                Sheets(I).Cells(K, 13) = Sheets(I).Cells(K, 13) & z & Sheets(I).Cells(K + 1, 13)
                            End If
                        End If
                        Rows(K + 1 & ":" & K + 1).Delete Shift:=xlUp
                        K = K - 1
                        End If
                    Next K
                    End If
                End If
            Next J
    Next I
    Et voici la partie que je n'arrive pas à résoudre. J'ai une erreur 13 "incompatibilité de type" sur la ligne "Tableau1 = Split(v, z)"
    J'ai essayé de passer par des variables (v et w) pour être sur que ce qui est traité par Split est bien de type string mais rien à faire

    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
     
    x=0
    If InStr(Sheets(I).Cells(K, 13), z) <> 0 Then 'Localisation
         v = Sheets(I).Cells(K, 13)
         w = Sheets(I).Cells(K + 1, 13)
         Tableau1 = Split(v, z)
         'Boucle sur le tableau pour tester le résultat
         For L = 0 To UBound(Tableau1)
              If Tableau1(L) = w Then x = 1
                  Sheets(I).Cells(K, 13) = Sheets(I).Cells(K, 13) & z & Sheets(I).Cells(K + 1, 13)
         Next L
         If x = 0 Then Sheets(I).Cells(K, 13) = Sheets(I).Cells(K, 13) & z & Sheets(I).Cells(K + 1, 13)
              Else
                            If Sheets(I).Cells(K, 13) <> Sheets(I).Cells(K + 1, 13) Then
                                Sheets(I).Cells(K, 13) = Sheets(I).Cells(K, 13) & z & Sheets(I).Cells(K + 1, 13)
                            End If
                        End If

    Merci d'avance de votre aide.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ta variable tableau1 doit être déclarée comme un String
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Dim tableau1() As String, t As Integer
     tableau1 = Split("ma clé / mon addresse", " / ")
     For t = 0 To UBound(tableau1)
      MsgBox tableau1(t)
     Next
    Tes lignes de déclaration ne sont pas correctes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim I, J, K, L, M, N, O As Integer
    Dim x, y As Integer
    Dim Tableau1(), Tableau2() As String
    Dim z, v, w As String
    ici x es considéré comme Variant et y comme Integer
    Cette ligne est correcte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim x as integer, y as integer
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 28
    Par défaut
    C'est aussi simple que ça

    Désolé je suis juste un

    Je ne m'en était pas encore rendu compte jusqu'à présent car cela n'avais pas déclenché de bug.

    Merci encore Philippe.

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

Discussions similaires

  1. caractéres spéciaux, fonction split, replace
    Par clochardevobsy dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 22/10/2005, 23h40
  2. Réponses: 5
    Dernier message: 13/10/2005, 12h46
  3. [String] fonction split
    Par tck-lt dans le forum Langage
    Réponses: 2
    Dernier message: 19/07/2005, 17h45
  4. procedure stockée et fonction "split"
    Par wehtam dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/07/2005, 16h21
  5. [Fortran 90] Fonction Split()
    Par gchazelle dans le forum Fortran
    Réponses: 2
    Dernier message: 02/03/2005, 10h16

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