XL 2010 [VBA] Code qui s'arrête tout seul - Need help

Florian M.

XLDnaute Nouveau
Bonjour à tous !

Je viens à vous aujourd'hui à bout de nerfs... après deux jours à plancher sur ce problème et à écumer les forums en tout genre, je n'ai toujours pas trouvé d'explication (même si j'ai un petite idée de la cause).

Je me suis fait une macro dont la fonction est simplement de prendre les données de plusieurs fichiers au format identique, et des les copier-coller dans un fichier unique (je vous ai mis un exemple en PJ). Pour faciliter mon "développement" j'ai pour habitude de me faire aussi une macro "Remise à Zéro" du fichier, pour les phases de tests où je lance la macro plusieurs fois d'affilé pour corriger les erreurs.

Mais bien qu'étant un code relativement simple, il s'arrête sans raison, sans message d'erreur, sans finir sa boucle...
2 problèmes répertoriés (tests effectués sur un autre PC, et les problèmes persistent) :
- lors de la copie des données, je veux faire une fusion de cellule pour de la mise en forme : une fois la fusion faite, le code s'arrête.
-----> si je désactive cette ligne, le code fonctionne parfaitement
- lors du lancement de la macro de RàZ, une fois un onglet traité la macro s'arrête
-----> j'ai testé la macro avec des données simples (un texte que j'ai étendu sur les colonnes et plusieurs lignes), et il fonctionne


Je soupçonne donc très grandement les cellules fusionnées d'être responsables de mes malheurs ! Auriez-vous déjà rencontré ce problème ? Y-a-t-il une solution ? Un moyen de contourner le problème ?

Les deux fichiers joint fonctionnent de la manière qui suit :
- Ouvrir le fichier "macro"
- Dans le premier onglet, cliquer sur le bouton "import DDV"
- Sélectionner le dossier dans lequel se trouve le fichier "data"

La macro s'exécute, et pour la RàZ du fichier (qui ne fonctionne pas normalement), cliquer sur le bouton "RàZ Outil"

Merci d'avance pour votre aide qui s'est toujours avérée précieuse et efficace

Bien à vous,

Florian
 

Pièces jointes

  • Lifetime_Computation_Tool_V0_light_macro.xlsm
    322.4 KB · Affichages: 43
  • Lifetime_Computation_Tool_V0_light_data.xlsx
    297.3 KB · Affichages: 40

Lone-wolf

XLDnaute Barbatruc
Bonjour florian

Pas sûr que ça marche, mais essaie comme ceci

Range(.Cells(deb_l + 1, 2), .Cells(Last_l, Last_col)).Select
Selection.Copy

À changer par
Range(.Cells(deb_l + 1, 2), .Cells(Last_l, Last_col)).MergeArea.Copy

Idem
.Cells(Line, 2).Select par .Cells(Line, 2).Paste
Range(.Cells(Line, 1), .Cells(Line + Nb_l - 1, 1)).Select par .Range("a1").Activate
 

Florian M.

XLDnaute Nouveau
Bonjour Lone Wolf, et merci pour ta réponse ! :)

Je ne comprends juste pas le "Range(.Cells(Line, 1), .Cells(Line + Nb_l - 1, 1)).Select par .Range("a1").Activate", pourquoi veux-tu que je fasse ce remplacement ?

Pour ce qui est des autres changements, cela me créé des erreurs... :/
 

Florian M.

