Mauvais copier-coller (alors que les précédents sont ok)

Bonjour.

Dans ma macro, je fais des copier coller de plages filtrées qui s'ajoutent les unes après les autres (à l'aide d'une boucle).

Tout fonctionne parfaitement jusqu'à la dernière sélection qui, elle, génère un message d'erreur 1004 et une zone copier et collage différente.

Pourtant la même ligne a fonctionné 11 fois avant, sans problèmes.

Je ne comprends pas bien trop pourquoi.

Enfin, je souhaite supprimer une sheet et systématiquement, je me retrouve avec le message d'erreur suivant:

"vous ne pouvez pas annuler la suppression de feuilles, car il est possible que vous supprimiez certaines données etc..."

En même temps, il y a de fortes chances que les feuilles à supprimer contiennent des données et c'est pour ça que je les supprime.

Y a t-il un moyen de faire en sorte que ce message d'erreur n'apparaisse plus.

J'ai déjà tenté des manips trouvées sur internet, mais rien n'y fait.

L'idéal est d’exécuter la macro "TriEDI" dans le fichier xlsm joint.

Merci d'avance pour vos contributions.

Cordialement.

16vba-forum.xlsm (111.38 Ko)

Bonjour,

Pour supprimer la majorité des alertes c'est

Application.DisplayAlerts = False

Remettre à =True aussitôt après.

Dim I, J, k, iColonne, iLine, iLineEDI, iLineTri, iLineDoublons, iLinePubEdi, iLinePubEdiTemp As Integer

Seule la dernière valeur est Integer, les autres sont Variant. Il faut toutes les typer.

Et integer est un peu court... Utilise systématiquement As Long pour les variables entières.

Sinon ça me parait un peu lent et usine à gaz.

Sous toutes réserves ça ne fait pas pareil ça ?

