Shibanubis
Nouveau membre
Bonjour à toi lecteur assidu porteur (je l'espère) d'une réponse salvatrice!
Je traine depuis quelques heures sur le net avec mes faibles notions en VB pour me sortir de mon pétrin :
J'ai un fichier excel avec 334 feuilles de 200 lignes chacune dont je dois vérifier si les valeurs sont en doublon ou non (oui c'est un amusement particulier).
Donc la première étape (que je vais utiliser avec une macro) est de prendre toutes les feuilles pour les réunir en une seule, puis de faire une mise en forme conditionnelle avec détection de doublons.
J'ai trouvé plusieurs codes qui me semblaient convenir pour finir sur celui qu'on trouve sur votre forum qui me semblait plus abordable
Code de base
Résultat :
Ce qui se passe c'est que la macro ne se décale pas après chaque copie, en gros je copie les 200 chiffres de la feuille 1 et le code ne déplace pas le curseur (n'est-ce pourtant pas le travail du paramètre offset?) ce qui fait que quand la macro colle les chiffres de la feuille 2, ils écrasent ceux qui étaient déjà là etc etc.
J'ai donc à la fin les 200 chiffres de la feuille 334 dans ma feuille nommée "Recap"
Comme je voulais comprendre j'ai codé pour qu'après chaque collage le curseur se déplace de 200 en 200 (oui c'est fait à la hussarde, mais c'était pour voir).
Résultat :
Le curseur se décale bien mais à un moment de l’exécution du code je pars hors des limites de ma variable "compteur" et la macro s'arrête à la ligne 32800, je croyais pourtant que le type Long dépassait cette valeur?
Donc qu'est-ce qui se passe avec mon code? J'ai un problème de compatibilité avec excel 2013 et ses anciennes versions?
Merci de votre aide!
Edit : Rajout d'éléments informatif en italique (description de la manière de faire et rajout de la valeur de ligne maximale de la seconde macro).
Je traine depuis quelques heures sur le net avec mes faibles notions en VB pour me sortir de mon pétrin :
J'ai un fichier excel avec 334 feuilles de 200 lignes chacune dont je dois vérifier si les valeurs sont en doublon ou non (oui c'est un amusement particulier).
Donc la première étape (que je vais utiliser avec une macro) est de prendre toutes les feuilles pour les réunir en une seule, puis de faire une mise en forme conditionnelle avec détection de doublons.
J'ai trouvé plusieurs codes qui me semblaient convenir pour finir sur celui qu'on trouve sur votre forum qui me semblait plus abordable
Code de base
Code:
Sub Macro1()
Dim ws As Worksheet
Dim ws_recap As Worksheet
Dim cell_source_1er As Range
Dim cell_source_der As Range
Dim cell_recap_cible As Range
Set ws_recap = Worksheets("recap")
For Each ws In Worksheets
If ws.Name <> ws_recap.Name Then
Set cell_source_1er = ws.Range("A3")
Set cell_source_der = cell_source_1er.SpecialCells(xlCellTypeLastCell)
Set cell_recap_cible = ws_recap.Range("A65536").End(xlUp).Offset(1, 0)
ws.Range(cell_source_1er, cell_source_der).Copy Destination:=cell_recap_cible
End If
Next
End Sub
Résultat :
Ce qui se passe c'est que la macro ne se décale pas après chaque copie, en gros je copie les 200 chiffres de la feuille 1 et le code ne déplace pas le curseur (n'est-ce pourtant pas le travail du paramètre offset?) ce qui fait que quand la macro colle les chiffres de la feuille 2, ils écrasent ceux qui étaient déjà là etc etc.
J'ai donc à la fin les 200 chiffres de la feuille 334 dans ma feuille nommée "Recap"
Comme je voulais comprendre j'ai codé pour qu'après chaque collage le curseur se déplace de 200 en 200 (oui c'est fait à la hussarde, mais c'était pour voir).
Code:
Sub Macro1()
Dim ws As Worksheet
Dim ws_recap As Worksheet
Dim cell_source_1er As Range
Dim cell_source_der As Range
Dim cell_recap_cible As Range
Dim compteur As Long
Dim i As Integer
i = 0
compteur = 0
Set ws_recap = Worksheets("recap")
For Each ws In Worksheets
If ws.Name <> ws_recap.Name Then
compteur = 1 + 200 * i
Set cell_source_1er = ws.Range("A3")
Set cell_source_der = cell_source_1er.SpecialCells(xlCellTypeLastCell)
Set cell_recap_cible = ws_recap.Range("A" & compteur)
ws.Range(cell_source_1er, cell_source_der).Copy Destination:=cell_recap_cible
i = i + 1
End If
Next
End Sub
Résultat :
Le curseur se décale bien mais à un moment de l’exécution du code je pars hors des limites de ma variable "compteur" et la macro s'arrête à la ligne 32800, je croyais pourtant que le type Long dépassait cette valeur?
Donc qu'est-ce qui se passe avec mon code? J'ai un problème de compatibilité avec excel 2013 et ses anciennes versions?
Merci de votre aide!
Edit : Rajout d'éléments informatif en italique (description de la manière de faire et rajout de la valeur de ligne maximale de la seconde macro).