Sélectionner des cellules avec des variables Erreur 1004

Bonjour à tous,

Voici mon problème :

J'ai deux fichiers Excel : Fichier_1.xls et Fichier_2.xls. Le Fichier_1 comporte deux feuilles : Exploitation et Feuille_2. Le Fichier_2 ne comporte qu'une seule feuille : Données.

La feuille Exploitation rassemble des données de la feuille Données (laquelle est mise à jour quotidiennement).

La feuille_2 possède des graphes dont les données sont issues de la feuille Exploitation. A coté des graphes j'ai mis un bouton de commande qui permet de mettre la feuille Exploitation à jour à partir du Fichier_1.

Voici la partie du code du bouton qui me pose souci :

Private Sub CommandButton3_Click()

Dim D As Long
Dim E As String
Dim P1 As Range

' On ouvre le fichier
Workbooks.Open Filename:= _
        "SERVEUR\Fichier_2.xls"
    Sheets("Exploitation").Activate

    ' On recherche la ligne où l'expression "P1" se trouve qui sert de référence pour trouver toutes les données dans le tableau
    Sheets("Exploitation").Range("A4").Select

    With Worksheets("Exploitation").Range("A7:A20")
        'D = .Find("P1", LookIn:=xlValues).Column
        Set P1 = .Find(What:="P1", LookIn:=xlValues)
    End With

    If P1 Is Nothing Then
        MsgBox ("La case 'P1' dans le tableau du fichier n'a pas été trouvée. Veuillez vérifier l'état du tableau.")
        Exit Sub
    End If

    D = P1.Row

    ' On mémorise le numéro de la première semaine du tableau
    E = Worksheets("Exploitation").Cells(6, 2).Value

    ' On copie les valeurs des encours pour les plateaux P1 à P4
    Sheets("Exploitation").Range(Cells(D, 2), Cells(D + 3, 256).End(xlToLeft).Offset(0, -1)).Select
    Selection.Copy

End Sub

J'obtiens l'erreur "Erreur d'exécution '1004': Erreur définit par l'application ou par l'objet" à la ligne :

ctiveSheet.Range(Cells(D, 2), Cells(D + 3, 256).End(xlToLeft).Offset(0, -1)).Select

Quelqu'un pourrait-il m'éclairer?

Merci d'avance.

Bonjour

Tu auras cette erreur si dans la ligne D + 3 tu as soit la ligne vide, soit seulement la cellule en colonne A

Oui effectivement en plaçant un espion sur la valeur de D, on voit que cette variable est vide...

Merci pour la piste de recherche.

L'espion me donne "Expression non définie dans le contexte" et contexte "Feuil1.CommandButton1_Click".

Seulement le contexte dans lequel il devrait être définit est "Feuil1.CommandButton3_Click"

Sachant que la variable n'est définie que dans la Sub du bouton de commande 3, comment puis-je faire?

Merci

Bonjour

Etrange comme analyse

D est bien défini et initialisé

Dim D As Long
.
.
D = P1.Row   ' Initialisé suite à la recherche

Mais sans ton fichier avec l'erreur pas facile de trouver le pourquoi du comment

Bonjour,

Je m'aperçois en fait qu'il y a plein de fonctions qui ne fonctionnent plus. J'entends par là que j'avais tout fait et testé en local. Puis j'ai mis les fichiers sur notre serveur et c'est là que la macro me sort des messages d'erreur dans tous les sens.

Y a-t-il des précautions particulières quand les fichiers sources et celui qui possède la macro sont sur le réseau?

Sinon je ne peux poster les fichiers, ils sont bien trop gros et les données "sensibles".

D'avance merci.

Bonsoir,

Une idée en passant ...

As-tu testé cette écriture ?

    With Sheets("Exploitation")
        .Range(.Cells(D, 2), .Cells(D + 3, 256).End(xlToLeft).Offset(0, -1)).Select
    End With

A+

Bonjour,

Finalement j'y suis arrivé sans comprendre réellement le pourquoi du comment :

Dim CherchP1 as Range

Workbooks.Open Filename:= _
        "SERVEUR\Fichier_2.xls"
    Workbooks("Fichier_2.xls").Activate
    Sheets("Données").Activate

    ' On recherche la ligne où "P1" se trouve

    For Each CherchP1 In Sheets("Données").Range("A4:IV20").Cells
        If CherchP1 = "P1" Then D = CherchP1.Row: Exit For
    Next

    If CherchP1 Is Nothing Then
        MsgBox ("La case 'P1' dans le tableau du fichier Fichier_2.xls n'a pas été trouvée. Veuillez vérifier l'état du tableau.")
        Workbooks("Fichier_1.xls").Activate
        Sheets("Exploitation").Columns(C).Select
        Selection.Delete
        Sheets("Feuille_2").Activate
        Exit Sub
    End If

    ' On mémorise le numéro de la première semaine du tableau

    E = Worksheets("Données").Cells(6, 2).Value

    ' On copie les valeurs

    Sheets("Données").Range(Sheets("Données").Cells(D, 2), Sheets("Données").Cells(D + 3, 256).End(xlToLeft).Offset(0, -1)).Select
    Selection.Copy

Merci à Banzai64 et frangy pour votre aide.

Rechercher des sujets similaires à "selectionner variables erreur 1004"