Résolu Comparaison de 2 fichiers excel avec .find

bebobe

Nouveau membre
Bonjour le forum,

Suite à la lecture de sujet sur le tri de 2 fichiers Excel, j ai tenté de modifier une Macro.


Mais je me perds sur la fin de recherche .find quand c et Nothing.

Mon projet :

1 classeur avec une liste de nom, statut, élu le, né le, décédé le. Qui est ma base pour travailler (Le grand livre.xlms)
1 classeur avec nom, date de naissance et age ou je travail avec la macro (Composition AT)

Vous devez être connecté pour voir les images.

[strike]
[/strike]
moderator dixit : Pas de fichier plein de macros s'il te plaît.

Mon soucis est que lors de la boucle find si un nouveau nom ce trouve dans ma liste d'origine c devient nothing est saute la ligne alors que je voudrais le récupérer et le copier dans le fichier Composition AT.

Ci joint le code que j'ai retravailler :

Code:
Sub Test2()


    Dim I&, Z1 As Variant, Z2 As Integer, Z3 As Long, Y As Boolean, Y1 As Boolean, Y2 As Boolean, Y3 As Boolean, c
    Dim iLRB%
    Dim LGL As Workbook
    Dim CAT As Workbook
    Dim LG As Worksheet
    Dim B As Worksheet
      
' Workbooks.Open Filename:=ThisWorkbook.Path & "\composition AT.xlsm", Local:=True
 
  
  Set LGL = Workbooks("Le grand Livre.xlsm")
  Set LG = LGL.Worksheets("Le grand livre")
  Set CAT = Workbooks("composition AT.xlsm")
  Set B = CAT.Worksheets("BASE")

'le rapprochement. Classeur(b) est celui ou on va chercher des différences
With B.Range("A1:A10")
iLRB = B.Cells(1000, 1).End(xlUp).Row

'Active le classeur de référence
LGL.Activate
    'Pour chaque cellule dans la colonne 2 de feuil(1) de classeur(a)
      For Each o In LG.Range("B3:B10")
      'noter le N° de ligne
        I = o.Row
        'mémoriser la valeur de la cellule
        Z1 = o.Value
        'et celle de né le
        Z2 = Cells(I, 6).Value
        'et celle de decede le
        Z3 = Cells(I, 7).Value
        'cherche Z1 dans With...
        Set c = .Find(Z1, LookIn:=xlValues, LookAt:=xlWhole)
        'Si trouvé mémorise le N° de ligne
        If Not c Is Nothing Then
        FirstRow = c.Row
          Do
              'Pose un drapeau
              Y = True
              'si nom = faux pose un drapeau
                If Z1 = False Then Y1 = True
              'Si ne le est égale Z2 pose un autre drapeau
                    If Z2 = LG.Cells(I, 6).Value Then Y2 = True
              'Si decede le est superieur à 2 pose un autre drapeau
                        If Z3 > 2 Then Y3 = True
              'Si les des 2 drapeaux sont vrai...
              If (Y And Y3) Then
              'Colore la cellule colonne 1
              .Cells(c.Row, 1).Interior.ColorIndex = 45
              'Si les des 2 drapeau sont vrai...
                ElseIf (Y1 And Y2) Then
                'copie la valeur de la cellule apres la derniere ligne
              B.Cells(iLRB + 1, 1).Value = LG.Cells(I, 2).Formula
        iLRB = iLRB + 1
              End If
        
              'réinitialise les drapeaux
              Y = False: Y1 = False: Y2 = False: Y3 = False
              'cherche l'occurrence suivante
              
       
              
              Set c = .FindNext(c)
              '...Tant qu 'on n'est pas revenu à la ligne de départ
            Loop While Not c Is Nothing And c.Row <> FirstRow
  'réinitialise la variable avant de changer de...
          FirstRow = ""
  '...cellule de référence (o) suivante
    End If
        
      Next
    End With
    End Sub

Merci pour l'aide qui sera apporter :bounce:
 

bebobe

Nouveau membre
Bonjour,

Voici la réponse que j'ai trouvée, mais maintenant j'ai un autre problème :

le code fonctionne sur un petit exemple de 20 lignes
il fonction au pas à pas avec un stop ligne 62 sur mon fichier de 400 lignes
Mais ne fonctionne pas lancer par un bouton macro ou lancer en directe seul


Zeb aurais tu une idée