XLDnaute Nouveau
Je ne selectionne pas une ligne, mais la première colonne des lignes ajoutée pour fusionner.
(toutes les lignes ajoutées ont le nom de l'équipement dans lequel elles sont, et je veux les fusionner pour ne pas avoir la même valeur à chaque ligne).
Par contre entre deux fichiers importés, le nom ne sera pas les même.
 

Lone-wolf

XLDnaute Barbatruc
Re

Quel interêt à sélectionner toute la colonne après la fusion des cellules?! :rolleyes:
Et au lieu de faire Copy - Paste. Un exemple

Range("a2:q" & derligne).Copy Range("a5")
Et là, pas de souci avec les cellules fusionnées.
 
Dernière édition:

Florian M.

XLDnaute Nouveau
Re

Quel interêt à sélectionner toute la colonne après la fusion des cellules?! :rolleyes:

Je ne vois pas de quoi tu parles... :/

Ce bout de code a pour fonction :
- chercher la dernière cellule du tableau (en vérifiant qu'il n'y ait pas de cellules fusionnées)
- coller les données du fichier/onglet traité au bon endroit
- selectionner les lignes collées (c'est à dire de la ligne "line" qui correpond à l'endroit où on a collé les données, à la ligne "line + Nb-l-1" avec Nb_l le nombre de lignes collées)
- fusionner les données (mais c'est ce qui coupe la macro sans raison, et c'est la raison de mon post ici)
- Remplier la colonne (ou cellule fusionnée) avec les données que je veux voir dedans.

A aucun moment je séléctionne toute une ligne ou toute une colonne.

Code:
                        With Classeurmaitre.Sheets(Sheet_name)
                            .Select
                            Line = .Cells(50000, 3).End(xlUp).Row + 1
                            Do While .Cells(Line, 3).MergeCells = True
                                Line = Line + 1
                            Loop
                            .Cells(Line, 2).Select
                            .Paste
                            Application.CutCopyMode = False
                            Range(.Cells(Line, 1), .Cells(Line + Nb_l - 1, 1)).Select
                            'Selection.merge
                            Selection.Value = product_name & Chr(10) & PN
                        End With
 

Lone-wolf

XLDnaute Barbatruc
Re

Ah Bon?! o_O

Alors explique moi ceci, par-ce que je suis nul :Range(.Cells(Line, 1), .Cells(Line + Nb_l - 1, 1)).Select

Regarde le fichier joint et explique moi la différence.
 

Pièces jointes

  • Classeur-exemple.xlsm
    18.4 KB · Affichages: 41

Florian M.

XLDnaute Nouveau
Re

Ah Bon?! o_O

Alors explique moi ceci, par-ce que je suis nul :Range(.Cells(Line, 1), .Cells(Line + Nb_l - 1, 1)).Select

Regarde le fichier joint et explique moi la différence.

Je ne comprends pas ton code, et c'est toi qui est là pour m'expliquer, non ? ;)

Pour ce qui est de mon code... grosso modo j'ouvre plusieurs fichiers identiques dans la forme, et onglets par onglet je copie colle un bloc de cellules des fichiers de data dans mon fichier synthèse.
Ensuite, je sélectionne la zone Cells( ligne_deb, 1ere_colonne); Cells(ligne_deb + nb_lignes_collées, 1ere_colonne), que je veux fusionner et y mettre une valeur.

C'est tout !
 

Florian M.

XLDnaute Nouveau
Oui je me doute, mais sans les .Select ça ne fonctionnait plus.
Peux-tu donc m'expliquer comment faire sans stp ? Je me considère débrouillard en VBA mais j'ai tout appris par moi même, je manque donc de beaucoup de choses en terme de connaissances et d'expertise ! :)

Sachant que mon besoin est : en partant d'un fichier, en ouvrir d'autres (les uns après les autres), et copier-coller des données onglet par onglet du fichier data au fichier synthèse.
Peux-tu faire ça sans select/activate ?
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re

Voici le code basic pour fusionner les cellules, ne sachant pas comment va continuer le tableau. Il faudra l'adapter pour les autres fichiers.

VB:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim plage As Range, derlig As Long, derl As Long, _
colDeb As Long, colFin As Long, i As Long

    Application.EnableEvents = False
    Application.ScreenUpdating = False

    derlig = Range("a" & Rows.Count).End(xlUp).Row
    Set plage = Range("a15:r" & derlig)

    On Error Resume Next
    Application.DisplayAlerts = False
    With Feuil2
        plage.Copy .Range("a15")
        derl = Range("a" & Rows.Count).End(xlUp).Row
        colDeb = 3
        colFin = 10
        If .Rows >= 18 Then
            For i = 18 To derl
                .Range(.Cells(i, colDeb), .Cells(i, colFin)).Merge
            Next i
        End If
    End With
    Feuil2.Columns.AutoFit
    Cancel = True
    Application.EnableEvents = True
End Sub
 

Pièces jointes

  • Classeur-exemple-V2.xlsm
    21.1 KB · Affichages: 46

Lone-wolf

XLDnaute Barbatruc
Bonjour Florian :), le Forum :)

J'ai bien dit qu'il fallait adapter le code que je t'ai montré. Si ce n'est pas toi qui à écrit l'ancien code, il faut t'adresser à la personne qu'il a fait. Moi comme d'autres, on ne peut y mettre les mains. Désolé de ne pas pouvoir t'aider d'avantage.
 

Florian M.

XLDnaute Nouveau
C'est moi qui ai fait le code, j'ai adapté ton code au mien, et je ne pense pas avoir fait d'erreur. Mais ça n'a fait que déplacer le problème initial que l'on a pas vraiment pu aborder : pourquoi le code s'arrête-t-il tout seul ? As-tu aussi ce problème en lançant la macro ? Ca a l'air d'être lié au merge (mais pas que), quelqu'un a-t-il déjà eu ce comportement irrationnel ?

Et de manière générale, quelqu'un d'autre a-t-il une idée ?

En tout cas merci beaucoup pour ton temps même si on n'a pas pu trouver de solution !
 

Discussions similaires

Réponses
93
Affichages
1 K

Statistiques des forums

Discussions
311 720
Messages
2 081 898
Membres
101 834
dernier inscrit
Jeremy06510