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 de boucle [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Erreur de boucle
    Bonjour,

    J'ai un fichier excel qui recupere dans un split de la colonne 4 de la ligne en cours (prénoms séparés par une virgule ou un seul prénom si c'est le cas) puis la passe dans une boucle pour les insérer dans la feuille dans la lgine à la suite du premier prénom (s'il y a lieu)

    Je récupère en outre les données de la colonne 1 et 2 de la ligne du dessus et incrémente en colonne 3 un tableau qui numérote les prénoms comme suit :

    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
    Dim montab() As String
    Dim montab1(5) As String
    montab = Split((Sheets(onglet).Cells(LigneLue, 4).Value), ",")
    montab1(0) = "PU": montab1(1) = "UN": montab1(2) = "DX": montab1(3) = "TR": montab1(4) = "QU"
    y = LBound(montab1)
     
           For x = LBound(montab) To UBound(montab)
                If x = 0 Then
                    Sheets(onglet).Cells(LigneLue, 3) = montab1(y)
                    Sheets(onglet).Cells(LigneLue, 4) = montab(x)
                Else
                    Rows(LigneLue + 1).Insert Shift:=xlDown
                    Sheets(onglet).Cells(LigneLue + 1, 1) = Sheets(onglet).Cells(LigneLue, 1)
                    Sheets(onglet).Cells(LigneLue + 1, 2) = Sheets(onglet).Cells(LigneLue, 2)
                    Sheets(onglet).Cells(LigneLue + 1, 3) = montab1(y + 1)
                    Sheets(onglet).Cells(LigneLue + 1, 4) = LTrim(montab(x))
                End If
            Next x
    ca fonctionne bien pour les prénoms mais mon souci est que la colonne 3 ne s'incrémente pas correctement : lorsque j'ai par exemple 2 prénoms dans mon split, elle mets le 1 à PU puis le 2eme à UN et modifie ensuite le deuxième pour le passer à PU.

    Je suppose qu'il s'agit d'un problème de boucle simple mais je n'arrive pas à m'en dépatouiller.

    Quelqu'un pourrait-il me venir en aide ?

    Merci
    Dernière modification par SfJ5Rpw8 ; 19/02/2014 à 19h47.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,




    Sinon pas besoin de boucle, exemple à tester dans un classeur vierge :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Demo()
        SP = Split("Albert,Bernard,Charles,Denis,Edouard", ",")
        [C2].Resize(, UBound(SP) + 1).Value = SP
    End Sub

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci Marc-L !

    Formulation très intéressant lorsqu'on veux découper le string en colonnes mais lorsqu'on veut insérer le string sur plusieurs lignes qu'on crée, ça ne fonctionne pas ...

    De plus, mon véritable souci se situe sur le tableau de string montab1 qui contient la "place" à donner à chaque prénom comme ceci :

    Numéro 1 --> date --> PU --> Prénom (1)
    Numéro 1 --> date --> UN --> Prénom (2)
    Numéro 1 --> date --> DX --> Prénom (3)
    Numéro 2 --> date --> PU --> Prénom (1)
    Numéro 3 --> date --> PU --> Prénom (1)
    Numéro 3 --> date --> UN --> Prénom (1)
    Numéro 4 --> date --> PU --> Prénom (1)

    Mon code fonctionne pour l'insertion et la copie des numéros, date et Prénoms mais il met systématiquement PU ...

    Le voici :

    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
     
    Dim montab() As String
    Dim montab1() As String
    montab = Split((Sheets(onglet).Cells(LigneLue, 4).Value), ",")
    montab1 = Split("PU,UN,DX,TR,QU", ",")
    y = LBound(montab1)
     
    For x = LBound(montab) To UBound(montab)
         If x = 0 Then
              Sheets(onglet).Cells(LigneLue, 3) = montab1(y)
              Sheets(onglet).Cells(LigneLue, 4) = montab(x)
         Else
              Rows(LigneLue + 1).Insert Shift:=xlDown
              Sheets(onglet).Cells(LigneLue + 1, 1) = Sheets(onglet).Cells(LigneLue, 1)
              Sheets(onglet).Cells(LigneLue + 1, 2) = Sheets(onglet).Cells(LigneLue, 2)
              Sheets(onglet).Cells(LigneLue + 1, 3) = montab1(y + 1)
              Sheets(onglet).Cells(LigneLue + 1, 4) = LTrim(montab(x))
         End If
    Next x


    Merci d'avance pour votre aide

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut A tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub DemoV()
        SP = Split("Albert,Bernard,Charles,Denis,Edouard", ",")
        [C2].Resize(UBound(SP) + 1).Value = Application.Transpose(SP)
    End Sub
    Si cela ne suffit pas, comme je ne capte pas vraiment, un classeur en pièce jointe
    comportant une feuille Origine et une autre Résultat éclaircirait le besoin …

  5. #5
    Invité
    Invité(e)
    Par défaut
    Waouh ... très impressionnant comme ça ...

    Je ne sais pas encore si ça pourrait être utile à mon propos étant donné que je dois faire ressortir ce que tu trouveras dans l'onglet RESULTAT de la pièce jointe

    Merci en tout cas pour cette formule que je vais garder précieusement au cas où !

    Cordialement

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    En fait c'est la fonction de feuille de calculs TRANSPOSE, B-A-BA d'Excel …

    Je vais consulter la pièce jointe …

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/11/2009, 11h47
  2. Erreur inconnue : boucle infinie?
    Par dubitoph dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/10/2009, 09h05
  3. Erreur sur boucle for
    Par philippef dans le forum Langage
    Réponses: 2
    Dernier message: 04/07/2008, 13h44
  4. [Tableaux] Erreur dans Boucle
    Par mickado dans le forum Langage
    Réponses: 11
    Dernier message: 25/01/2007, 11h52
  5. Erreur de boucle
    Par koala64 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/05/2005, 16h35

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