Code qui ne fonctionne qu’une fois sur deux

Bonjour a tous,

J’ai créé un code permettant de copier les informations d’une première feuille et de les coller sur la prochaine ligne vide d’une deuxième feuille.

Malheureusement le code ne marche qu’une fois sur deux et m’affiche systématiquement la même erreur : erreur 1004 méthode range pastespecial.

Je ne peux pas copier le code car j’utilise un ordinateur ou il n’y a pas internet et j’écris ce message depuis mon téléphone. Voici donc des photos du code en question (je sais il est à raccourcir je suis une novice en VBA, mais j’aimerais déjà qu’il marche ;))

Merci de votre aide.

bc23c1a1 6f84 4813 b404 b52adb1efed0

Bonjour,

Tu veux qu'on retouche l'image avec photo shop ?

deplus l'image tourne en même temps que le téléphone !

Bonjour,

Non ne vous embêtez pas, si vous trouvez quelle ligne à un problème signalez moi le.

Je ne sais pas comment faire pour changer ?

Je pense vous devez bloquer la rotation automatique de votre téléphone.

Bonjour,

Dire qu'avec la technologie, on peut même faire un copié collé du code ! Et même le mettre en forme avec le bouton </> !
Qui sait, avec un peu de chance, ça pourrait permettre à quelqu'un d'apporter son aide...

Bonjour,

Malheureusement comme expliquer dans mon message je n’ai pas internet sur l’ordinateur.

J’ai créé ce forum depuis mon téléphone.

Le partage de connexion avec le téléphone ne permettrait pas à minima de récupérer le code ?

Impossible c’est un ordinateur d’entreprise protégé.

Mais afin de vous aider à y voir plus clair j’ai recopié le code sur mon téléphone: le voici

Sub EnrPannes()
' Macro enregistrée le 31/08/16 par Valérie PARISOT
Dim essai As Integer

'Application.ScreenUpdating = False

    resultat = Range("M2").Value

    Sheets("saisie panne").Select

 'Msg car pas tout rempli
     If resultat = 0 Then
     MsgBox ("Vous n'avez pas tout rempli ou rempli correctement. Veuillez recommencer.")

     Exit Sub
     End If

     If resultat = 1 Then

     Sheets("saisie panne").Unprotect

        Sheets("Saisie panne").Range("A26:M26").Copy
    Sheets("Fichier Panne").Select

        ActiveSheet.Unprotect

        Range("b1").Select
        Cells.Find(What:="Vide", After:=ActiveCell, LookIn:=xlValues, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True).Activate

   Selection.PasteSpecial Paste:=xlValues
        With Selection
            .Borders(xlEdgeBottom).LineStyle = xlContinuous
            .Borders(xlEdgeTop).LineStyle = xlContinuous
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
            .WrapText = True
        End With
        If Cells(Selection.Row - 1, 6).Interior.ColorIndex = xlNone Then
            Selection.Interior.ColorIndex = 15
        Else: Selection.Interior.ColorIndex = xlNone
        End If
        Sheets("Fichier Panne").Select
        Rows("2:12500").Select
        Selection.Rows.AutoFit

        ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
        False

    Sheets("saisie panne").Select
        Range("i15,E8,C8,G21").ClearContents
        Range("B15,D16,E16,G15,H15,h17,i18") = "1"

    If ThisWorkbook.ReadOnly = False Then
        ThisWorkbook.Save
    Else: MsgBox "le fichier est en lecture seule, aucun enregistrement ne sera effectué:", vbCritical
    End If

    Application.ScreenUpdating = True
End If
End Sub

 

Quelques modifications mineures :

Sub EnrPannes()
'Macro enregistrée le 31/08/16 par Valérie PARISOT

Dim resultat As Integer, Rech As Range

Application.ScreenUpdating = False

resultat = Range("M2").Value 'Quelle feuille ?
With Sheets("saisie panne")
    'Msg car pas tout rempli
     If resultat = 0 Then
        MsgBox ("Vous n'avez pas tout rempli ou rempli correctement. Veuillez recommencer.")
        Exit Sub
     End If
     If resultat = 1 Then
        .Unprotect
        Sheets("Fichier Panne").Unprotect
        .Range("A26:M26").Copy
        Set Rech = Sheets("Fichier Panne").Cells.Find(What:="Vide", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True)
        If Not Rech Is Nothing Then
            With Rech
                .PasteSpecial Paste:=xlValues
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
                .Borders(xlEdgeTop).LineStyle = xlContinuous
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .WrapText = True
                If Sheets("Fichier Panne").Cells(.Row - 1, 6).Interior.ColorIndex = xlNone Then
                    .Interior.ColorIndex = 15
                Else: .Interior.ColorIndex = xlNone
                End If
            End If
            Sheets("Fichier Panne").Rows("2:12500").AutoFit
            Sheets("Fichier Panne").Protect DrawingObjects:=False, Contents:=True, Scenarios:=False
        End With
        .Range("I15,E8,C8,G21").ClearContents
        .Range("B15,D16,E16,G15,H15,H17,I18").Value = 1
        If ThisWorkbook.ReadOnly = False Then
            ThisWorkbook.Save
        Else: MsgBox "le fichier est en lecture seule, aucun enregistrement ne sera effectué:", vbCritical
        End If
    End If
End With

End Sub

En ce qui me concerne : impossible d'en faire plus sans fichier, ni sans comprendre la finalité exacte de la macro.

Je cherche en fait à copier une ligne de la feuille « Saisie panne » sur la prochaine ligne vide de la feuille « fichier panne ».

Afin d’archiver les pannes de l’entreprise.

Merci de votre aide.

Je vous suggère (si ça n'est pas déjà fait) d'utiliser des tableaux structurés.

2 avantages pour la macro :
- C'est plus simple de trouver la première ligne vide (où coller la nouvelle ligne)
- La mise en forme est automatiquement reportée (donc on ne s'en occupe pas par le biais de la macro)

21bc39b4 f42d 4cd7 9af8 d7eadbdc591e

La première feuille n’est en fait pas un tableau.

Afin de faciliter votre compréhension voici des captures d’écrans, c’est malheureusement tout ce que je peux fournir.....

d69823be 3ffe 434c b96d 151c91c73d1a

Mais la 2ème peut en devenir un. Plutôt que de mettre des lignes avec "Vide" dedans, autant dimensionner le tableau aux seules données complètes, et ajouter une ligne au besoin.

D’accord je vais essayer de comprendre les tableaux structurés alors.

Merci de votre aide.

Rechercher des sujets similaires à "code qui fonctionne fois deux"