Mon problème est le suivant :
Dans un fichier Excel qui va être rempli tout au long de l'année, j'ai
besoin de trouver la dernière ligne écrite pour créer une facture. A partir
de là, si cette ligne contient un X dans la colonne J, je veux me déplacer de
2 cellules vers la droite (L), copier son contenu et le coller dans un autre
fichier Excel (facture- D19), revenir au fichier original et me déplacer
d'une cellule vers la droite (M) - copier - coller (facture- D16) - retour -
un nouveau déplacement vers la droite (N) - copier - coller (facture- D10).
Dans le code que j'ai créé, la cellule est toujours définie (L15 - M15 -
N15) alors que ce ne sera pas toujours la ligne 15... d'où mon SOS !!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
dede_bo
Bonjour, Le principe est très simple: Déclarez vos feuilles en tant qu'object, parcourir la feuille 'source' tant qu'il trouve des données, Avant de recopier une valeur, s'assure que sur la feuille de destination la cellule est vide. Si c'est le cas, copie les données.
En resumé:
Sub test() Dim feuille As Object ' Feuille source Dim resultat As Object ' Feuille destination Set feuille = ActiveWorkbook.Worksheets("sheet1") Set resultat = ActiveWorkbook.Worksheets("sheet2") ' Dans votre cas, se sera : ' Set Resultat= Workbook("chemin + nom du fichier Excel").worksheets("nom de la feuille")
r = 1 ' Pointeur qui sert à parcourir le fichier
' Parcour le fichier Excel: Il faut être certain que le n° de colonne ' (1 dans mon exemple) contient des données. Car il s'arretera sur la ' première ligne vide ' ---------------------------------------------------------------------
While Not IsEmpty(feuille.Cells(r, 1)) If Not IsEmpty(feuille.cells(r, 10)) Then ' Colonne J (X)
If Not IsEmpty(resultat.Cells(r, 4)) Then ' Resultat votre colonne D resultat.Cells(r, 4) = feuille.Cells(r, 13) ' La donnée de la End If ' colonne M End If r = r + 1 Wend End Sub
Bonjour,
Le principe est très simple:
Déclarez vos feuilles en tant qu'object, parcourir la feuille 'source' tant
qu'il trouve des données, Avant de recopier une valeur, s'assure que sur la
feuille de destination la cellule est vide. Si c'est le cas, copie les données.
En resumé:
Sub test()
Dim feuille As Object ' Feuille source
Dim resultat As Object ' Feuille destination
Set feuille = ActiveWorkbook.Worksheets("sheet1")
Set resultat = ActiveWorkbook.Worksheets("sheet2")
' Dans votre cas, se sera :
' Set Resultat= Workbook("chemin + nom du fichier Excel").worksheets("nom
de la feuille")
r = 1 ' Pointeur qui sert à parcourir le fichier
' Parcour le fichier Excel: Il faut être certain que le n° de colonne
' (1 dans mon exemple) contient des données. Car il s'arretera sur la
' première ligne vide
' ---------------------------------------------------------------------
While Not IsEmpty(feuille.Cells(r, 1))
If Not IsEmpty(feuille.cells(r, 10)) Then ' Colonne J (X)
If Not IsEmpty(resultat.Cells(r, 4)) Then ' Resultat votre colonne D
resultat.Cells(r, 4) = feuille.Cells(r, 13) ' La donnée de la
End If ' colonne M
End If
r = r + 1
Wend
End Sub
Voilà, J'espère pouvoir vous aider!
André
In article <1B243596-A83B-4815-8273-BC97C7B53146@microsoft.com>, a_effacer
says...
Bonjour, Le principe est très simple: Déclarez vos feuilles en tant qu'object, parcourir la feuille 'source' tant qu'il trouve des données, Avant de recopier une valeur, s'assure que sur la feuille de destination la cellule est vide. Si c'est le cas, copie les données.
En resumé:
Sub test() Dim feuille As Object ' Feuille source Dim resultat As Object ' Feuille destination Set feuille = ActiveWorkbook.Worksheets("sheet1") Set resultat = ActiveWorkbook.Worksheets("sheet2") ' Dans votre cas, se sera : ' Set Resultat= Workbook("chemin + nom du fichier Excel").worksheets("nom de la feuille")
r = 1 ' Pointeur qui sert à parcourir le fichier
' Parcour le fichier Excel: Il faut être certain que le n° de colonne ' (1 dans mon exemple) contient des données. Car il s'arretera sur la ' première ligne vide ' ---------------------------------------------------------------------
While Not IsEmpty(feuille.Cells(r, 1)) If Not IsEmpty(feuille.cells(r, 10)) Then ' Colonne J (X)
If Not IsEmpty(resultat.Cells(r, 4)) Then ' Resultat votre colonne D resultat.Cells(r, 4) = feuille.Cells(r, 13) ' La donnée de la End If ' colonne M End If r = r + 1 Wend End Sub
Merci André mais malheureusement, ça ne fonctionne pas...
Voici le code que j'avais créé dans la feuille "Liste" et qui derva être intégré dans un bouton sur la feuille "DCI", peut-être que ça montrera mieux mon problème :
Sub transfert() 'sélection de la colonne J Columns("J:J").Select 'recherche de la première cellule vide dans la colonne J Range("J2").Activate Selection.Find(What:="", After:¬tiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, SearchFormat:úlse).Activate 'séletion de la cellule - NE DEVRAIT PAS CONTENIR DE REFERENCE MAIS UN MOUVEMENT (move right 2 cellules) Range("L5").Select Selection.Copy Sheets("DCI").Select Range("D19:I19").Select ActiveSheet.Paste Sheets("Liste").Select 'séletion de la cellule - NE DEVRAIT PAS CONTENIR DE REFERENCE MAIS UN MOUVEMENT (move right 1 cellule) Range("M5").Select Application.CutCopyMode = False Selection.Copy Sheets("DCI").Select Range("D16:I16").Select ActiveSheet.Paste Sheets("Liste").Select 'séletion de la cellule - NE DEVRAIT PAS CONTENIR DE REFERENCE MAIS UN MOUVEMENT (move right 1 cellule) Range("N5").Select Application.CutCopyMode = False Selection.Copy Sheets("DCI").Select Range("D10:I10").Select ActiveSheet.Paste End Sub
Merci d'avance pour le coup de main
-- Céd / Lausanne
"" a écrit :
Bonjour, Le principe est très simple: Déclarez vos feuilles en tant qu'object, parcourir la feuille 'source' tant qu'il trouve des données, Avant de recopier une valeur, s'assure que sur la feuille de destination la cellule est vide. Si c'est le cas, copie les données.
En resumé:
Sub test() Dim feuille As Object ' Feuille source Dim resultat As Object ' Feuille destination Set feuille = ActiveWorkbook.Worksheets("sheet1") Set resultat = ActiveWorkbook.Worksheets("sheet2") ' Dans votre cas, se sera : ' Set Resultat= Workbook("chemin + nom du fichier Excel").worksheets("nom de la feuille")
r = 1 ' Pointeur qui sert à parcourir le fichier
' Parcour le fichier Excel: Il faut être certain que le n° de colonne ' (1 dans mon exemple) contient des données. Car il s'arretera sur la ' première ligne vide ' ---------------------------------------------------------------------
While Not IsEmpty(feuille.Cells(r, 1)) If Not IsEmpty(feuille.cells(r, 10)) Then ' Colonne J (X)
If Not IsEmpty(resultat.Cells(r, 4)) Then ' Resultat votre colonne D resultat.Cells(r, 4) = feuille.Cells(r, 13) ' La donnée de la End If ' colonne M End If r = r + 1 Wend End Sub
Merci André mais malheureusement, ça ne fonctionne pas...
Voici le code que j'avais créé dans la feuille "Liste" et qui derva être
intégré dans un bouton sur la feuille "DCI", peut-être que ça montrera mieux
mon problème :
Sub transfert()
'sélection de la colonne J
Columns("J:J").Select
'recherche de la première cellule vide dans la colonne J
Range("J2").Activate
Selection.Find(What:="", After:¬tiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:= _
False, SearchFormat:úlse).Activate
'séletion de la cellule - NE DEVRAIT PAS CONTENIR DE REFERENCE MAIS UN
MOUVEMENT (move right 2 cellules)
Range("L5").Select
Selection.Copy
Sheets("DCI").Select
Range("D19:I19").Select
ActiveSheet.Paste
Sheets("Liste").Select
'séletion de la cellule - NE DEVRAIT PAS CONTENIR DE REFERENCE MAIS UN
MOUVEMENT (move right 1 cellule)
Range("M5").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DCI").Select
Range("D16:I16").Select
ActiveSheet.Paste
Sheets("Liste").Select
'séletion de la cellule - NE DEVRAIT PAS CONTENIR DE REFERENCE MAIS UN
MOUVEMENT (move right 1 cellule)
Range("N5").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("DCI").Select
Range("D10:I10").Select
ActiveSheet.Paste
End Sub
Merci d'avance pour le coup de main
--
Céd / Lausanne
"dede_bo@newsguy.com" a écrit :
Bonjour,
Le principe est très simple:
Déclarez vos feuilles en tant qu'object, parcourir la feuille 'source' tant
qu'il trouve des données, Avant de recopier une valeur, s'assure que sur la
feuille de destination la cellule est vide. Si c'est le cas, copie les données.
En resumé:
Sub test()
Dim feuille As Object ' Feuille source
Dim resultat As Object ' Feuille destination
Set feuille = ActiveWorkbook.Worksheets("sheet1")
Set resultat = ActiveWorkbook.Worksheets("sheet2")
' Dans votre cas, se sera :
' Set Resultat= Workbook("chemin + nom du fichier Excel").worksheets("nom
de la feuille")
r = 1 ' Pointeur qui sert à parcourir le fichier
' Parcour le fichier Excel: Il faut être certain que le n° de colonne
' (1 dans mon exemple) contient des données. Car il s'arretera sur la
' première ligne vide
' ---------------------------------------------------------------------
While Not IsEmpty(feuille.Cells(r, 1))
If Not IsEmpty(feuille.cells(r, 10)) Then ' Colonne J (X)
If Not IsEmpty(resultat.Cells(r, 4)) Then ' Resultat votre colonne D
resultat.Cells(r, 4) = feuille.Cells(r, 13) ' La donnée de la
End If ' colonne M
End If
r = r + 1
Wend
End Sub
Merci André mais malheureusement, ça ne fonctionne pas...
Voici le code que j'avais créé dans la feuille "Liste" et qui derva être intégré dans un bouton sur la feuille "DCI", peut-être que ça montrera mieux mon problème :
Sub transfert() 'sélection de la colonne J Columns("J:J").Select 'recherche de la première cellule vide dans la colonne J Range("J2").Activate Selection.Find(What:="", After:¬tiveCell, LookIn:=xlFormulas, LookAt _ :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ False, SearchFormat:úlse).Activate 'séletion de la cellule - NE DEVRAIT PAS CONTENIR DE REFERENCE MAIS UN MOUVEMENT (move right 2 cellules) Range("L5").Select Selection.Copy Sheets("DCI").Select Range("D19:I19").Select ActiveSheet.Paste Sheets("Liste").Select 'séletion de la cellule - NE DEVRAIT PAS CONTENIR DE REFERENCE MAIS UN MOUVEMENT (move right 1 cellule) Range("M5").Select Application.CutCopyMode = False Selection.Copy Sheets("DCI").Select Range("D16:I16").Select ActiveSheet.Paste Sheets("Liste").Select 'séletion de la cellule - NE DEVRAIT PAS CONTENIR DE REFERENCE MAIS UN MOUVEMENT (move right 1 cellule) Range("N5").Select Application.CutCopyMode = False Selection.Copy Sheets("DCI").Select Range("D10:I10").Select ActiveSheet.Paste End Sub
Merci d'avance pour le coup de main
-- Céd / Lausanne
"" a écrit :
Bonjour, Le principe est très simple: Déclarez vos feuilles en tant qu'object, parcourir la feuille 'source' tant qu'il trouve des données, Avant de recopier une valeur, s'assure que sur la feuille de destination la cellule est vide. Si c'est le cas, copie les données.
En resumé:
Sub test() Dim feuille As Object ' Feuille source Dim resultat As Object ' Feuille destination Set feuille = ActiveWorkbook.Worksheets("sheet1") Set resultat = ActiveWorkbook.Worksheets("sheet2") ' Dans votre cas, se sera : ' Set Resultat= Workbook("chemin + nom du fichier Excel").worksheets("nom de la feuille")
r = 1 ' Pointeur qui sert à parcourir le fichier
' Parcour le fichier Excel: Il faut être certain que le n° de colonne ' (1 dans mon exemple) contient des données. Car il s'arretera sur la ' première ligne vide ' ---------------------------------------------------------------------
While Not IsEmpty(feuille.Cells(r, 1)) If Not IsEmpty(feuille.cells(r, 10)) Then ' Colonne J (X)
If Not IsEmpty(resultat.Cells(r, 4)) Then ' Resultat votre colonne D resultat.Cells(r, 4) = feuille.Cells(r, 13) ' La donnée de la End If ' colonne M End If r = r + 1 Wend End Sub
Camille, dans le forum Excel a trouvé la solution (encore merci à elle...).
Sub transfert()
Range("j50000").End(XlUp).Offset(1).Select ActiveCell.Offset(,1).Copy Sheets("DCI").Range("D19:I19") ActiveCell.Offset(,2).Copy Sheets("DCI").Range("D16:I16") ActiveCell.Offset(,3).Copy Sheets("DCI").Range("D10:I10") End Sub
-- Céd / Lausanne
"Congelator" a écrit :
Salut à tous
Mon problème est le suivant : Dans un fichier Excel qui va être rempli tout au long de l'année, j'ai besoin de trouver la dernière ligne écrite pour créer une facture. A partir de là, si cette ligne contient un X dans la colonne J, je veux me déplacer de 2 cellules vers la droite (L), copier son contenu et le coller dans un autre fichier Excel (facture- D19), revenir au fichier original et me déplacer d'une cellule vers la droite (M) - copier - coller (facture- D16) - retour - un nouveau déplacement vers la droite (N) - copier - coller (facture- D10). Dans le code que j'ai créé, la cellule est toujours définie (L15 - M15 - N15) alors que ce ne sera pas toujours la ligne 15... d'où mon SOS !!
Si quelqu'un à une solution, ça m'intéresse.
Merci d'avance -- Céd / Lausanne
Camille, dans le forum Excel a trouvé la solution (encore merci à elle...).
Sub transfert()
Range("j50000").End(XlUp).Offset(1).Select
ActiveCell.Offset(,1).Copy Sheets("DCI").Range("D19:I19")
ActiveCell.Offset(,2).Copy Sheets("DCI").Range("D16:I16")
ActiveCell.Offset(,3).Copy Sheets("DCI").Range("D10:I10")
End Sub
--
Céd / Lausanne
"Congelator" a écrit :
Salut à tous
Mon problème est le suivant :
Dans un fichier Excel qui va être rempli tout au long de l'année, j'ai
besoin de trouver la dernière ligne écrite pour créer une facture. A partir
de là, si cette ligne contient un X dans la colonne J, je veux me déplacer de
2 cellules vers la droite (L), copier son contenu et le coller dans un autre
fichier Excel (facture- D19), revenir au fichier original et me déplacer
d'une cellule vers la droite (M) - copier - coller (facture- D16) - retour -
un nouveau déplacement vers la droite (N) - copier - coller (facture- D10).
Dans le code que j'ai créé, la cellule est toujours définie (L15 - M15 -
N15) alors que ce ne sera pas toujours la ligne 15... d'où mon SOS !!
Camille, dans le forum Excel a trouvé la solution (encore merci à elle...).
Sub transfert()
Range("j50000").End(XlUp).Offset(1).Select ActiveCell.Offset(,1).Copy Sheets("DCI").Range("D19:I19") ActiveCell.Offset(,2).Copy Sheets("DCI").Range("D16:I16") ActiveCell.Offset(,3).Copy Sheets("DCI").Range("D10:I10") End Sub
-- Céd / Lausanne
"Congelator" a écrit :
Salut à tous
Mon problème est le suivant : Dans un fichier Excel qui va être rempli tout au long de l'année, j'ai besoin de trouver la dernière ligne écrite pour créer une facture. A partir de là, si cette ligne contient un X dans la colonne J, je veux me déplacer de 2 cellules vers la droite (L), copier son contenu et le coller dans un autre fichier Excel (facture- D19), revenir au fichier original et me déplacer d'une cellule vers la droite (M) - copier - coller (facture- D16) - retour - un nouveau déplacement vers la droite (N) - copier - coller (facture- D10). Dans le code que j'ai créé, la cellule est toujours définie (L15 - M15 - N15) alors que ce ne sera pas toujours la ligne 15... d'où mon SOS !!