Macro Excel
mon code modifier avec annotations, à modifier pour que ça "fit" avec le classeur de destination, avec les commentaires tu devrais pouvoir le faire:
On Error GoTo fin
'gèle l'écran pour ne pas voir le traitement
Application.ScreenUpdating = False
'Le classeur source
Dim WbSource As Workbook
Set WbSource = ActiveWorkbook
'Le classeur de destination, change test.xls pour ton classeur
Dim WbDest As Workbook
Set WbDest = Workbooks.Open("c:\Test.xls")
'la ligne du classeur destination à partir de laquelle on va copier les infos
Dim Ligne As Range
Set Ligne = Sheets("Nominette").Range("A65536").End(xlUp).Offset(1, 0)
With WbSource.Sheets("bon_nominette")
'fait le traitement 4 fois pour les cellules A6 à A9
For i = 1 To 4
'Je me suis dit que s'il n'y avait pas de qte, on ajoutais pas l'info, à toi de voir
If .Range("A" & 5 + i).Value <> "" Then
Ligne.Value = .Range("A" & 5 + i).Value
'offset sert à de déplacer de la cellule représenter par Ligne de x lignes par x colonnes
Ligne.Offset(0, 1).Value = .Range("B" & 5 + i).Value
Ligne.Offset(0, 2).Value = .Range("C" & 5 + i).Value
Ligne.Offset(0, 3).Value = .Range("D3").Value
'Descend la ligne de 1 pour continuer à écrire
Set Ligne = Ligne.Offset(1, 0)
End If
Next i
End With
fin:
'ferme le classeur destination
If Not WbDest Is Nothing Then WbDest.Close SaveChanges:=True
Application.ScreenUpdating = True
Unload Me
je ne savais pas trop ce que tu voulais imprimer et quand, mais tu a dis que tu avais la solution, donc tu devrais pouvoir l'inclure.
merci, mais il bloque avec le Me de Unload Me
Enleve cette ligne, je pensais que tu utilisais le code dans un userform.
voila ce que j'ai fait, mais ca fonctionne pas
Sub nominette_chapelle()
'
' Nominette Macro
' Macro enregistrée le 11/10/2011 par Lorek
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
On Error GoTo fin
'gèle l'écran pour ne pas voir le traitement
Application.ScreenUpdating = False
'Le classeur source
Dim WbSource As Workbook
Set WbSource = ActiveWorkbook
'Le classeur de destination, change test.xls pour ton classeur
Dim WbDest As Workbook
Set WbDest = Workbooks.Open("c:\Test.xls")
'la ligne du classeur destination à partir de laquelle on va copier les infos
Dim Ligne As Range
Set Ligne = Sheets("Nominette").Range("A65536").End(xlUp).Offset(1, 0)
With WbSource.Sheets("bon_nominette")
'fait le traitement 4 fois pour les cellules A6 à A9
For i = 1 To 4
'Je me suis dit que s'il n'y avait pas de qte, on ajoutais pas l'info, à toi de voir
If .Range("A" & 5 + i).Value <> "" Then
Ligne.Value = .Range("A" & 5 + i).Value
'offset sert à de déplacer de la cellule représenter par Ligne de x lignes par x colonnes
Ligne.Offset(0, 1).Value = .Range("B" & 5 + i).Value
Ligne.Offset(0, 2).Value = .Range("C" & 5 + i).Value
Ligne.Offset(0, 3).Value = .Range("D3").Value
'Descend la ligne de 1 pour continuer à écrire
Set Ligne = Ligne.Offset(1, 0)
End If
Next i
End With
fin:
'ferme le classeur destination
If Not WbDest Is Nothing Then WbDest.Close SaveChanges:=True
Application.ScreenUpdating = True
End Sub
t'as pas changé cette ligne
. . .
'Le classeur de destination, change test.xls pour ton classeur
Dim WbDest As Workbook
Set WbDest = Workbooks.Open("c:\Test.xls")
. . .
Bonjour,
ok, j'ai modifier le fichier, par contre, j'ai surement des choses a modifié dans la partie qui suit, mais je reconnais que je patauge un peu:
With WbSource.Sheets("bon_nominette")
'fait le traitement 4 fois pour les cellules A6 à A9
For i = 1 To 4
'Je me suis dit que s'il n'y avait pas de qte, on ajoutais pas l'info, à toi de voir
If .Range("A6" & 5 + i).Value <> "" Then
Ligne.Value = .Range("A" & 5 + i).Value
'offset sert à de déplacer de la cellule représenter par Ligne de x lignes par x colonnes
Ligne.Offset(0, 1).Value = .Range("B" & 5 + i).Value
Ligne.Offset(0, 2).Value = .Range("C" & 5 + i).Value
Ligne.Offset(0, 3).Value = .Range("D3").Value
'Descend la ligne de 1 pour continuer à écrire
Set Ligne = Ligne.Offset(1, 0)
End If
dit moi ce qui ne marche pas et on verra ce qui faut changer, est-ce que les données s'écrivent dans la bonne feuille de ton classeur, elle sont pas dans les bonnes colonnes, etc...
il n'y a rien qui s'affiche
... dans ton fichier destination je suppose?
tu voulais que les données soient recopiées dans un autre fichier dans l'onglet Nominette. Est-ce qu'il y a bien un onglet qui s'appelle nominette dans ton classeur de destination?
C'est dans cette ligne qu'est défini le nom de l'onglet
Set Ligne = Sheets("Nominette").Range("A65536").End(xlUp).Offset(1, 0)
Est-ce que le nom de ton onglet "source" est toujours "bon_nominette"
With WbSource.Sheets("bon_nominette")
J'avais ajouté un test pour ne pas copier les lignes qui n'avait pas de qte, peut-être que le problème vient de la
If .Range("A" & 5 + i).Value <> "" Then
Tu peux toujours enlever la ligne
On Error GoTo fin
s'il y a un erreur durant le traiement, tu vas voir où
Sinon zip tes deux fichiers et joint les au message.
voila le premier fichier, lez second suit
voila, je les renomé Nominette 2, pour ne pas confondre avec l'originale et j'ai mis un com dans la page Bon_nominette du fichier exemple.
Encore un grand merci
voila avec les deux fichiers que tu m'as envoyé:
Le code du bouton
On Error GoTo fin
'gèle l'écran pour ne pas voir le traitement
Application.ScreenUpdating = False
'Le classeur source
Dim WbSource As Workbook
Set WbSource = ActiveWorkbook
'Le classeur de destination, change test.xls pour ton classeur
Dim WbDest As Workbook
Set WbDest = Workbooks.Open("C:\Nominette2.xls")
'la ligne du classeur destination à partir de laquelle on va copier les infos
Dim Ligne As Range
Set Ligne = Sheets("Feuil1").Range("B65536").End(xlUp).Offset(1, 0)
With WbSource.Sheets("bon_nominette")
'fait le traitement 4 fois pour les cellules A6 à A9
For i = 1 To 4
'Je me suis dit que s'il n'y avait pas de qte, on ajoutais pas l'info, à toi de voir
If .Range("A" & 5 + i).Value <> "" Then
Ligne.Value = .Range("B" & 5 + i).Value
'offset sert à de déplacer de la cellule représenter par Ligne de x lignes par x colonnes
Ligne.Offset(0, 3).Value = .Range("C" & 5 + i).Value
Ligne.Offset(0, 8).Value = .Range("A" & 5 + i).Value
'Descend la ligne de 1 pour continuer à écrire
Set Ligne = Ligne.Offset(1, 0)
End If
Next i
End With
fin:
'ferme le classeur destination
If Not WbDest Is Nothing Then WbDest.Close SaveChanges:=True
Application.ScreenUpdating = True
tu n'avais pas changer le nom de l'onglet de cette ligne
Set Ligne = Sheets("Feuil1").Range("B65536").End(xlUp).Offset(1, 0)
la si tu change le nom des fichiers, des onglets ou que tu ajoute des colonnes dans le fichier nominette, oublie pas de modifier le code, sinon c'est sur que ça marchera pas.
bonsoir,
desole pas su repondre plus tot, petit probleme avec la connexion internet!
Pour la ligne que tu dis, elle me semble correct, vu qu'on amene les infos, sur le fichier Nominette, onglet Feuil1.
j'ai fait un petit test, mais ca ne fonctionne pas trop,
Set Ligne = Sheets("Feuil1").Range("B65536").End(xlUp).Offset(1, 0), est ce que le Offset de cette ligen veux dire qu'il amenera les info a partir de la ligen 1 ou 0?
le offset(1,0) sert à descendre d'une ligne:
Set Ligne = Sheets("Feuil1").Range("B65536").End(xlUp).Offset(1, 0)
sert à trouver la dernière ligne avec du texte de la colonne B
Sert à descendre d'une ligne pour avoir la ligne suivante
Bonsoir, dis moi si j'arrive a ziper les deux fichier, pourrais tu m'aider pour faire se transfert avec les codes, car ca ne fonctionne pas trop, il doit y avoir un trucs sur lequel, je passe a coté.
bonjour,
j'ai une petite demande, comment puis je faire pour qu'une info soit remplacer par la modification:
exemple:
j'ai un prix en 'D11' feuille livraison , il est afficher directement en fonction de la recherche :
=RECHERCHEV(D3;'Produits Référencés'!A2:O10004;9;FAUX)
et je voudrais pouvoir modifier sur la feuille livraison et qu'il remplace celui de la feuille "produits référencés"
d'avance Merci
Bonjour
je viens a vous, dans l'espoir de trouver reponse a mes questions:
j'ai fait des UseForm et quand je clic sur un onglet, je n'arrive pas a faire en sorte qu'il affiche une donnée dans la case correspondante et surtout qu'il descende d'une ligne si celle superieur est occupée (pourtant j'utilise le offset(1;0))
Est ce possible qu'il additionne automatiquement si un des onglet selectionné, existe deja dans la vente?
et derniere petit question, c'est possible de fermer un Userform apres avoir cliquer sur l'onglet et qu'il aie ouvert le second?
je vous remercie beaucoup d'avance
Lorek