Remplire une feuille a sont lancement
bonjour, j'ai une feuille (reglement), je voudrais que celci se remplise quand on l'ouvre avec certaine données de mes base.
j'ai donc fais ce code mais qui pour le moment a deux problème (et peut etre plus) d'abbord il ne s'execute pas au lancement de ma feuille et il se plante avec le msg suivant ( erreur d'execution 9 , l'indice napartien pas a la sélection !)
les données que je souhaite affichées sont les suivante dans ma base_facture et ma base_commande je veut recupérr le type de doc (A2) puis le n° du doc qui se trouve dans la colonne A a partir de la 4 ieme ligne puis sur la même ligne que le numero du doc le nom ,la date du doc, l'acompte 1 , l'acompte 2 , le solde et le reste si tous n'est pas reglé car si le reste a regle est de zero la ligne est ignorée
pour le moment mon code est le suivant et ne demande qu'a évoluer avec votres aide.
Private Sub reglement_Open()
Dim cel As Range
Dim i, j As Integer
With Sheets("base_facture" & "base_commande")
Set cel = .Columns("EB").Find(What:=">0,00", LookIn:=xlValues, Lookat:=xlWhole).End(xlUp) - 1
If Not cel Is Nothing Then
i = cel.Row
j = Sheets("reglement").Range("A65536").End(xlUp).Row + 1
For j = 1 To 8
.Cells(j, 1) = .Cells(2, 1)
.Cells(j, 2) = .Cells(i, 1)
.Cells(j, 3) = .Cells(i, 7)
.Cells(j, 4) = .Cells(i, 2)
.Cells(j, 5) = .Cells(i, 129)
.Cells(j, 6) = .Cells(i, 130)
.Cells(j, 7) = .Cells(i, 131)
.Cells(j, 8) = .Cells(i, 132)
Next j
End If
End With
Range("A1").Select
End Sub
merci d'avance.
Bonjour
Bon pour ton souci, lorsque tu vois le message, tu dois avoir une ligne du code sur fond jaune. C'est à quel endroit ?? ici non ?? --> With Sheets("base_facture" & "base_commande")
Si oui, pourquoi fais-tu cela ??
A te relire
mon cher dan effectivement l'hortographe et moi cela fait deux d'ailleur d'habitude j'utilise un log de reconaissance vocale mais pour le momment suite a quelque souccis de santée je ne peut pas l'utillisé, donc je vais essayer de me relire pour en laisser moins .
pour mon problème il me met erreur 9 et rien de plus il ne surligne rien sinon tu peut me croire que je serais plus precis sur le pourquoi du comment. pour ce qui est de la ligne "with sheets("base_facture"&"base_commande") après avoir chercher par ci par la je l'ai réecrite comme suit : sheets("base_facture base_commande")
du fait que je veut une recherche dans ces deux base , maintenant je pense que mon problème vient de la ligne qui suit :
Set cel = .Columns("EB").Find(What:="value>0", LookIn:=xlValues, Lookat:=xlWhole).End(xlUp).Row
par cet ligne je souhaite recuperer dans mes deux base toute les lignes dont la valeur est suppérieur a zéro pour les inscrirent dans ma feuille reglement.
pour qu'il démarre j'ai placé mon code dans ma feuille reglement, faut-il que je le mette ailleurs au premier abbord je ne pense pas mais peut être que je me trompe.
ci-joint mon fichier pour que tu visualises
merci beaucoup pour l'intéret porté a mon sujet
j'ai encor modifier mon code et maintenant j'obtient erreur 438 propriété ou méthode non gerée par cet objet.
Private Sub reglement_Open()
Dim cel As Range
Dim i As Integer, j As Integer
With Sheets("base_facture") And ("base_commande")
For i = 2 To .Range("EB" & Rows.Count).End(xlUp).Row
If .Range("EB" & i).Value > 0 Then
With Sheets("reglement")
For j = 4 To .Range("A65000").End(xlUp).Row
.Range("A", j) = .Range("A2")
.Range("B", j) = .Cells(i, 1)
.Range("C", j) = .Cells(i, 7)
.Range("D", j) = .Cells(i, 2)
.Range("E", j) = .Cells(i, 129)
.Range("F", j) = .Cells(i, 130)
.Range("G", j) = .Cells(i, 131)
.Range("H", j) = .Cells(i, 132)
j = j + 1
Next j
End With
End If
Next i
End With
End Sub
merci pour votre aide
Bonjour
Ce n'est pas .Range("A", j)
mais .Range("A" & j)
Les autres à corriger aussi bien sur
re , effectivement je tape , je tape ,je refléchi et je ne fait pas attention a ces détails et je te remerci pour ta remarque pertiante que j'ai bien évidament corriger !
j'ai aussi repris mon code car il me fallait identifier les document et leur provenance et maintenant cela fonctionne il ne me reste plus qu'a le faire executer quand on lance la page règlement mais la je câlle car même avec private sub reglement_Open() le code ne se lance pas quand la page est appeler sinon mon code cela donne ca :
Private Sub reglement_Open ()
' d'abbord j'efface les anciènnes donné
Sheets("reglement").Range("A4:I65536").Select
Selection.ClearContents
' jeu fait deux boucle pour selectionné les ligne superieur a zéro et je les intègre dans ma page reglement
Dim i As Integer, j As Integer
With Sheets("base_facture")
For i = 4 To .Range("EB" & Rows.Count).End(xlUp).Row
If .Range("EB" & i).Value > 0 Then
j = Sheets("reglement").Range("A4").Range("A65536").End(xlUp).Row + 1
Sheets("reglement").Range("A" & j) = .Cells(2, 1)
Sheets("reglement").Range("B" & j) = .Cells(i, 1)
Sheets("reglement").Range("C" & j) = .Cells(i, 7)
Sheets("reglement").Range("D" & j) = .Cells(i, 2)
Sheets("reglement").Range("E" & j) = .Cells(i, 3)
Sheets("reglement").Range("F" & j) = .Cells(i, 129)
Sheets("reglement").Range("G" & j) = .Cells(i, 130)
Sheets("reglement").Range("H" & j) = .Cells(i, 131)
Sheets("reglement").Range("I" & j) = .Cells(i, 132)
End If
Next i
End With
With Sheets("base_commande")
For i = 4 To .Range("EB" & Rows.Count).End(xlUp).Row
If .Range("EB" & i).Value > 0 Then
j = Sheets("reglement").Range("A4").Range("A65536").End(xlUp).Row + 1
Sheets("reglement").Range("A" & j) = .Cells(2, 1)
Sheets("reglement").Range("B" & j) = .Cells(i, 1)
Sheets("reglement").Range("C" & j) = .Cells(i, 7)
Sheets("reglement").Range("D" & j) = .Cells(i, 2)
Sheets("reglement").Range("E" & j) = .Cells(i, 3)
Sheets("reglement").Range("F" & j) = .Cells(i, 129)
Sheets("reglement").Range("G" & j) = .Cells(i, 130)
Sheets("reglement").Range("H" & j) = .Cells(i, 131)
Sheets("reglement").Range("I" & j) = .Cells(i, 132)
End If
Next i
End With
' enfin je sélection une page hors du cadre de visualistion dans ma page reglement.
Sheets("reglement").Range("J4").Select
End Sub
merci pour les remarques elle me permette de progresser.
Bonsoir
C'est quoi cette macro reglement_Open, elle est lancée à partir de quoi ?
Tu ne confonds pas avec WorkBook_Open ?
re , je voulais que quand ont ouvre la feuille reglement la macro qui sert a la remplir avec les données de mes base s'execute rien de plus , au vue de la question c'est que ce n'est pas comme cela qu'on fait
car j'ai mis reglement ' pour le nom de ma feuille et open() 'pour quand on l'ouvre
je sait c'est l'âne qui a fait cela c'est normal et puis comme on dit qui tente rien n'a rein et pour le moment j'ai tenté mais j'ai rein lol
merci
Bonsoir
Alors si c'est quand tu vas sur ta feuille c'est l'évènement Activate
Private Sub Worksheet_Activate()
' d'abbord j'efface les anciènnes donné
'Sheets("reglement").Range("A4:I65536").Select ' Plus besoin de cette manière
Range("A4:I65536").Select
Selection.ClearContents
' jeu fait deux boucle pour selectionné les ligne superieur a zéro et je les intègre dans ma page reglement
'.
'.
'.
End Sub
Je n'ai pas vérifié ta macro
j'ai modifier suivant tes indication et il ne se passe rien.
Private Sub Worksheet_Acivate()
Sheets("reglement").Unprotect
'Sheets("reglement").
Range("A4:I65536").Select
Selection.ClearContents
Dim i As Integer, j As Integer
With Sheets("base_facture")
For i = 4 To .Range("EB" & Rows.Count).End(xlUp).Row
If .Range("EB" & i).Value > 0 Then
j = Sheets("reglement").Range("A4").Range("A65536").End(xlUp).Row + 1
Sheets("reglement").Range("A" & j) = .Cells(2, 1)
Sheets("reglement").Range("B" & j) = .Cells(i, 1)
Sheets("reglement").Range("C" & j) = .Cells(i, 7)
Sheets("reglement").Range("D" & j) = .Cells(i, 2)
Sheets("reglement").Range("E" & j) = .Cells(i, 3)
Sheets("reglement").Range("F" & j) = .Cells(i, 129)
Sheets("reglement").Range("G" & j) = .Cells(i, 130)
Sheets("reglement").Range("H" & j) = .Cells(i, 131)
Sheets("reglement").Range("I" & j) = .Cells(i, 132)
End If
Next i
End With
With Sheets("base_commande")
For i = 4 To .Range("EB" & Rows.Count).End(xlUp).Row
If .Range("EB" & i).Value > 0 Then
j = Sheets("reglement").Range("A4").Range("A65536").End(xlUp).Row + 1
Sheets("reglement").Range("A" & j) = .Cells(2, 1)
Sheets("reglement").Range("B" & j) = .Cells(i, 1)
Sheets("reglement").Range("C" & j) = .Cells(i, 7)
Sheets("reglement").Range("D" & j) = .Cells(i, 2)
Sheets("reglement").Range("E" & j) = .Cells(i, 3)
Sheets("reglement").Range("F" & j) = .Cells(i, 129)
Sheets("reglement").Range("G" & j) = .Cells(i, 130)
Sheets("reglement").Range("H" & j) = .Cells(i, 131)
Sheets("reglement").Range("I" & j) = .Cells(i, 132)
End If
Next i
End With
Sheets("reglement").Range("J4").Select
Sheets("reglement").Protect
End Sub
alors que quand j'utilise via un bouton present dans ma page (recherche reglement) qui fait tourner la même macro appeler mis a jour le code fonctionne bien donc dans un deusième temps comme pour ateindre ma page reglement j'utillise un bouton nomé reglement j'ai bien penser via ce bouton lancer ma macro mais la c'est la ligne :
Sheets("reglement").Range("A4:I65536").Select
Selection.ClearContents
qui fait un planté et la encore j'ai du mal a comprendre
y a t'il une explication je pense que oui mais mes trop faible connaissances ne me permette pas d'expliquer !
merci
Bonjour
Cette macro doit être placée dans le module de la feuille
Le mieux c'est de joindre ton fichier
re elle est bien placer dans la feuille reglement pour que tu te rende compte voici mon fichier dans sa derniere version
merci
ps : les feuilles facture, recup, et reglement son protéger sans mot de passe
Bonjour
Il faut bien nommer la macro
tu as noté
Private Sub Worksheet_Acivate()
Il faut
Private Sub Worksheet_Activate()
Ta macro modifiée
Private Sub Worksheet_Activate()
Dim i As Long, j As Long
ActiveSheet.Unprotect
Range("A4:I65536").ClearContents
With Sheets("base_facture")
For i = 4 To .Range("EB" & Rows.Count).End(xlUp).Row
If .Range("EB" & i).Value > 0 Then
j = Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A" & j) = .Cells(2, 1)
Range("B" & j) = .Cells(i, 1)
Range("C" & j) = .Cells(i, 7)
Range("D" & j) = .Cells(i, 2)
Range("E" & j) = .Cells(i, 3)
Range("F" & j) = .Cells(i, 129)
Range("G" & j) = .Cells(i, 130)
Range("H" & j) = .Cells(i, 131)
Range("I" & j) = .Cells(i, 132)
End If
Next i
End With
With Sheets("base_commande")
For i = 4 To .Range("EB" & Rows.Count).End(xlUp).Row
If .Range("EB" & i).Value > 0 Then
j = Range("A" & Rows.Count).End(xlUp).Row + 1
Range("A" & j) = .Cells(2, 1)
Range("B" & j) = .Cells(i, 1)
Range("C" & j) = .Cells(i, 7)
Range("D" & j) = .Cells(i, 2)
Range("E" & j) = .Cells(i, 3)
Range("F" & j) = .Cells(i, 129)
Range("G" & j) = .Cells(i, 130)
Range("H" & j) = .Cells(i, 131)
Range("I" & j) = .Cells(i, 132)
End If
Next i
End With
Range("J4").Select
ActiveSheet.Protect
End Sub
toute mes excuse mais comme l'affiche mon avatar j'en suis un beau par moment
il est vrais que comme cela cela fonctionne netement mieux
j'ai bientot fini ce logiciel pour mon beaufrère, il va pouvoir m'inviter au resto pour reprendre tous les calories perdu par le fonctionnement de mes neuronnes ( lol)
encore deux petit truc a faire et je suis sur que le forum seras mis a contribution pour identifier les bug éventuel, dans tous les cas merci beaucoup houps !! il est tard bonne nuit demaind boulot quand même