Erreur macro incompréhensible

Bonjour,

je dois travailler depuis trop de temps sur ma macro et je ne trouve pas l'erreur ...

voici le code :

Sheets("Importation").Select
If Cells.Find("*") Is Nothing Then
MsgBox "Merci de ne pas laisser l'onglet d'importation vide"
  Sheets("Intervention").Select
Else

Sheets("Feuil1").Visible = True

Dim Vligne1, Vligne2  As Integer
Dim Vcode As String

Sheets("Importation").Select
Range("D1").Select

5 If ActiveCell.Value <> "Nom du module" Then

            If ActiveCell.Offset(0, 20).Range("A1").Value = "Fin de la feuille" Then
                GoTo 100
            End If

    n = n + 1

    Range("D" & n).Select

    GoTo 5
  Else

            If ActiveCell.Offset(0, 3).Range("A1").Value = "recuperation1" Or _
                ActiveCell.Offset(0, 3).Range("A1").Value = "recuperation2" Or _
                ActiveCell.Offset(0, 3).Range("A1").Value = "recuperation3" Or _
                ActiveCell.Offset(0, 3).Range("A1").Value = "recuperation4" Then

                Vcode = ActiveCell.Offset(0, 3).Range("A1").Value

                n = n + 3
                Range("D" & n).Select

                Do While ActiveCell.Value = "" Or ActiveCell.Value = "Identifiant"
                    n = n + 1

                    Range("D" & n).Select

                Loop

                Vligne1 = ActiveCell.Row

                Do While ActiveCell.Value <> "Nom du module" And Not ActiveCell.Offset(0, 20).Range("A1").Value = "Fin de la feuille"
                    n = n + 1

                    Range("D" & n).Select
                Loop

                Vligne2 = ActiveCell.Row - 1

                Range("D" & Vligne1 & ":AO" & Vligne2).Copy

                Sheets("Feuil1").Select
                If Range("B1").Value = "" Then

                   Range("B1").Select
                   ActiveSheet.Paste
                Else

                    Range("B1").Range("A1:L1").End(xlDown).Select
                    ActiveCell.Offset(1, 0).Range("A1").Select
                    ActiveSheet.Paste
                End If

                ActiveCell.Offset(0, -1).Range("A1:A" & Vligne2 - Vligne1).Value = Vcode

                Range("A1").End(xlDown).Select

                Do While ActiveCell.Value = Vcode And Not ActiveCell.Address = "$A$1"
                    If ActiveCell.Offset(0, 1).Range("A1").Value = "" Then

                        ActiveCell.Rows("1:1").EntireRow.Delete Shift:=xlUp
                    End If
                    ActiveCell.Offset(-1, 0).Range("A1").Select
                Loop

                Sheets("Importation").Select

                GoTo 5
            Else
                n = n + 3
                Range("D" & n).Select

                GoTo 5
    End If
End If

100
Sheets("Feuil1").Select

Range("C:N,P:P,R:X,Z:AD,AF:AM").Delete

With Range("A:F")
Cells.SpecialCells(xlCellTypeConstants).Select
End With

    Selection.Copy
    Sheets("Intervention").Select
Range("A65536").End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=False
    Sheets("Feuil1").Select
    Cells.Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets("Feuil1").Select
    ActiveWindow.SelectedSheets.Visible = False

Mon problème : lors de certaines importations j'ai un message d'erreur. Je pense que cela est dû au fait qu'il peut y avoir dans mon fichier tous les points (recuperation 1, 2, 3 et 4), comme un seul des points, mais parfois aucun. On peut aussi trouver plusieurs fois le même point avec des infos différentes sous chacun...

-> j'espère être assez clair...

Je ne vois pas dans mon code a quel moment j'ai oublié de spécifier cela.

De plus, la phrase "Fin de la feuille", se trouve bien en bas de toutes les copies, seulement, lorsque ma macro bug la macro tourne jusqu'en bas de la feuille au lieu de s'arrêter à cette phrase...

Arrivez vous à voir mon erreur?

Merci d'avance,

Bonsoir,

Je ne sais si cela sera long, mais vous pouvez mettre un point d'arrêt sur l'exécution de votre macro.

Un clic gauche sur le coté gauche de la fenêtre de code et un point rouge apparaît.