Sub TriEDI2()
' Macro qui permet de classer tous les EDI dans l'ordre alphanumérique
    Dim iLine As Long
    Dim CSNEDES As Worksheet, PubEDI As Worksheet

    Set CSNEDES = Application.ActiveWorkbook.Worksheets("CSN-EDES")
    iColonne = CSNEDES.UsedRange.Columns.Count
    iLine = CSNEDES.UsedRange.Rows.Count
    CSNEDES.Range("E1").Value = "EQUIPMENT DESIGNATOR"
    CSNEDES.Range("G1").Value = "Code RDI"
    CSNEDES.Range("H1").Value = "NumEDI"
    CSNEDES.Range("I1").Value = "GEO LOC"
    CSNEDES.Range("J1").Value = "FIG/ITEM"
    CSNEDES.Range("J2:J" & iLine).Value = Evaluate("=B2:B" & iLine & "&""-""&" & "C2:C" & iLine & "&""""&" & "D2:D" & iLine)
    ' Je ne la comprends pas cette méthode evaluate ! Je veux juste concaténer " colonnes entières dans faire de boucle

    Application.ActiveWorkbook.Worksheets.Add.Name = "PubEDI"
    Set PubEDI = Application.ActiveWorkbook.Worksheets("PubEDI")
    CSNEDES.Range("A:J").Sort Key1:=CSNEDES.Range("G2"), Order1:=xlAscending, _
    Key2:=CSNEDES.Range("H2"), Order2:=xlAscending, Header:=xlYes
    CSNEDES.[E1].Resize(iLine).Copy PubEDI.[A1].Resize(iLine)
    CSNEDES.[I1:J1].Resize(iLine).Copy PubEDI.[B1:C1].Resize(iLine)
End Sub

eric

Bonsoir Éric.

En premier lieu, je tenais à te remercier de t'être penché sur mon cas.

C'est vrai que comparé à mon usine à gaz, le tien semble incroyablement plus efficace et light !

Il manque juste le tri croissant pour chaque valeur du filtre (c'est pour cela qu'il y avait une sheet doublons qui recense toutes les valeurs que comportera le filtre et d'où la boucle).

Parce que sinon les équipements designators ne sont pas triés par ordre croissant.

Je ne comprends d'ailleurs pas pourquoi excel trie les valeurs dans l'ordre du premier digit sans tenir compte de l'ordre croissant numérique.

En gros, je ne veux pas:

C1

C1039

C1040

C1041

C1042

C2

C236

C259

C2675

C3

C35

C456

mais

C1

C2

C3

C35

C236

C259

C456

C1039

C1040

C1041

C1042

C2675

D'où l'usine à gaz.

Par contre, ça ne me dit pas pourquoi mon copier-coller ne fonctionne pas.

Si je remets ma boucle, je me retrouve avec mon problème de copier-coller et ça m’intéresserait fortement de savoir pourquoi ça ne fonctionne pas. Et même si je ne l'utilise pas, j'aimerais bien comprendre ce qui ne va pas.

Et au regard du nombre d'étoiles sur ton profil et du mien, nul doute que tu les a gagnées en allant, tout là-haut dans le firmament, les décrocher.

Et c'est cette "hauteur" qui permet le discernement, le génie pour faire des macros efficaces et épurées...

Moi je suis encore tout en bas...

À chaque nouvelle macro, j'ai l'impression de devoir construire l'étoile de la mort en légo avec les briques de légo pour enfants de 5 ans. Je n'ai pas les légos techniques pour faire mon étoile de la mort et du coup je me débrouille avec ce que j'ai.

Chaque méthode est une recherche sur le net...

Ça viendra un jour, j'espère.

Bonne soirée.

Bonjour,

Ah oui, j'ai oublié de remplir G:H :

Sub TriEDI2()
' Macro qui permet de classer tous les EDI dans l'ordre alphanumérique
    Dim iLine As Long
    Dim CSNEDES As Worksheet, PubEDI As Worksheet
    Dim datas, result(), i As Long, lig As Long

    Set CSNEDES = Application.ActiveWorkbook.Worksheets("CSN-EDES")
    iColonne = CSNEDES.UsedRange.Columns.Count
    iLine = CSNEDES.UsedRange.Rows.Count
    CSNEDES.Range("E1").Value = "EQUIPMENT DESIGNATOR"
    CSNEDES.Range("G1").Value = "Code RDI"
    CSNEDES.Range("H1").Value = "NumEDI"
    CSNEDES.Range("I1").Value = "GEO LOC"
    CSNEDES.Range("J1").Value = "FIG/ITEM"
    CSNEDES.Range("J2:J" & iLine).Value = Evaluate("=B2:B" & iLine & "&""-""&" & "C2:C" & iLine & "&""""&" & "D2:D" & iLine)
    ' Je ne la comprends pas cette méthode evaluate ! Je veux juste concaténer " colonnes entières dans faire de boucle

    datas = [E2].Resize(iLine - 1).Value
    ReDim result(1 To iLine - 1, 1 To 2)
    For lig = 1 To UBound(datas)
        For i = 1 To Len(datas(lig, 1))
            If IsNumeric(Mid(datas(lig, 1), i, 1)) Then
                result(lig, 1) = Left(datas(lig, 1), i - 1)
                result(lig, 2) = CLng(Mid(datas(lig, 1), i))
                Exit For
            End If
        Next i
    Next lig
    [G2].Resize(iLine - 1, 2) = result

    Application.ActiveWorkbook.Worksheets.Add.Name = "PubEDI"
    Set PubEDI = Application.ActiveWorkbook.Worksheets("PubEDI")
    CSNEDES.Range("A:J").Sort Key1:=CSNEDES.Range("G2"), Order1:=xlAscending, _
                              Key2:=CSNEDES.Range("H2"), Order2:=xlAscending, Header:=xlYes
    CSNEDES.[E1].Resize(iLine).Copy PubEDI.[A1].Resize(iLine)
    CSNEDES.[I1:J1].Resize(iLine).Copy PubEDI.[B1:C1].Resize(iLine)
End Sub

Par contre, ça ne me dit pas pourquoi mon copier-coller ne fonctionne pas.

Moi je me poserai plutôt la question de savoir pourquoi les premiers sont passés.

En général il refuse si tu dépasses la dernière ligne et toi tu copies des colonnes entières que tu colles sur une ligne x (?).

eric

Rechercher des sujets similaires à "mauvais copier coller que precedents"