Probleme dans la creations d'une 'main courante

bonjour tout le monde!

Nouveau et extrêmement novices dans le VBA je me tourne vers vos lumières.

Je vous explique mon projet:

Le but est de créer automatiquement des classeurs "Personne". Pour cela j'utilise un classeur excel en mode modèle pour avoir toujours une même tram. Ensuite cela s'enregistre en un classeur à part nommé par des cellules du tableau (exemple : 1-1-Dupont-michel-RVN). Jusque là, pas de problème!

Ma complications viens, quand j'essaie de lister tout ces classeurs dans une "mains courante" générale, qui me permettrais d'avoir un suivie globale de mes classeurs "Personne". vous me suivez?

J'ai essayé d'intégrer un code VBA dans mon modèle, seul problème, à chaque tentative cela se solde par des codes erreur

Le dernier code en date est celui-ci :

Private Sub CommandButton1_Click()

    Dim L As Integer

    If MsgBox(" Confirmez-vous l’insertion? ", vbYesNo, " Demande de confirmation d’ajout ") = vbYes Then

        L = Workbooks.Open("Y:\fichier Y\mains courante.xlsx") & Worksheets("global").Range("a65536").End(x1Down).Row + 1

        Range(" A " & L).Value = ("D3")

        Range(" B " & L).Value = ("B6")

        Range(" C " & L).Value = ("D6")

        Range(" D " & L).Value = ("B3")

        Range(" E " & L).Value = ("B10")

        Range(" F " & L).Value = ("B20")

    End If

End Sub

dernier code d'erreur : "erreur d’exécution : 438"

des solutions? peut-être que je fait fausse route dans ma logique un peu tordu?

merci de votre aide

Bonjour Kevin,

Je te réponds seulement pour ton code VBA, pas pour le reste.

Pour Range(" A " & L) mets plutôt : Range("A" & L)

Pour ("D3") c'est soit Range("D3") soit [D3]

Ce qui donne :

Range("A" & L) = [D3]
Range("B" & L) = [B6]
Range("C" & L) = [D6]
Range("D" & L) = [B3]
Range("E" & L) = [B10]
Range("F" & L) = [B20]

Pour L qui sert de n° de ligne, mets plutôt : Dim L As Long car maximum d'un Integer : 32 767

➯ plantage si ta dernière ligne est dessous !

Pour Range("a65536"), n'oublie pas que depuis Excel 2007, la ligne maxi est 1 048 576 ;

tu as Excel 2016, mais par sûreté, si tu veux que le code marche aussi sur Excel 2003,

mets plutôt : Range("A" & Rows.Count) ou Cells(Rows.Count, 1)

Je crois que tu t'es trompé de sens vertical : xlDown = vers le bas ; xlUp = vers le haut

Je te laisse vérifier le reste de cette ligne de code VBA.

Cordialement

Salut merci de ton aide, mais je reste au même niveau pour le moment "erreur d’exécution 438 / propriété ou méthode non gérée par cette objet"

je te montre le modifications que j'ai apporté grâce à ton aide:

Private Sub CommandButton1_Click()

    Dim L As Long

    If MsgBox(" Confirmez-vous l’insertion ? ", vbYesNo, " Demande de confirmation d’ajout ") = vbYes Then

        L = Workbooks.Open("Y:\Fichier Y\mains courante.xlsx") & Worksheets("global").Cells(Rows.Count, 1).End(xlUp).Row + 1

        Range("A" & L).Value = [D3]

        Range("B" & L).Value = [B6]

        Range("C" & L).Value = [D6]

        Range("D" & L).Value = [B3]

        Range("E" & L).Value = [B10]

        Range("F" & L).Value = [B20]

    End If

End Sub

J'ai essayé les différente façon d'écrire

L = Workbooks.Open("Y:\Fichier Y\mains courante.xlsx") & Worksheets("global").Cells(Rows.Count, 1).End(xlUp).Row + 1
L = Workbooks.Open("Y:\Fichier Y\mains courante.xlsx") & Worksheets("global").Range("A" & Rows.Count).End(xlUp).Row + 1
L = Workbooks.Open("Y:\Fichier Y\mains courante.xlsx") & Worksheets("global").Range("a1048576").End(xlUp).Row + 1

Sans grande réussite, peut-être serait-il préférable que je refasse un nouveau code

Bonjour Kevin,

Dans ton nouveau code VBA :

Range("A" & L).Value = [D3]
Range("B" & L).Value = [B6]
Range("C" & L).Value = [D6]
Range("D" & L).Value = [B3]
Range("E" & L).Value = [B10]
Range("F" & L).Value = [B20]

Si tu tiens à rajouter .Value, pourquoi pas ? mais moi, je trouve que c'est ici inutile, et je préfère sans ;

il y a d'autre cas où c'est à la fois bien pratique et obligatoire de l'utiliser, mais pas pour ici.


Pour ta longue ligne au-dessus, je le ferais en 2 temps :

1) ouvrir le fichier : Workbooks.Open("Y:\Fichier Y\mains courante.xlsx")

mais c'est inutile s'il est déjà ouvert ; et vérifie bien le chemin entier, c'est peut-être :

Workbooks.Open("C:\Users\Kevin\Documents\Dossier Y\mains courantes.xlsm")

(et vérifie en particulier tout ce que j'ai pris grand soin de mettre en gras rouge !)

2) calculer L (la dernière ligne + 1) ; si le classeur actif est celui que tu viens d'ouvrir :

L = Worksheets("global").Range("A" & Rows.Count).End(xlUp).Row + 1

SI en plus tu es sûr que la feuille active sera la feuille "global" car le classeur contient

une seule feuille de nom "global" ; ou il y a plusieurs feuilles, et tu mets au début de

ta macro soit ce test : If ActiveSheet.Name <> "global" Then Exit Sub ; soit :

WorkSheets("global").Select ALORS tu peux ainsi calculer L plus simplement :

L =Range("A" & Rows.Count).End(xlUp).Row + 1

Cordialement

Rechercher des sujets similaires à "probleme creations main courante"