Double boucle et Couper Nb de caractère

Bonjour à tous,

J'ai un petit problème que je n'arrive pas à résoudre et j'aurais besoin de votre aide.

Dans le tableau ci joint, sur la feuille "A traiter" se trouve un tableau avec dans la colonne "N", sur certaines lignes, plusieurs référence de 8 chiffres et/ou lettres. Je voudrais que dans la colonne "N" se trouve qu'une seule référence par ligne.

Pour l'instant, j'ai réussi à obtenir ce que je voulais, mais seulement pour une référence. voir bouton "Test" de la feuille "A traiter".

Je pense qu'il faudrait faire une deuxième boucle, mais je n'y arrive pas. De plus, lorsque je clic une deuxième fois sur mon bouton "Test", la copie ne se fait pas correctement, je pense que c'est a cause des espaces.

Pour résumer: J'aimerais que pour chaque ligne ou dans la colonne "N" j'ai plusieurs références, qu'une ligne soit créé en dessous, on extrait la dernière référence de la colonne "N" qu'on colle sur la nouvelle ligne créé puis on copie toute les autres données de la ligne qu'on colle sur la nouvelle ligne précédemment créé. Et on répète cela jusqu’à ce qu'il n'y ait plus qu'une seule référence par ligne dans la colonne "N".

J'ai mis sur la feuille "Résultat voulu", ce que j'aimerai au final.

Pourriez vous m'aider SVP?

Merci d'avance.

Cédric

8aide-forum.xlsm (26.07 Ko)

bonjour,

proposition de correction de ton code

Private Sub CommandButton1_Click()
    With ActiveSheet
        j = .Range("B" & Rows.Count).End(xlUp).Row    '"Rows.Count = nombre de ligne" & "End(xlUp).Row = reperer la dernière ligne pleine"
        For i = j To 6 Step -1    'De la dernière ligne j à 6 
            c = .Range("N" & i)
            While Len(c) > 8  'Compte le nombre de caractère
                .Rows(i + 1).Insert Shift:=xlDown
                .Range("B" & i & ":Q" & i).Copy .Range("B" & i + 1)
                .Range("N" & i + 1) = Right(c, 8)    'Copier coller des 8 derniers caractères
                c = Left(c, Len(c) - 10)    'Suppression des 10 derniers caractères (symbole)
            Wend
            .Range("N" & i) = c
        Next i
    End With
End Sub

Bonjour cos81,

Plutôt que d'associer ta macro au bouton, pourquoi ne pas mettre ton code dans l'évènement Selection Change de ta feuille ?

Si tu mets tes données sous forme de tableau, à chaque nouvelle saisie , ton code s'exécute....

Cordialement,

EDIT: Bonjour h2so4, merci pour ton code, j'ai encore du mal avec les boucles

Bonjour h2so4,

Merci beaucoup, ça fonctionne parfaitement. J'avais essayer de faire une deuxième boucle avec while, mais je n'y suis jamais parvenu...

J'ai juste deux questions, pourquoi commencer par le bas du tableau plutôt que du haut? Tu as supprimer les 10 derniers caractères au lieu des 8 initiales, c'est a cause des espaces je pense?

Merci encore pour ton aide.

Cédric.

Bonjour xorsankukai,

En effet, c'est un bonne remarque, mais je ne l'ai pas fait car il s'agit d'un tableau que je reçois tous les deux mois que je copie et colle d'un fichier à l'autre, je n'ajoute rien dedans. De plus, j'ai d'autre code lié a ce bouton dans le fichier original.

Merci pour ta remarque.

Bonne continuation.

Cédric.

C'est encore moi, je viens de me rendre compte que dans les colonnes, il y certaines cellules qui contiennent des "à" des "-" et certainement d'autres symboles....

Serait il possible qu'au lieu de copier les 8 derniers caractères ".Range("N" & i + 1) = Right(c, 8)" on recherche une suite de 8 caractères qu'on pourrait copier et déplacer, ainsi, tout ce qui ne contient pas 8 caractère est supprimé de la cellule.

Merci.

Cédric

bonjour,

J'ai juste deux questions, pourquoi commencer par le bas du tableau plutôt que du haut? Tu as supprimer les 10 derniers caractères au lieu des 8 initiales, c'est a cause des espaces je pense?

question 1: pourquoi par le bas et pas par le haut ?

au début de ta macro tu détermines la dernière ligne J (imaginons 10)

