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.
Bonjour,
Pour supprimer la majorité des alertes c'est
Application.DisplayAlerts = FalseRemettre à =True aussitôt après.
Dim I, J, k, iColonne, iLine, iLineEDI, iLineTri, iLineDoublons, iLinePubEdi, iLinePubEdiTemp As IntegerSeule 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 Suberic
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 SubPar 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