VBA Explication code

URB

XLDnaute Nouveau
Bonsoir, j'ai un soucis avec un code que je ne comprends qu'à moitié !:(

Le code sert à crée de nouvelle ligne en cas de plusieurs numéro de PO, séparer par des "~", tout en gardant le contenue de la ligne de base pour les autres colonnes.

Code:
Option Explicit

Dim tablo, tabloR()
Dim i&, j&, k&, ln&, nb&, vb As String


Sub Développer()
   
    tablo = ActiveSheet.Range("A2:G" & ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row)
    k = 0
    For i = 1 To UBound(tablo, 1) '1 à dern ligne'
        nb = UBound(Split(tablo(i, 3), "~")) 'nb de ~'
        If nb > 0 Then 'si ; >0'
            For ln = 0 To nb 'pour chaque ~'
                vb = Split(tablo(i, 3), "~")(ln) 'selectionne donnée entre ~'
                ReDim Preserve tabloR(1 To UBound(tablo, 2), 1 To k + 1) 'dimension 2'
                For j = 1 To UBound(tablo, 2) 'j  colonne dim2'
                    tabloR(j, k + 1) = tablo(i, j) 'reprend les info'
                Next j
                tabloR(3, k + 1) = vb
                k = k + 1
            Next ln
           
           
        Else
            ReDim Preserve tabloR(1 To UBound(tablo, 2), 1 To k + 1)
            For j = 1 To UBound(tablo, 2)
                If tablo(i, j) = "" Then
                    tabloR(j, k + 1) = tablo(i, j)
                Else
                    If j = 1 Or j = 5 Or j = 6 Or j = 7 Then
                        tabloR(j, k + 1) = tablo(i, j) * 1
                    Else
                        tabloR(j, k + 1) = tablo(i, j)
                    End If
                End If
            Next j
            k = k + 1
        End If
    Next i
    Range("A2").Resize(UBound(tabloR, 2), UBound(tablo, 2)) = Application.Transpose(tabloR)
End Sub
J'aimerais modifier ce code afin de l'utiliser pour différents tableaux avec des colonnes différentes.
Je ne comprends pas les variables J K VB, Le UBound & TabloR :(
Aidez moi s'il vous plaît
 

Fichiers joints

cp4

XLDnaute Impliqué
Bonsoir URB:),

Je ne maitrise pas parfaitement les tableaux VBA (ARRAY). Je te donne juste un petit coup de pouce.

Ce sont d'anciennes méthodes de déclaration de variables. Le caractère "$" déclare la variable en tant que String, le caractère "%" déclare la variable en tant que Integer et "&" en tant que Long.

Dim tablo, tabloR() ---> tablo est déclaré en tant que variant et tabloR() est déclaré en tant que tableau vba ou array.

Dans ton code tablo représente une plage de la feuille active, soit de A2:G&dernière ligne en colonne A.

Ubound, split sont des fonctions. utilise la touche F1 pour l'aide.

Voilà pour ma part, j'espère qu'on prendra le relais.

Bonne soirée.
 

herve62

XLDnaute Barbatruc
Bonsoir
Ubound, split ... sont principalement dédiés aux traitements de chaines , je te mets un petit fichier exemples ou j'avais écris le vba pour aider un membre du forum
Son Pb , diviser en plusieurs lignes si en H des données sont séparées par "-" > feuil1 l'origine ; Feuil 2 le resultat se fait direct en l'activant
Un peu comme toi ! , donc tu peux faire "joujou" avec, en modifiant en feuil1 avec des "-"
Pour comprendre comment ça marche , tu te mets en mode debug puis "pas à pas" (F8) et tu "track" avec la souris chaque variable au fur et à mesure , c'est la meilleure façon de comprendre et d'apprendre ce qu'il se passe
Bon amusement
 

Fichiers joints

mapomme

XLDnaute Barbatruc
Bonsoir @URB, @cp4, @herve62,

Une piste pour développer un tableau quelconque.

On utilise une fonction qui retourne le tableau développé et qui en entrée nécessite trois paramètres:
La fonction: Function TableauDev(DataIn, ColRef As Long, Separ As String)

Les paramètres de la fonction:
  1. le tableau des valeurs sources
  2. le numéro de la colonne du tableau source qui contient le champ à développer
  3. la lettre qui sert à séparer les différentes valeurs du champ à développer
Vous trouverez dans le module1 le code de la fonction ainsi qu'un exemple d'utilisation pour le tableau de la feuille "Feuil1". Le code est un peu commenté.

edit : version v3a qui ôte les espaces avant et après les champs développés.
 

Fichiers joints

Dernière édition:

Discussions similaires


Haut Bas