OVH Cloud OVH Cloud

Excel - "Déplacement" sans nommer une cellule

3 réponses
Avatar
Congelator
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

3 réponses

Avatar
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

Voilà, J'espère pouvoir vous aider!
André



In article , a_effacer
says...

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


Avatar
Congelator
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

Voilà, J'espère pouvoir vous aider!
André



In article , a_effacer
says...
>
>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




Avatar
Congelator
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