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 :

compréhension technique de la macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 67
    Points : 44
    Points
    44
    Par défaut compréhension technique de la macro
    Suite à une demande d'aide concernant un transfert de lignes dans des feuilles ciblées Mercatov (merci à vous ) a écrit cette macro qui marche trés bien . Toutefois débutant je ne comprends pas tous le code ,qu'est ce que typdel
    et à quoi correspond ind 0 et ind 3 car je voudrai rajouter un transporteur et j'y arrive pas (la macro commentée serait été ideale)
    merci pour vos eclaircissements (à noter que je suis débutant..)

    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
    Dim c As Range, plage As Range
    Dim LastLig As Long, i As Long
    Dim sht As Worksheet, shtb As Worksheet, shtd As Worksheet
    Dim typtra As String, typdel As String, namsht As String
    Dim ind As Byte
     
    Set sht = Worksheets("globale")
    Set shtb = Sheets("carte des délais")
    LastLig = sht.Range("D65536").End(xlUp).Row
        For i = 6 To LastLig
            typtra = Left(sht.Range("L" & i), 3)
            Select Case UCase(typtra)
                Case "DHL"
                    Set plage = shtb.Range("A2:C100")   '3colonnes pour DHL
                    ind = 0
                Case "JOY"
                    Set plage = shtb.Range("D2:F100")    '3colonnes pour JOY
                    ind = 3
                Case Else: Exit Sub
            End Select
            Set c = plage.Find(sht.Range("H" & i).Value, LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                typdel = CStr((c.Column - ind) * 24)
                namsht = "" & LCase(typtra & typdel) & ""
                Set shtd = Sheets(namsht)
                shtd.Rows(shtd.Range("D65536").End(xlUp).Row + 1).Value = sht.Rows(i).Value
            End If
        Next i
     
    Set sht = Nothing
    Set shtb = Nothing
    Set shtd = Nothing

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour,
    n'oublie pas les balises code pour une meilleure lisibilité.
    Selon le contexte de ton fichier: dans la feuille carte des délais, j'ai réservé 3 colonnes pour chaque transporteur XX24 XX48 XX72
    ind indique le décalage de la première colonne du transporteur:
    0 pour DHL, 3 pour JOY, 6 pour le nouvelle transporteur Z (Z24: dans Colonne G, Z48 dans colonne H, Z72 dans colonne I)...etc. pour d'autres transporteurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typdel = CStr((c.Column - ind) * 24)
    indique pour chaque transporteur le délai correspondant
    par exemple: Transporteur JOY, donc ind=3, pour la colonne E on a typedel=(5-3)*24=48

    Dans ta feuille globale, tu as dans la colonne L, tu as un code alphanumérique dont les 3 première lettres indiquent le transporteur; d'où
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typtra = Left(sht.Range("L" & i), 3)   'De quel transporteur s'agit il
    du même exemple, nous aurons donc, le nom de la feuille,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    namsht = "" & LCase(typtra & typdel) & ""
    namsht="joy48"
    ...
    Le code sera donc
    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
    Dim c As Range, plage As Range
    Dim LastLig As Long, i As Long
    Dim sht As Worksheet, shtb As Worksheet, shtd As Worksheet
    Dim typtra As String, typdel As String, namsht As String
    Dim ind As Byte
     
    Set sht = Worksheets("globale")
    Set shtb = Sheets("carte des délais")
    LastLig = sht.Range("D65536").End(xlUp).Row
        For i = 6 To LastLig
            typtra = Left(sht.Range("L" & i), 3)
            Select Case UCase(typtra)
                Case "DHL"
                    Set plage = shtb.Range("B2:C100")
                    ind = 0
                Case "JOY"
                    Set plage = shtb.Range("D2:F100")
                    ind = 3
                Case "NOUVEAU TRANSPORTEUR"   'ICI METTRE LES 3 PREMIERES LETTRE DU CODE DU NOUVEAU TRANSPORTEUR
                    Set plage = shtb.Range("E2:I100")
                    ind = 6
                Case Else: Exit Sub
            End Select
            Set c = plage.Find(sht.Range("H" & i).Value, LookIn:=xlValues, LookAt:=xlWhole)
            If Not c Is Nothing Then
                typdel = CStr((c.Column - ind) * 24)
                namsht = "" & LCase(typtra & typdel) & ""
                Set shtd = Sheets(namsht)
                shtd.Rows(shtd.Range("D65536").End(xlUp).Row + 1).Value = sht.Rows(i).Value
            End If
        Next i
     
    Set sht = Nothing
    Set shtb = Nothing
    Set shtd = Nothing
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

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

Discussions similaires

  1. [XL-2003] Compréhension et adaptation de macro en 2010
    Par Damerzone dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/05/2013, 09h42
  2. Entretien Technique Macro
    Par java2dev dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/10/2012, 15h47
  3. Réponses: 0
    Dernier message: 03/10/2011, 18h05
  4. Besoin d'aide pour la compréhension de certains termes techniques !
    Par kev42100 dans le forum Moteurs de jeux vidéo
    Réponses: 3
    Dernier message: 06/08/2010, 19h49
  5. compréhension programme macro
    Par petit-ours dans le forum Macro
    Réponses: 2
    Dernier message: 28/07/2010, 12h07

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