1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

VBA Explication code

Discussion dans 'Forum Excel' démarrée par URB, 2 Décembre 2018.

  1. URB

    URB XLDnaute Nouveau

    Inscrit depuis le :
    2 Décembre 2018
    Messages :
    1
    "J'aime" reçus :
    0
    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 (Text):
    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
     

    Pièces jointes:

  2. Chargement...

    Discussions similaires - VBA Explication code Forum Date
    XL 2007 Explication de code VBA Forum Excel 24 Avril 2018
    XL 2007 Explication ligne de code VBA Forum Excel 20 Octobre 2016
    Explication code vba Forum Excel 10 Juillet 2015
    Explication avec des mots d'un code VBA Forum Excel 12 Mars 2015
    Explication code Vba ? Forum Excel 6 Février 2015

  3. cp4

    cp4 XLDnaute Occasionnel

    Inscrit depuis le :
    7 Novembre 2015
    Messages :
    420
    "J'aime" reçus :
    19
    Utilise:
    Excel 2010 (PC)
    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.
     
  4. herve62

    herve62 XLDnaute Barbatruc

    Inscrit depuis le :
    14 Octobre 2005
    Messages :
    2132
    "J'aime" reçus :
    60
    Sexe :
    Masculin
    Habite à:
    Arques ( ville du Cristal) 62
    Utilise:
    Excel 2010 (PC)
    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
     

    Pièces jointes:

  5. mapomme

    mapomme XLDnaute Barbatruc

    Inscrit depuis le :
    1 Novembre 2011
    Messages :
    5099
    "J'aime" reçus :
    827
    Sexe :
    Masculin
    Habite à:
    Angers
    Utilise:
    Excel 2010 (PC)
    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.
     

    Pièces jointes:

    Dernière édition: 5 Décembre 2018

Partager cette page