Lors de l'exécution de la macro, elle s'arrêtera là où se trouve le point d'arrêt (c'est fait pour ça...) et il vous suffit de faire [F8] pour dérouler pas à pas, avec le curseur de la souris vous pouvez vérifier les valeurs des variables (elles s'affichent dans des infos bulles).

Alors peut-être allez vous trouver d'où vient l'erreur...

@ bientôt

LouReeD

Bonsoir,

Mon problème est bien le suivant, sur tous les fichiers que je test, ma macro fonctionne, cependant, seul 1 fichier fait de la résistance (j'en suis désolé, il est resté au travail, je ne l'ai pas actuellement avec moi).

Je veux donc savoir où j'ai pêché et quelle variable j'ai pu oublier...

Je mets en pièce jointe un exemple qui fonctionne.

Cependant, voici un résumé de ce qu'on peut trouver.

Il y a 3 groupes : "eco", "default" et "return".

Ces 3 groupes rassemblent des modules nommés recuperation, ils sont au nombre maximal de 10 ("recuperation1", "recuperation2" ...). Pour mon importation, seuls les 4 premiers sont importants.

La difficulté que je rencontre réside dans le fait que :

1. les 4 recuperations qu'il me faut peuvent être divisés dans les 3 groupes (donc 3 "recuperation1" à importer)

2. le nombre de lignes entre le nom du module et les données peut varier selon les fichiers

3. il peut très bien y avoir les 10 recuperations dans les 3 groupes, mais également, aucun recuperation qui m'interesse (ni 1, 2, 3 ou 4)

J’espère qu'avec l'exemple ce sera plus clair...

Re bonsoir,

Et bien c'est un peu compliqué, mais avec [F8] j'ai saisi ce que vous cherchiez à faire

L'erreur est du (lorsqu'il n'y a pas de récupération1 2 3 ou 4 à l'instruction suivante :

Cells.SpecialCells(xlCellTypeConstants).Select

S'il n'y a pas de cellule avec des valeurs, alors il y a erreur...

La solution ? Elle est dans le fichier joint

J'ai rajouter aussi le screenUpdating en False et true afin "d'aller plus vite" et éviter de faire scintiller l'écran...

@ bientôt

LouReeD

Nota : j'ai fais un test sans récupération 1 2 3 et 4 et avec plusieurs fois récupération 1 2 3 4 et tout marche bien...

Sinon au niveau du code, il y a peut être trop (beaucoup trop) de select

Sheets(1).select

range("A1").select etc...

A savoir, on peut très bien travailler sur une feuille sans la sélectionner tout comme les cellules :

on est sur la feuille 1 et on veut mettre "Loureed" dans la cellule A1 de la feuille 2 :

Sheets("Feuil2").select

Range("A1").select

Selection.value ="LouReeD"

Ceci est égal à : Sheets("Feuil2").cells(1,1).value = "LouReeD"

et tout cela sans sélection, donc moins d'emprise au niveau de la mémoire...

@ bientôt

Qu'il est fort le LouReeD

Bonsoir,

merci infiniment, je vais tester cela dès mon retour au travail.

Je reviens vers vous dès que possible pour clôturer le sujet.

En tout cas, j'ai lu vos notes dans la macro et je vous en remercie, cela va m'aider pour comprendre mes futurs bugs dans mes futures macros.

Bonne soirée,

Bonjour à tous,

désolé pour le délais de réponse mais je voulais tester plusieurs fichiers avant de valider le bon ou le mauvais fonctionnement de la macro.

Tous les fichiers testés ont parfaitement marché.

Il y en a un seul sur tous qui a fait planter la macro, et je n'y trouve pas de réponse (j'ai pourtant testé le F8) mais je pense que ca me dépasse un peu

Je mets en pièce jointe le fichier incriminé.

De plus, j'ai remarqué que de nombreuses lignes ressortent en double.

Est il possible de les filtrer pour ne copier qu'une ligne par module?

Les doublons entre groupes (= "eco", "default" et "return") sont pratiques mais pas dans un même module (recuperation1, recuperation2...).

Merci d'avance,

Bonne journée,

Bonjour, bonsoir

pour l'erreur c'est par ici :

                    Range("D" & Vligne1 & ":AO" & Vligne2).Copy

                    Sheets("Feuil1").Select
                    If Range("B1").Value = "" Then

                       Range("B1").Select
                       ActiveSheet.Paste
                    Else

                        Range("B1").Range("A1:L1").End(xlDown).Select
                        ActiveCell.Offset(1, 0).Range("A1").Select
                        ActiveSheet.Paste
                    End If

                    ActiveCell.Offset(0, -1).Range("A1:A" & Vligne2 - Vligne1).Value = Vcode

la partie surlignée est fausse : vous demandez de chercher vers le bas (Down) le dernière cellule pleine, mais comme vous partez de B1 plein vous avez en résultat la dernière cellule de la colonne B de sélectionnée, du coup la sélection de la cellule une ligne en dessous provoque une erreur car vous cherchez à atteindre une cellule hors limite (qui n'existe pas !)

donc correction avec :

                    Else
                        ' l'erreur était là
                        Range("B65536").End(xlUp).Offset(1, 0).Select
                        ActiveSheet.Paste
                    End If

là on part d'en bas (65536 ligne pour Excel 2003 et -, sinon 1048576 pour Excel 2007 et +) et on remonte pour trouver la dernière cellule plein et tout de suite on décale d'une ligne vers le bas donc on sélectionne la première cellule vide de la colonne B.

Avez vous excel 2007 ou plus ?

car le fichier joint est en 2007.... je vous met la version 2003

@ bientôt

LouReeD

Nota pour la mise en forme du tableau final, je l'ai transformé en tableau Excel.

Pour ce qui est des doublons, merci d'effectuer une importation est signaler sur la feuille ce que vous aimeriez obtenir

Re - bonsoir

je vous mets en pièce jointe le fichier avec le rendu final.

Dans le fichier d'importation, pour la récupération4 (N° 27, ticket 10) il y a 33 modification faites dessus, ce qui correspond à 33 lignes sur le tableau d'intervention lors du lancement de la macro.

Une seule ligne suffit.

En gros, si on a plusieurs fois le même N° et ticket pour une même récupération, alors on peut supprimer les doublons.

Est ce plus clair?

Merci encore,

bonne soirée,

Et bien voilà, ça commence à ressembler à un truc plutôt bien, non ?

@ bientôt

LouReeD

Rechercher des sujets similaires à "erreur macro incomprehensible"