Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Copier données d'une cellule jusqu'à la prochaine non vide et recommencer

27 réponses
Avatar
suze32
Bonjour,

Je traite des donn=E9es issus d'un logiciel comptable en l'exportant.

Dans ma colonne A, j'ai une donn=E9es dans la cellule "A3", "A54", "A85", "=
A87"...
(entre toutes ces cellules, les cellules sont vides)

Je souhaiterais pouvoir copier les donn=E9es de la cellule A3 jusqu'=E0 A53=
, celle de A54 jusqu'=E0 A84 etc... jusqu'=E0 la fin de la feuille.

A chaque extraction, les cellules remplies ne seront pas les m=EAmes.

Merci pour votre aide
Bonne journ=E9e,

10 réponses

1 2 3
Avatar
MichD
Cette procédure corrige la lacune pour la section
ou tu as beaucoup de sections FR consécutifs que je
n'avais pas vu!


'---------------------------------------------------------
Sub test()
Dim A As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Extraction")
With .Range("A2:A" &
.Range("B6556").End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
.Formula = "=A" & .Item(1).Row - 1
End With
With .Range("A2:A" & .Range("B6556").End(xlUp).Row)
T = .Value
.Value = T
End With
With .Range("B2:B" & .Range("B6556").End(xlUp).Row)
Set Trouve = .Find(What:="", LookAt:=xlValue)
If Not Trouve Is Nothing Then
Adr = Trouve.Address

Do
If A = 0 Then
Trouve.Offset(, -1) = ""
End If
Set Trouve = .FindNext(Trouve)
SS = Trouve.Address
If A = 0 Then
A = 1
Else: A = 0
End If
Loop Until Adr = Trouve.Address
End If
End With
End With
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
'---------------------------------------------------------
Avatar
MichD
Enfin, je pense que là c'est complet!
;-)

'-------------------------------------------------------------------------
Sub test()