puis tu fais une boucle for i=6 to J, donc vba va exécuter une boucle en donnant à i les valeurs de 6 à 10 (6 et 10 seront figés et ne peuvent plus être modifiés durant l'exécution de la boucle)

à l'intérieur de la boucle, parfois tu ajoutes des lignes, ce qui décale la dernière ligne d'autant de lignes vers le bas. Si tu insère 2 lignes, la dernière ligne est maintenant la ligne 12.

comme ta boucle s'arrête à la ligne 10 les lignes 11 et 12 ne seront pas traitées.

en commençant par le bas, tu évites ce problème. je te laisse comprendre pourquoi.

il y d'autres manières de faire (par exemple avec do .. loop)

question 2: c'est effectivement à cause des espaces, il y en a 2 et non pas 1.

C'est encore moi, je viens de me rendre compte que dans les colonnes, il y certaines cellules qui contiennent des "à" des "-" et certainement d'autres symboles....

Serait il possible qu'au lieu de copier les 8 derniers caractères ".Range("N" & i + 1) = Right(c, 8)" on recherche une suite de 8 caractères qu'on pourrait copier et déplacer, ainsi, tout ce qui ne contient pas 8 caractère est supprimé de la cellule.

Merci.

Cédric

Merci de mettre un fichier exemple

Merci encore pour tes explications h2so4, surtout celle du step -1 que je n'avais pas compris. Maintenant c'est clair.

Finalement j'ai essayé le fichier d'origine qui contient une tonne de ligne et je me suis rendu compte que j'avais énormément de cellules "N" qui n’était pas de la même forme...

Je te met le même fichier, mais avec les différents type de cellule "N" que j'ai trouvé. Tu trouveras les mêmes feuille qu'avant.

Feuille "A traiter" avec des explications en colonne "R".

Feuille "Résultat voulu" avec le fichier que j'aimerai au final.

Comme je te le disais dans mon précédents message, j'aimerai avoir une référence par ligne sur tout le fichier. Je pense qu'il faudrait une macro du style: si on a une suite de 8 chiffres ou lettres, on coupe cette référence et on l'ajoute sur une nouvelle ligne.

Alors pour moi, ce que je demande parait impossible... Si ça ne marche pas, ne te casse pas trop la tête.

En tous les cas, je te remercie.

Cédric

3aide-forum-2.xlsm (28.01 Ko)

bonsoir,

une proposition.

4aide-forum-2.xlsm (31.36 Ko)

Bonsoir h2so4,

Merci beaucoup pour le fichier. Il y à un petit soucis dans le fichier. Lorsque je clic sur le bouton test, le traitement se fait bien, mais il y à un soucis sur les ligne colonne A ( G,K et N) en effet sur ces 3 lignes, la colonne "N" est vide.

Les lignes qui posent problème avant traitement sont les lignes 12,16 et 19.

Pourrais tu l'explique split, Lbound et ubund?

Franchement, j'ai vraiment du mal à comprendre ton code, mais il fait déja des miracles....

Merci encore.

Cédric

Bonjour,

je ne comprends pas le problème dont tu parles.

dans le fichier ci-joint, j'ai exécuté la macro sur le fichier que tu as fourni et j'ai comparé le résultat de la macro avec le résultat attendu. le résultat de la macro et le résultat attendu est identique pour toutes les lignes.

peux-tu clarifier le problème stp?

Bonjour h2so4,

En fait, si tu copie les données de la feuille "Origine" et que tu les colles sur la feuille "A traiter", lorsque tu clic sur le bouton "Test", le résultat ne colle pas. Chez moi, sur les lignes 12,17 et 23, les colonnes "N" sont vides.

Je viens de refaire le test dans le dernier fichier que tu m'as envoyé, et j'ai toujours ce résultat.

Ca ne le fait pas chez toi?

Merci.

Cédric

bonjour,

cela ne le fait pas chez moi. j'ai cependant trouvé un bug.

voici une correction

3aide-forum-2.xlsm (32.26 Ko)

h2so4,

Je comprends pas, j'ai toujours le même soucis. est ce que ça peut être un problème de version de Excel?

Moi j'ai Excel 2010.

Cédric.

Bonjour,

peux-tu mettre ton fichier , s'il est différent de celui que j'ai mis sur le forum ?

Bonjour,

Non non, J'ai repris le dernier que tu as mis en ligne, J'ai copier les données de la feuille origine et je les ai coller sur la feuille "a traiter" oui J'ai cliqué sur test. Et la, J'ai la colonne "N' vide sur les lignes 12, 17 et 23.

Je peux te renvoyer le fichier après traitement si tu veux?

Cédric.

bonsoir,

oui mets-le.

Bonjour h2so4,

Ci joint le fichier que j’obtiens après traitement.

Merci.

Bonne journée.

Cédric.

4aide-forum-2.xlsm (31.49 Ko)

bonjour,

peux-tu lancer l'exécution sur le fichier suivant et m'envoyer le résultat ?

Rechercher des sujets similaires à "double boucle couper caractere"