Code:
Sub Mise_a_jour_composition_AT()

    Dim I&, Z1 As Variant, Z2 As Integer, Z3 As Variant, Y As Boolean, Y1 As Boolean, _
        Y2 As Boolean, Y3 As Boolean, Y4 As Boolean, Y5 As Boolean, Y6 As Boolean, c, c1
    Dim iLRB%
    Dim LGL As Workbook
    Dim CAT As Workbook
    Dim LG As Worksheet
    Dim B As Worksheet
    'Dim Moi As Variant
    
    Workbooks.Open Filename:=ThisWorkbook.Path & "\composition AT.xlsm", Local:=True
    
    Set LGL = Workbooks("Le grand Livre.xlsm")
    Set LG = LGL.Worksheets("Le grand livre")
    Set CAT = Workbooks("composition AT.xlsm")
    Set B = CAT.Worksheets("BASE")
    
    'Application.ScreenUpdating = False
    LG.Unprotect Password:="beatrice"
    B.Unprotect Password:="beatrice"

    'Enleve le filtre avant le travail
    B.Range("$V$1:$V$10002").AutoFilter Field:=1

    'le rapprochement. Classeur(b) est celui ou on va chercher des différences
    With B.Range("A1:A1000")
        iLRB = B.Cells(1000, 1).End(xlUp).Row

        'Active le classeur de référence
        LGL.Activate
        'Pour chaque cellule dans la colonne 2 de la feuile LG du claseur LGL
        For Each o In LG.Range("B3:B1000")
            'noter le N° de ligne
            I = o.Row
            'mémoriser la valeur de la cellule
            Z1 = o.Value
            'et celle de né le
            Z2 = Cells(I, 6).Value
            'et celle de decede le
            Z3 = Cells(I, 7).Value
            'cherche Z1 dans With...
            Set c = .Find(Z1, LookIn:=xlValues, LookAt:=xlWhole)
            'Si pas trouvé memoriser le n° de ligne
            If c Is Nothing Then
                'si nom = nothing pose un drapeau
                Y5 = True
                'si né le et superieure a 10 pose un drapeau
                If Z2 > 10 Then Y2 = True
                'si il n'a pas démissioné pose un drapeau
                If Cells(I, 4) = "" Then Y4 = True
                'Si decede le est inferieur à 10 pose un autre drapeau
                If Cells(I, 7) < 10 Then Y6 = True
                'Si les 4 drapeaux sont vrai...
                If (Y2 And Y4 And Y5 And Y6) = True Then
                   'copie la valeur de la ligne apres la derniere ligne sur base
                    B.Cells(iLRB + 1, 1).Value = LG.Cells(I, 2).Formula
                    B.Cells(iLRB + 1, 2).Value = LG.Cells(I, 6).Formula
                    'B.Cells(iLRB + 1, 1).Interior.ColorIndex = 65535
                    iLRB = iLRB + 1
                End If
                'réinitialise la variable avant de changer de...
                Y2 = False: Y4 = False: Y5 = False: Y6 = False
            End If
            'Si trouvé mémorise le N° de ligne
            If Not c Is Nothing Then
                FirstRow = c.Row
                Do

                    'Pose un drapeau
                    Y = True
                    'Si decede le est une date pose un autre drapeau
                    If IsDate(Cells(I, 7)) Then Y3 = True
                    'Si les des 2 drapeaux sont vrai...
                    If (Y And Y3) Then
                        'Colore la cellule colonne 1
                        .Cells(c.Row, 1).Interior.ColorIndex = 45
                        'efface la ligne si la personne est decédé
                    End If

                    'réinitialise les drapeaux
                    Y = False: Y1 = False: Y3 = False
                    'cherche l'occurrence suivante

                    Set c = .FindNext(c)
                    '...Tant qu 'on n'est pas revenu à la ligne de départ
                Loop While Not c Is Nothing And c.Row <> FirstRow
                'réinitialise la variable avant de changer de...
                FirstRow = ""
                '...cellule de référence (o) suivante
            End If
        Next
    End With

    'de la derniere ligne a la 1 er
    For I = iLRB To 2 Step -1
        'si la cellule de la colonne A est orange
        If B.Cells(I, 1).Interior.ColorIndex = 45 Then
            'effacer les colonne A à B
            B.Range("A" & I & ":" & "B" & I).ClearContents
            'effacer les colonne D à U
            B.Range("D" & I & ":" & "U" & I).ClearContents
            'effacer la couleur de la cellule en colonne A
            B.Cells(I, 1).Interior.ColorIndex = xlNone
        End If
        If B.Cells(I, 4) = "" Then
        B.Range("A" & I).Interior.Color = 65535
        End If
    Next
    'faire le tri du tableau base par nom sur la colonne A
    B.Sort.SortFields.Clear
    B.Sort.SortFields.Add Key:=Range("A2:A1000"), _
                          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With B.Sort
        .SetRange Range("A1:U1000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
    End With

    'filtre avec critere 1 sur colonne V
    B.Range("$V$1:$V$1000").AutoFilter Field:=1, Criteria1:="<>"

    ' proctection feuille avec password
    B.Protect Password:="beatrice", DrawingObjects:=False, Contents:=True, Scenarios:= _
              False, AllowFormattingColumns:=True, AllowFormattingRows:=True, _
              AllowFiltering:=True

    'TRI_TITULAIRE
    'Titulaire_Majeur
    'Titulaire_Mineur
    'TRI_EMERITE
    'Emerite_Majeur
    'Emerite_Mineur
    'Impression
    
    'Application.ScreenUpdating = True


End Sub

Merci
 

zeb

Modérateur
Meilleure réponse
Salut,


Vire tous les With. C'est illisible.

Tu as des Cells() qui se baladent sans référence à la feuille. C'est mal.

Code:
If c Is Nothing Then
    ...
End If
If Not c Is Nothing Then
	...
End If
Mets donc un Else.

Ta gestion des booléens est pour le moins surprenante.
Code:
Y5 = True
Y = True
Pour quoi faire ?

Attention !
Code:
' Non :
If Z2 > 10 Then Y2 = True
If Cells(I, 4) = "" Then Y4 = True
If Cells(I, 7) < 10 Then Y6 = True
If (Y2 And Y4 And Y5 And Y6) = True Then ...
Y2 = False: Y4 = False: Y5 = False: Y6 = False
If (Y And Y3) Then ...

' Oui :
Y2 = Z2 > 10
Y4 = ?.Cells(I, 4) = ""
Y6 = ?.Cells(I, 7) < 10
If Y2 And Y4 And Y5 And Y6 Then ...
If Y And Y3 Then ...

Mais tu peux aussi écrire comme ça, ça reste lisible :
Code:
If Z2 > 10 And _
   ?.Cells(I, 4) = "" And _
   ?.Cells(I, 7) < 10 _
Then
	 ...
End If

Inutile. Regarde ton code !
Code:
'réinitialise la variable avant de changer de...
FirstRow = ""
'...cellule de référence (o) suivante

Plus tu auras un code clair, simple et précis, plus ce sera facile à débugger.

Ah, et la ligne 62, laquelle est-ce ?

Ton code s'allonge avec toutes ces ligne vides et ces commentaires.
Ce n'est pas forcément un mal. Mais ça peut perturber la lecture.

N'hésite pas à faire des commentaire de bouts de ligne :
Code:
'mémoriser la valeur de la cellule
Z1 = o.Value

Z1 = o.Value 'valeur cellule

Et surtout, vire les morceaux de code mort et les commentaires inutiles.
A te lire...
:)
 

