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 :

Création de tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut Création de tableau
    Bonjour,

    J'ai une boite de dialogue qui me permet de copié des valeurs dans plusieurs onglets en prenant en compte plusieurs critères...Pour cela j'utilise les tableaux. Dans deux onglets avec deux codes différents je rencontre un point dur, le premier :

    -C'est que les valeurs sont bien copiées dans mon onglets mais pas comme je souhaiterai, dans mon onglets je souhaite que les valeurs soit copiées de 1 à 40 à partir de la colonne A7, de 41 à 81 à partir de la colonne F7 et de 82 à la fin à partir de la colonne K7...

    Je n'arrive pas à voir où est-ce qu'il y a une erreur dans mon code quand j'éxécute la macro, j'ai une erreur sur cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      .Offset(p - 41, 0) = Tablo(1, p)
    Voici le code de la macro :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Sub copypjointes()
    Dim repere As String
     
    Dim dernl As Range, liste As Range
    Dim f As Range
    Dim nbcol As Integer
    Dim p As Integer, k As Integer, a As Byte
    Dim Tablo()
    Dim dernval As Range
     
     
    'Occurence à rechercher dans la colonne 1 de la feuille "TABLE"
    repere = cmboTAG.Value
     
    With Sheets("MASTER LUT")
     
        'Dernière ligne de la feuille "TABLE"
        Set dernl = .Cells(.Rows.Count, 5).End(xlUp)
        'liste des occurences dans laquelle chercher la valeur de la Combobox
        Set liste = .Range(.Cells(9, 5), dernl)
        'Cellule correspondante à la recherche
        Set f = liste.Find(repere, Lookat:=xlWhole)
        'Dernière colonne de la feuille "TABLE"
        nbcol = .Cells(9, .Columns.Count).End(xlToLeft).Column - 1
     
        'Compteur des occurences informées
        k = 0
     
        'Il y a 3 champs (...) placés toutes les colonnes à partir de la colonne des occurences (A1, A2...)
        For p = 85 To nbcol
            'Test si le champ est informé
           If f.Offset(0, p) > 1 Then
               'Si oui, alors le compteur augmente de 1
                k = k + 1
                'On redimensionne la variable Tableau de 1 occurence k tout en conservant les précédents enregistremeents
                'Il y a 4 champs à retenir (Nom de la pièce, Référence, Quantité N,  Quantité D)
                ReDim Preserve Tablo(1 To 3, 1 To k)
                '1ère valeur = nom de la pièce placé en ligne 5
                Tablo(1, k) = .Cells(9, 5 + p)
                'Référence
                Tablo(2, k) = f.Offset(0, p)
     
                End If
        Next p
     
    End With
     
    'Information de la feuille Résultats
    With Sheets("11-PIECES JOINTES")
            'Effacement des anciens enregistrements...
            Set dernval = .Cells(.Rows.Count, 5).End(xlUp)
            '... à conditions qu'il y en ait, sinon on effacerait la ligne de titres
            If dernval.Row > 7 Then .Range("A7", dernval.Offset(0, 6)).ClearContents
            'On informe le champ correspondant à la variable Tableau transposée
            If UBound(Tablo(), 2) <= 40 Then
                    .Range("A7").Resize(UBound(Tablo(), 2), UBound(Tablo(), 1)).Value = WorksheetFunction.Transpose(Tablo)
            Else
     
     
                    For p = 1 To 40
                            With .Range("A7")
                                    .Offset(p - 1, 0) = Tablo(1, p)
                                    .Offset(p - 1, 1) = Tablo(2, p)
                            End With
                    Next p
     
     
                    For p = 41 To 81
                           With .Range("F7")
                                   .Offset(p - 41, 0) = Tablo(1, p)
                                   .Offset(p - 41, 1) = Tablo(2, p)
                            End With
                    Next p
     
                    For p = 82 To UBound(Tablo(), 2)
                           With .Range("K7")
                                   .Offset(p - 82, 0) = Tablo(1, p)
                                   .Offset(p - 82, 1) = Tablo(2, p)
                            End With
                    Next p
     
            End If
     
      End With

  2. #2
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    Sans examiner ton code, exécutes-le en mode pas à pas ou mets un point d'arrêt sur la ligne provoquant l'erreur, regardes la valeur de ta variable p, tu comprendras peut-être

    Bonne journée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Maintenant j'ai un autre soucis les valeurs copiés dans mon onglets :
    Elles sont copiées de la ligne A7 à A140; de F7 à F41 et de K7 à K140

    Alors que je souhaite quelles soient copiées de A7 à A46; de F7 à F46 et de K7 à K46

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Voici le code de la macro :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    Sub copypjointes()
    Dim repere As String
     
    Dim dernl As Range, liste As Range
    Dim f As Range
    Dim nbcol As Integer
    Dim p As Integer, k As Integer, a As Byte
    Dim Tablo()
    Dim dernval As Range
     
     
    'Occurence à rechercher dans la colonne 1 de la feuille "TABLE"
    repere = cmboTAG.Value
     
    With Sheets("MASTER LUT")
     
        'Dernière ligne de la feuille "TABLE"
        Set dernl = .Cells(.Rows.Count, 5).End(xlUp)
        'liste des occurences dans laquelle chercher la valeur de la Combobox
        Set liste = .Range(.Cells(9, 5), dernl)
        'Cellule correspondante à la recherche
        Set f = liste.Find(repere, Lookat:=xlWhole)
        'Dernière colonne de la feuille "TABLE"
        nbcol = .Cells(9, .Columns.Count).End(xlToLeft).Column - 1
     
        'Compteur des occurences informées
        k = 0
     
        'Il y a 3 champs (...) placés toutes les colonnes à partir de la colonne des occurences (A1, A2...)
        For p = 85 To nbcol
            'Test si le champ est informé
           If f.Offset(0, p) > 1 Then
               'Si oui, alors le compteur augmente de 1
                k = k + 1
                'On redimensionne la variable Tableau de 1 occurence k tout en conservant les précédents enregistremeents
                'Il y a 4 champs à retenir (Nom de la pièce, Référence, Quantité N,  Quantité D)
                ReDim Preserve Tablo(1 To 3, 1 To k)
                '1ère valeur = nom de la pièce placé en ligne 5
                Tablo(1, k) = .Cells(9, 5 + p)
                'Référence
                Tablo(2, k) = f.Offset(0, p)
     
                End If
        Next p
     
    End With
     
    'Information de la feuille Résultats
    With Sheets("11-PIECES JOINTES")
            'Effacement des anciens enregistrements...
            Set dernval = .Cells(.Rows.Count, 5).End(xlUp)
            '... à conditions qu'il y en ait, sinon on effacerait la ligne de titres
            If dernval.Row > 7 Then .Range("A7", dernval.Offset(0, 6)).ClearContents
            'On informe le champ correspondant à la variable Tableau transposée
            If UBound(Tablo(), 2) <= 40 Then
                    .Range("A7").Resize(UBound(Tablo(), 2), UBound(Tablo(), 1)).Value = WorksheetFunction.Transpose(Tablo)
            Else
     
     
                    For p = 1 To 40
                            With .Range("A7")
                                    .Offset(p - 1, 0) = Tablo(1, p)
                                    .Offset(p - 1, 1) = Tablo(2, p)
                            End With
                    Next p
     
     
                    For p = 41 To 81
                           With .Range("F7")
                                   .Offset(p - 41, 0) = Tablo(1, p)
                                   .Offset(p - 41, 1) = Tablo(2, p)
                            End With
                    Next p
     
                    For p = 82 To UBound(Tablo(), 2)
                           With .Range("K7")
                                   .Offset(p - 82, 0) = Tablo(1, p)
                                   .Offset(p - 82, 1) = Tablo(2, p)
                            End With
                    Next p
     
            End If
     
      End With
    [/QUOTE]

    Je souhaiterai limitée ma recherche dans mon onglet "master lut" pour copier le texte de mes liens jusqu'à la colonne 120 est ce possible en modifiant le code?
    il faut peut-être modifier le nbcol :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbcol = .Cells(9, .Columns.Count).End(xlToLeft).Column - 1
    Je sais pas sur quoi jouer éxactement...?

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    165
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 165
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbcol = .Cells(9, .Columns.Count).End(xlToLeft).Column - 1
    .....Il faut que je puisse remplacer cette donnée par un numéro de colonne afin d'indiquer la dernière colonne prise en compte, mais je sais pas comment...?

    Y a-t-il une personne qui a une idée...?

Discussions similaires

  1. création de tableau dans un autre tableau
    Par freestyler dans le forum Delphi
    Réponses: 2
    Dernier message: 02/11/2006, 08h54
  2. erreur création de tableau
    Par fabule dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 20/07/2006, 20h36
  3. Création de tableau
    Par rod59 dans le forum C
    Réponses: 10
    Dernier message: 12/11/2005, 16h40
  4. [CR] Création de tableau et case à cocher
    Par aysse dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 26/11/2003, 17h07

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