Dim A As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Extraction")
With .Range("A2:A" &
.Range("B6556").End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
.Formula = "=A" & .Item(1).Row - 1
End With
With .Range("A2:A" & .Range("B6556").End(xlUp).Row)
T = .Value
.Value = T
End With
With .Range("B3:B" & .Range("B65536").End(xlUp).Row)
Set Trouve = .Find(What:="", LookAt:=xlValue)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
If A = 0 Then
Trouve.Offset(, -1) = ""
End If
Set Trouve = .FindNext(Trouve)
If A = 0 Then
A = 1
Else: A = 0
End If
Loop Until Adr = Trouve.Address
End If
End With
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'-------------------------------------------------------------------------

"MichD" a écrit dans le message de groupe de discussion :
l8q37a$b4i$



Cette procédure corrige la lacune pour la section
ou tu as beaucoup de sections FR consécutifs que je
n'avais pas vu!


'---------------------------------------------------------
Sub test()
Dim A As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Extraction")
With .Range("A2:A" &
.Range("B6556").End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
.Formula = "=A" & .Item(1).Row - 1
End With
With .Range("A2:A" & .Range("B6556").End(xlUp).Row)
T = .Value
.Value = T
End With
With .Range("B2:B" & .Range("B6556").End(xlUp).Row)
Set Trouve = .Find(What:="", LookAt:=xlValue)
If Not Trouve Is Nothing Then
Adr = Trouve.Address

Do
If A = 0 Then
Trouve.Offset(, -1) = ""
End If
Set Trouve = .FindNext(Trouve)
SS = Trouve.Address
If A = 0 Then
A = 1
Else: A = 0
End If
Loop Until Adr = Trouve.Address
End If
End With
End With
Application.ScreenUpdating = True
Application.EnableEvents = True

End Sub
'---------------------------------------------------------
Avatar
MichD
On peut raccourcir le code, compliquer la formule et augmenter
la vitesse d'exécution comme ça :

'------------------------------------------
Sub test()
Dim A As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Extraction")
With .Range("A3:A" &
.Range("B6556").End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
.Formula = "=IF(And(OFFSET(A" & .Item(1).Row &
",,1,,)="""",OFFSET(A" & _
.Item(1).Row & ",,2,,)=""""),"""",A" & .Item(0).Row &
")"
End With
With .Range("A2:A" & .Range("B6556").End(xlUp).Row)
T = .Value
.Value = T
End With
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'------------------------------------------
Avatar
MichD
Comme il y a un petit problème avec la coupure des lignes,
une petite dernière :

'------------------------------------------------
Sub test()
Dim A As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
With Worksheets("Extraction")
With .Range("A3:A" & .Range("B6556"). _
End(xlUp).Row).SpecialCells(xlCellTypeBlanks)
.Formula = "=IF(And(OFFSET(A" & .Item(1).Row & _
",,1,,)="""",OFFSET(A" & .Item(1).Row & _
",,2,,)=""""),"""",A" & .Item(0).Row & ")"
End With
With .Range("A2:A" & .Range("B6556").End(xlUp).Row)
T = .Value
.Value = T
End With
End With
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
'------------------------------------------------
Avatar
suze32
Bonjour Jacky,

Je ne suis pas encore très forte en VBA, en pleine formation, comment vot re code se rapporte à une colonne spécifique?
Car j'ai essayé de le retranscrit dans mon fichier où il y a 10 colonne s et cela ne fonctionne pas.

Merci pour votre aide
Avatar
suze32
Bonjour MichD,

Merci beaucoup pour votre aide, mais quand je colle le dernier code, cela me fait une erreur sur la formule ci-dessous :

Formula = "=IF(And(OFFSET(A" & .Item(1).Row & _
",,1,,)="""",OFFSET(A" & .Item(1).Row & _

",,2,,)=""""),"""",A" & .Item(0).Row & ")"

Merci pour votre aide,
Avatar
Péhemme
Bonjour suze32, bonjour à Tous,

Ce que fait la macro de Jacky (les commentaires sont dans la macro)
Sub jj()
Dim i As Long
Dim Fin

With Sheets("Extraction")
'Dernière ligne de la colonne B
Fin = .Cells(.Rows.Count, 2).End(xlUp).Row

For i = 3 To Fin '.Cells(.Rows.Count, 2).End(xlUp).Row
'Si dans la colonne A, la cellule au-dessus n'est pas vide
If .Cells(i - 1, 1) <> "" Then
'et si la cellule adjacente n'est pas vide
If .Cells(i, 2) <> "" Then
'la cellule de la colonne A prend la valeur de la
'cellule du dessus
.Cells(i, 1).Value = Cells(i - 1, 1).Value
End If
End If
Next
End With
End Sub

Bonne journée à Tous
Michel



"suze32" a écrit dans le message de groupe de discussion :


Bonjour Jacky,

Je ne suis pas encore très forte en VBA, en pleine formation, comment votre
code se rapporte à une colonne spécifique?
Car j'ai essayé de le retranscrit dans mon fichier où il y a 10 colonnes et
cela ne fonctionne pas.

Merci pour votre aide
Avatar
MichD
Le service de messagerie a inséré une ligne ou fait une
coupure d'une ligne de code inapproprié.


Voici ton fichier de retour. http://cjoint.com/?CLsltHHDLO6

Pour voir la macro, fais un clic droit sur l'onglet de la feuille
"Extraction" et choisis
dans le menu contextuel la commande "Visualiser le code".
Avatar
Jacky
Hello Michel.

Sans oublier le "." (point) qui c'était perdu en traversant la grande mare.
devant la deuxième Cells
.Cells(i, 1).Value = .Cells(i - 1, 1).Value

--
Bomme Fête de fin d'année
JJ


"Péhemme" a écrit dans le message de news: l8rsru$dpg$
Bonjour suze32, bonjour à Tous,

Ce que fait la macro de Jacky (les commentaires sont dans la macro)
Sub jj()
Dim i As Long
Dim Fin

With Sheets("Extraction")
'Dernière ligne de la colonne B
Fin = .Cells(.Rows.Count, 2).End(xlUp).Row

For i = 3 To Fin '.Cells(.Rows.Count, 2).End(xlUp).Row
'Si dans la colonne A, la cellule au-dessus n'est pas vide
If .Cells(i - 1, 1) <> "" Then
'et si la cellule adjacente n'est pas vide
If .Cells(i, 2) <> "" Then
'la cellule de la colonne A prend la valeur de la
'cellule du dessus
.Cells(i, 1).Value = Cells(i - 1, 1).Value
End If
End If
Next
End With
End Sub

Bonne journée à Tous
Michel



"suze32" a écrit dans le message de groupe de discussion :


Bonjour Jacky,

Je ne suis pas encore très forte en VBA, en pleine formation, comment votre code se rapporte à une colonne
spécifique?
Car j'ai essayé de le retranscrit dans mon fichier où il y a 10 colonnes et cela ne fonctionne pas.

Merci pour votre aide
Avatar
Péhemme
Ahrrr !
Je me mets aux explications de texte et j'oublie un élément important.
On ne soulignera jamais assez l'importance de ce point (.) signifiant
l'appartenance à l'objet à traiter ; ici la feuille "Extraction".
Tu vois, je suis (du verbe suivre).
:-)
Bonnes fêtes de fin d'année à toi aussi
Grosses bises à ta femme et à ta fille.
Michel

"Jacky" a écrit dans le message de groupe de discussion :
l8ruhf$i16$

Hello Michel.

Sans oublier le "." (point) qui c'était perdu en traversant la grande mare.
devant la deuxième Cells
.Cells(i, 1).Value = .Cells(i - 1, 1).Value

--
Bomme Fête de fin d'année
JJ


"Péhemme" a écrit dans le message de news:
l8rsru$dpg$
Bonjour suze32, bonjour à Tous,

Ce que fait la macro de Jacky (les commentaires sont dans la macro)
Sub jj()
Dim i As Long
Dim Fin

With Sheets("Extraction")
'Dernière ligne de la colonne B
Fin = .Cells(.Rows.Count, 2).End(xlUp).Row

For i = 3 To Fin '.Cells(.Rows.Count, 2).End(xlUp).Row
'Si dans la colonne A, la cellule au-dessus n'est pas vide
If .Cells(i - 1, 1) <> "" Then
'et si la cellule adjacente n'est pas vide
If .Cells(i, 2) <> "" Then
'la cellule de la colonne A prend la valeur de la
'cellule du dessus
.Cells(i, 1).Value = Cells(i - 1, 1).Value
End If
End If
Next
End With
End Sub

Bonne journée à Tous
Michel



"suze32" a écrit dans le message de groupe de discussion :


Bonjour Jacky,

Je ne suis pas encore très forte en VBA, en pleine formation, comment
votre code se rapporte à une colonne spécifique?
Car j'ai essayé de le retranscrit dans mon fichier où il y a 10 colonnes
et cela ne fonctionne pas.

Merci pour votre aide
1 2 3