bebobe

Nouveau membre
Bonjour zeb,

Merci de ton coup de main et de tes commentaire.
je regarde ça ce soir et revient quand j'aurais éclairci tout ça.

Cordialement

 

bebobe

Nouveau membre
Bonsoir zeb et le forum,

J' ai commencé a éclaircir le code et à chercher à comprendre les subtilités des différentes écritures.

pour tes questions, je commence en VBA et c'est une macro que j'ai vu sur un autre site que j ai adapté.

Ta gestion des booléens est pour le moins surprenante.

Y5 = True
Y = True

C’était le style de la macro, donc j ai continué comme ça. Je sais maintenant "Pas bien:no:"

Voici ou j'en suis :

Code:
Sub Mise_a_jour_composition_AT()

    Dim Z1 As Variant, Z2 As Long, Z3 As Variant, Z4 As Integer
    Dim Y As Boolean, Y1 As Boolean, Y2 As Boolean, Y3 As Boolean, _
        Y4 As Boolean, Y5 As Boolean, Y6 As Boolean, c
    Dim I As Long
    Dim iLRB As Integer
    Dim LGL As Workbook
    Dim CAT As Workbook
    Dim LG As Worksheet
    Dim B As Worksheet
    
    'Workbooks.Open Filename:=ThisWorkbook.Path & "\composition AT.xlsm", Local:=True
    
    Set LGL = Workbooks("Le grand Livre.xlsm")
    Set LG = LGL.Worksheets("Le grand livre")
    Set CAT = Workbooks("composition AT.xlsm")
    Set B = CAT.Worksheets("BASE")
    
    'Application.ScreenUpdating = False
    LG.Unprotect Password:="beatrice"
    B.Unprotect Password:="beatrice"

    'B.Range("$V$1:$V$10002").AutoFilter Field:=1 'enleve le filtre

        c = B.Range("A2:A1000")  'zone de rapprochement ou on cherche les différences
        iLRB = B.Cells(1000, 1).End(xlUp).Row 'derniere ligne de feuille BASE
        LGL.Activate 'Active le classeur de référence
        
        For Each o In LG.Range("B3:B1000") 'Pour chaque cellule
            I = o.Row 'noter le N° de ligne
            Z1 = o.Value 'mémoriser la valeur de la cellule
            Z2 = LG.Cells(I, 6).Value 'et celle de né le
            Z3 = LG.Cells(I, 7).Value 'et celle de décédé le
            Z4 = LG.Cells(I, 4).Value ' et celle de démission
            'cherche Z1 dans With...
            Set c = B.Range("A2:A1000").Find(Z1, LookIn:=xlValues, LookAt:=xlWhole)
            
            If c Is Nothing Then 'Si pas trouvé memoriser le n° de ligne
                Y2 = Z2 > 10 'si né le et superieure a 10
                Y4 = Z4 = 0 'si il n'a pas démissioné
                Y6 = Z3 < 10 'Si decede le est inferieur à 10
                If Y2 And Y4 And Y6 Then
                    'copie la valeur de la ligne apres la derniere ligne sur base
                    B.Cells(iLRB + 1, 1).Value = LG.Cells(I, 2).Formula
                    B.Cells(iLRB + 1, 2).Value = LG.Cells(I, 6).Formula
                    iLRB = iLRB + 1
                           
            Else 'Si trouvé mémorise le N° de ligne
                   Y1 = Z3 < 10  'si décédé le et inférieure a 10
                   Y3 = Z4 = 0 'si il n'a pas démissioné
                    If Y1 And Y3 Then
                    B.Cells(I, 1).Interior.ColorIndex = 45 'Colore la cellule
                   FirstRow = c.Row
                    End If
                    End If
                 
                 Do
                    Set c = .FindNext(c) 'cherche l'occurrence suivante
                Loop While Not c Is Nothing And c.Row <> FirstRow '...Tant qu 'on n'est pas revenu à la ligne de départ
                'réinitialise la variable avant de changer de...
                FirstRow = ""
                '...cellule de référence (o) suivante
            End If
        Next
    
    For I = iLRB To 2 Step -1    'de la derniere ligne a la 1 er
        If B.Cells(I, 1).Interior.ColorIndex = 45 Then 'si la cellule  est orange
            B.Range("A" & I & ":" & "B" & I).ClearContents 'effacer les colonne A à B
            B.Range("D" & I & ":" & "U" & I).ClearContents 'effacer les colonne D à U
            B.Cells(I, 1).Interior.ColorIndex = xlNone 'effacer la couleur
        End If
        
        If B.Cells(I, 4) = "" Then
        B.Range("A" & I).Interior.Color = 65535 'colorer la celulle en jaune
        End If
     Next
    
    'faire le tri du tableau base par nom sur la colonne A
    B.Sort.SortFields.Clear
    B.Sort.SortFields.Add Key:=Range("A2:A1000"), _
                          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
   With B.Sort
        .SetRange Range("A1:U1000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
    End With
    B.Range("$V$1:$V$1000").AutoFilter Field:=1, Criteria1:="<>" 'filtre crit 1
    B.Protect Password:="beatrice", DrawingObjects:=False, Contents:=True, Scenarios:= _
              False, AllowFormattingColumns:=True, AllowFormattingRows:=True, _
              AllowFiltering:=True
        
    Application.ScreenUpdating = True

End Sub

Questions :
Set c = B.Range("A2:A1000").Find(Z1, LookIn:=xlValues
et
Set c = .FindNext(c)

avec le with fonctionnait en .find...... alors que maintenant il renvoie référence incorrecte ou non qualifier et je ne comprend pas pour le findnext
et du coup le set c = est il bon comme çà ou est ce que la déclaration du "c" est mal faite.

quand je publie du code des lignes sont en rouge cela est il normal ou il y à des erreurs.


Merci de ton aide et bonne soirée:bounce:








 

zeb

Modérateur
Salut,

Cette ligne ne devrait pas fonctionner :
Code:
c = B.Range("A2:A1000")
Il manque un Set devant.

Ton .FindNext doit être associé à une zone. A priori, la même que le .Find.
Donc :
Code:
c = B.Range("A2:A1000").Find(Z1, LookIn:=xlValues
...
Set c = B.Range("A2:A1000").FindNext(c)

----------------------

Si ton code était en rouge, c'est parce que tu écrivais ton code en CPP (C/C++) et pas en VB ! (regarde le BB code que j'ai modifié)
 

bebobe

Nouveau membre
Bonsoir Zeb et merci de ton retour.

je viens de finaliser ma macro, mais un peu différemment de la dernière posté et en gardant à l'esprit tes différentes remarque précédentes.
De plus j ai fait un emprunt a un (ou peut être 2 ou 3) de tes anciens postes qui mon beaucoup aidé.

Rappelle des effet chercher
-Parcourir la liste A pour chercher les différences dans la liste B
(retirer les décédé, les démissions, et rajouter les nouveaux dans la liste B )
-Nettoyer la liste B et la réorganiser.
-Parcourir la liste B et comparer avec la A pour enlever les Noms n’étant plus dans la A

Voici ma macro final.

Code:
Option Explicit

Sub Mise_a_jour_composition_AT3()

    Dim o As Range
    Dim c As Range
    Dim c1 As Range
    Dim FirstRow As String
    Dim I As Long
    Dim I1 As Long
    Dim trouve As Boolean
    Dim iLRB As Integer
    Dim LGL As Workbook
    Dim CAT As Workbook
    Dim LG As Worksheet
    Dim B As Worksheet
    Dim Y As Boolean, Y1 As Boolean, Y2 As Boolean, Y3 As Boolean, _
        Y4 As Boolean, Y5 As Boolean, Y6 As Boolean, Y7 As Boolean
    Dim Z1 As Variant, Z2 As Long, Z3 As Variant, Z4 As Variant

    Workbooks.Open Filename:=ThisWorkbook.Path & "\composition AT.xlsm", Local:=True

    Set LGL = Workbooks("Le grand Livre.xlsm")
    Set LG = LGL.Worksheets("Le grand livre")
    Set CAT = Workbooks("composition AT.xlsm")
    Set B = CAT.Worksheets("BASE")
    Set c1 = B.Range("A1:A1000")

    Application.ScreenUpdating = False
    LG.Unprotect Password:=""
    B.Unprotect Password:=""
    B.Range("$V$1:$V$10002").AutoFilter Field:=1    'enleve le filtre
    iLRB = B.Cells(1000, 1).End(xlUp).Row    'derniere ligne de feuille BASE
    LGL.Activate    'Active le classeur de référence

    For Each o In LG.Range("B3:B1000")    'Pour chaque cellule
        I = o.Row    'noter le N° de ligne
        Z1 = o.Value    'mémoriser la valeur de la cellule
        Z2 = LG.Cells(I, 6).Value    'et celle de né le
        Z3 = LG.Cells(I, 7).Value    'et celle de décédé le
        Z4 = LG.Cells(I, 4).Value    ' et celle de démission
        
         'cherche Z1 dans With...
        Set c = B.Range("A1:A1000").Find(Z1, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            FirstRow = c.Row
            Do
                Y1 = Z3 > 10  'si décédé le et inférieure a 10
                Y3 = Z4 <> 0   'si il n'a pas démissioné
                Y7 = Z4 = "Retirée"    'si demission retirée
                Y5 = Z1 = ""    'si cellule egale rien
                If Y5 Or Y7 Then    'si oui rien

                ElseIf Y1 Or Y3 Then
                    B.Cells(c.Row, 1).Interior.ColorIndex = 45    'Colore la cellule
                End If
            Loop While Not c Is Nothing And c.Row <> FirstRow    '...Tant qu 'on n'est pas revenu à la ligne de départ
            'réinitialise la variable avant de changer de...
            FirstRow = ""
            '...cellule de référence (o) suivante
        Else
            Y2 = Z2 <> 0    'si né le et superieure a 10
            Y4 = (Z4 = 0) Or (Z4 = "Retirée")    'si il n'a pas démissioné
            Y5 = Z1 <> "" And Not IsDate(o.Value)    'si la valeur different de rien et pas une date
            Y6 = Z3 < 10    'Si decede le est inferieur à 10
            If Y2 And Y4 And Y5 And Y6 Then
                'copie la valeur de la ligne apres la derniere ligne sur base
                B.Cells(iLRB + 1, 1).Value = LG.Cells(I, 2).Value
                B.Cells(iLRB + 1, 2).Value = LG.Cells(I, 6).Value
                iLRB = iLRB + 1
            End If
        End If
    Next

    'recherche des noms en trop dans compositin AT et supression
    For Each c1 In B.Range("A2:A1000")
        trouve = False
        For Each Z1 In LG.Range("B3:B1000")
            If Z1 = c1.Value Then
                trouve = True
                Exit For
            End If
        Next
        If Not trouve Then
            Y1 = Z3 > 10
            Y3 = Z4 <> 0
            If Y1 Or Y2 Then
            Else
                B.Range("A" & c1.Row & ":" & "B" & c1.Row).ClearContents
                B.Range("D" & c1.Row & ":" & "U" & c1.Row).ClearContents
            End If
        End If
    Next

    For I1 = iLRB To 2 Step -1    'de la derniere ligne a la 1 er

        If B.Cells(I1, 1).Interior.ColorIndex = 45 Then    'si la cellule  est orange
            B.Range("A" & I1 & ":" & "B" & I1).ClearContents    'effacer les colonne A à B
            B.Range("D" & I1 & ":" & "U" & I1).ClearContents    'effacer les colonne D à U
            B.Cells(I1, 1).Interior.ColorIndex = xlNone    'effacer la couleur
        End If
    Next

    'faire le tri du tableau base par nom sur la colonne A
    B.Sort.SortFields.Clear
    B.Sort.SortFields.Add Key:=Range("A2:A1000"), _
                          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With B.Sort
        .SetRange Range("A1:U1000")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
    End With

    'filtre avec critere 1 sur colonne V
    B.Range("$V$1:$V$1002").AutoFilter Field:=1, Criteria1:="<>"

    ' proctection feuille avec password
    B.Protect Password:="", DrawingObjects:=False, Contents:=True, Scenarios:= _
              False, AllowFormattingColumns:=True, AllowFormattingRows:=True, _
              AllowFiltering:=True


   End Sub

Voila elle fonctionne suite à plusieurs essais, si tu a des commentaires ou des remarques elles seront le bien venu.

Ci joint les 2 excel de testes sans macro.

[strike]
[/strike]

2 petits questions si tu as le temps :

- peut ton faire le .sort.sortfield plus court que la et sans le with, dans ce cas de quel manière.

- peut ton mettre plusieurs propriétés sur une même ligne (ex: mafeuille.range ("a1").font .Name = "Calibri" .FontStyle = "Gras" .Size = 11)

merci pour l aide apporter et bonne continuation à toi.

 

zeb

Modérateur
Tu tries ta feuille (Worksheet.Sort) en spécifiant une petite zone et d'autres paramètres.
Code:
B.Sort.SortFields.Clear
B.Sort.SetRange Range("A2:U1000")
B.Sort.SortFields.Add Key:=Range("A2:A1000")
B.Sort.Apply

Bof.

Pour faire plus simple, je te propose de trier la zone (Range.Sort), directement !
Code:
B.Range("A2:U1000").Sort key1:=Columns("A")

:sol:
 

bebobe

Nouveau membre
;)Bonjour Zeb:wahoo:,

:bounce: :bounce: :bounce: :bounce: Question Résolue :bounce: :bounce: :bounce: :bounce:

Les liens http ont été éffacés, ai-je commise une erreure sur la façon de les mettres
Merci de ton retour et aide sur cette macro bonne continuation à toi et peut être à une prochaine fois.

:ange: :ange: :ange:
 

zeb

Modérateur
:sol:

-----------------------------------------

Clique sur le bouton [Sélectionner comme meilleure solution] de ma moins mauvaise réponse.
Le sujet passera en "résolu" ;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 959
Membres
1 586 383
Dernier membre
potofeu
Partager cette page
Haut