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 :

EXCEL : non prise en compte des lignes >51


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Points : 4
    Points
    4
    Par défaut EXCEL : non prise en compte des lignes >51
    Bonjour
    J'ai fait cet été un algorithme en VBA de tri d'un tableau excel composé d'une colonne Numéro (de fiche) , d'une colonne Marque , d'une colonne Type et d'une dernière colonne Finie (pour savoir si la fiche est ou non finie). L'algo retourne un tableau excel avec en prmeière colonne Marque (triée par ordre alphabétique croissant), la seconde Type triée par ordre croissant également et la dernière qui donne le numéro de la fiche correspondant
    Cet algorithme marchait très bien mais maintenant arrivé à la fiche 52 il ne rajoute pas les nouvelles fiches et la feuille passe de la ligne 52 à la ligne 65535.
    Pourriez-vous m'expliquer ce qui se passe (s'il le faut j'envoie l'algo VBA)?
    Merci

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par h_mag_14
    ...
    Pourriez-vous m'expliquer ce qui se passe (s'il le faut j'envoie l'algo VBA)?
    ...
    ben sans c'est un peu vague

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Points : 4
    Points
    4
    Par défaut algo VBA
    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
    Private Sub MiseAJourListe_Click()
    ' Macro enregistrée le 31/07/2006 par MH
    '
    Dim i As Byte, Lig As Integer, Col As Byte, k As Integer
     
    'calcul du numéro de la premiere ligne vide
    k = 3
    Do While Worksheets("création des FIM").Cells(k, 1) <> ""
      k = k + 1
    Loop
    Debug.Print k
     
    'remplissage du tableau
    Application.ScreenUpdating = False
    For i = 1 To k - 1
           Sheets("Classement par ordre alphabétiq").Cells(i, 1) = Sheets("création des FIM").Cells(i + 2, 2)
           Sheets("Classement par ordre alphabétiq").Cells(i, 2) = Sheets("création des FIM").Cells(i + 2, 3)
           Sheets("Classement par ordre alphabétiq").Cells(i, 3) = Sheets("création des FIM").Cells(i + 2, 1)
    Next i
     
    'largeur des colonnes du tableau
    With Worksheets("Classement par ordre alphabétiq").Columns("A")
            .ColumnWidth = 20
    End With
    With Worksheets("Classement par ordre alphabétiq").Columns("B")
            .ColumnWidth = 30
    End With
    With Worksheets("Classement par ordre alphabétiq").Columns("C")
            .ColumnWidth = 10
    End With
     
    'mise en forme du tableau (eh non ce n'est pas automatique! )
    For i = 1 To 3
    For m = 1 To k - 3
          With Sheets("Classement par ordre alphabétiq").Cells(m, i).Borders
              .Weight = Excel.XlBorderWeight.xlThin
           End With
    Next m
            With Sheets("Classement par ordre alphabétiq").Cells(1, i).Font.Bold = True
            End With
    Next i
     
     
     
    'tri
    With Sheets("Classement par ordre alphabétiq")
    ' nombre de lignes du tableau
    Lig = .Range("A2").SpecialCells(xlCellTypeLastCell).Row
    Range(Rows(2), Rows(Lig)).Sort Key1:=Cells(2, 1), Key2:=Cells(2, 2), Order1:=xlAscending, Order2:=xlAscending
    End With
     
     
    End Sub

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Un petit exemple de traitement un peu différent:
    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
    Option Explicit
     
    Private Sub MiseAJourListe()
      Dim wksSource As Worksheet
      Dim wksDest As Worksheet
      Dim iLastRow As Long ' Toujours un Long pour traiter des lignes
      Dim rDest As Range
      Dim Lig As Integer
     
      Set wksSource = Sheets("création des FIM")
      Set wksDest = Sheets("Classement par ordre alphabétiq")
      'calcul du numéro de la premiere ligne vide
      iLastRow = wksSource.Cells.SpecialCells(xlLastCell).Row
      Debug.Print iLastRow
     
      'remplissage du tableau
      Range(wksSource.[B3], wksSource.Cells(iLastRow, 2)).Copy (wksDest.[A1])
      Range(wksSource.[C3], wksSource.Cells(iLastRow, 3)).Copy (wksDest.[B1])
      Range(wksSource.[A3], wksSource.Cells(iLastRow, 1)).Copy (wksDest.[C1])
     
      'largeur des colonnes du tableau
      wksDest.Columns(1).ColumnWidth = 20
      wksDest.Columns(2).ColumnWidth = 30
      wksDest.Columns(3).ColumnWidth = 10
     
      'mise en forme du tableau (eh non ce n'est pas automatique! )
      Set rDest = Range(wksDest.[A1], wksDest.Cells.SpecialCells(xlLastCell))
      With rDest.Borders(xlEdgeLeft)
          .LineStyle = xlContinuous
          .Weight = xlThin
      End With
      With rDest.Borders(xlEdgeTop)
          .LineStyle = xlContinuous
          .Weight = xlThin
      End With
      With rDest.Borders(xlEdgeBottom)
          .LineStyle = xlContinuous
          .Weight = xlThin
      End With
      With rDest.Borders(xlEdgeRight)
          .LineStyle = xlContinuous
          .Weight = xlThin
      End With
      With rDest.Borders(xlInsideVertical)
          .LineStyle = xlContinuous
          .Weight = xlThin
      End With
      With rDest.Borders(xlInsideHorizontal)
          .LineStyle = xlContinuous
          .Weight = xlThin
      End With
      wksDest.Rows(1).Font.Bold = True
     
      'tri
      With wksDest
        ' nombre de lignes du tableau
        Lig = .Range("A2").SpecialCells(xlCellTypeLastCell).Row
        Range(Rows(2), Rows(Lig)).Sort Key1:=Cells(2, 1), Key2:=Cells(2, 2), Order1:=xlAscending, Order2:=xlAscending
      End With
     
    End Sub
    Je ne sais pas si ça répondra à ton problème mais, au moins, ça te montrera une autre possibilité.
    Je n'ai pas été jusqu'au tri car je n'ai plus le temps...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    sinon je ne vois pas de raison pour que ton code s'arrête à la ligne 52... qui y as t'il dans la cellule A52 de ta feuille création des FIM, ou autour... pas de cellule vide .. j'espére...

    pour moi le blocage du nombre de ligne devrai se situer en 255.. vu que tu utilise un type de donnée byte pour i...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Peux-tu faire un Sheets("Classement par ordre alphabétiq").Cells.Delete avant?
    Et a la fin quand tu fais ton tri, rajoute en parametre : header:=xlNo, puisqu'apparemment tu commences a la ligne 2

    Enleve egalement tous les With ... End With
    et quand tu fais ton tri, fais le sur la bonne feuille.

    Comme le dit bbil, i doit etre un entier : Integer, sinon i est limité à 255.
    Col est également un Byte, et je ne pense pas que tu t'en serves ici...

    Au final, ca devrait te donner ca :
    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
     
    Private Sub MiseAJourListe_Click()
        '
        Dim i As Integer, Lig As Integer, Col As Byte, k As Integer
        Dim f1 As Worksheet, f2 As Worksheet
     
        Set f1 = Worksheets("création des FIM")
        Set f2 = Sheets("Classement par ordre alphabétiq")
     
        'calcul du numéro de la premiere ligne vide
        k = 3
        Do While f1.Cells(k, 1) <> ""
            k = k + 1
        Loop
     
        ' Effacement de la feuille de classement
        f2.Cells.Delete
     
        'remplissage du tableau
        Application.ScreenUpdating = False
        For i = 1 To k - 1
            f2.Cells(i, 1) = f1.Cells(i + 2, 2)
            f2.Cells(i, 2) = f1.Cells(i + 2, 3)
            f2.Cells(i, 3) = f1.Cells(i + 2, 1)
        Next i
     
        'largeur des colonnes du tableau
        f2.Columns(1).ColumnWidth = 20
        f2.Columns(2).ColumnWidth = 30
        f2.Columns(3).ColumnWidth = 10
     
        'mise en forme du tableau -> Plus rapide
        f2.Range(f2.Cells(1, 1), f2.Cells(k - 3, 3)).Borders.Weight = Excel.XlBorderWeight.xlThin
        f2.Range(f2.Cells(1, 1), f2.Cells(1, 3)).Font.Bold = True
     
        'tri
        ' nombre de lignes du tableau
        Lig = f2.Range("A2").SpecialCells(xlCellTypeLastCell).Row
        f2.Range(f2.Rows(2), f2.Rows(Lig)).Sort Key1:=f2.Cells(2, 1), Key2:=f2.Cells(2, 2), Order1:=xlAscending, Order2:=xlAscending, Header:=xlNo
    End Sub
    Attention, quand tu calcules le numéro de la premiere ligne vide dans la colonne A, si c'est la 52 c'est sur, ca va s'arreter comme le dit bbil.

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci
    J'ai utilisé le code de dadavyvy . je ne sais toujours pas pourquoi ça a bugué! Peut-être que les macros ont été désactvées une fois.... Enfin ça remarche !
    Merci encore

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

Discussions similaires

  1. Non prise en compte des custom error
    Par Neikeur dans le forum ASP.NET
    Réponses: 0
    Dernier message: 07/04/2009, 16h03
  2. Non prise en compte des modifications de l'IHM
    Par specialka dans le forum MFC
    Réponses: 16
    Dernier message: 17/10/2008, 16h55
  3. SQL Loader - Non prise en compte des titres
    Par zizou771 dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 16/07/2008, 15h30
  4. [cURL] Non prise en compte des cookies avec librairie curl
    Par jpascal dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 02/12/2007, 20h06

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