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