Remplir plage vide avec plage pleine précedente

Daroumx

XLDnaute Nouveau
Bonsoir à tous,

Je suis un vrai novice sur VBA. J'utilise généralement l'enregistreur de macro, mais la j'y arrive pas.
Donc j'ai un fichier avec une colonne G par exemple qui regroupe les données d'un matricule
dans G1 , G2 ... etc mais dans la plage A1:F1 figurent les données d'identification du matricule sauf que les données d'identification ne figurent que dans la première plage A1:F1 puis la plage suivante donc A2:F2 est vide jusqu'aux prochaines données d'identification d'un matricule différent. Ce que je voudrais faire c'est copier coller la plage A1:F1 sur toutes les plages vides qui concerne le 1er matricules puis enchaîner avec la suite. J'ai essayé ce code mais c'est juste pour une cellule et ça ne semble pas bien fonctionner:

Sub Traitement()
Do Until ActiveCell = Range("A10004")
If ActiveCell.Value = "" Then
ActiveCell.Offset(-1, 0).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Range("B10").Select
Do Until ActiveCell = Range("B10004")
If ActiveCell.Value = "" Then
ActiveCell.Offset(-1, 0).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Range("C10").Select
Do Until ActiveCell = Range("C10004")
If ActiveCell.Value = "" Then
ActiveCell.Offset(-1, 0).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Range("D10").Select
Do Until ActiveCell = Range("D10004")
If ActiveCell.Value = "" Then
ActiveCell.Offset(-1, 0).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Range("E10").Select
Do Until ActiveCell = Range("E10004")
If ActiveCell.Value = "" Then
ActiveCell.Offset(-1, 0).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
Range("F10").Select
Do Until ActiveCell = Range("F10004")
If ActiveCell.Value = "" Then
ActiveCell.Offset(-1, 0).Select
Selection.Copy
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Else
ActiveCell.Offset(1, 0).Select
End If
Loop
End Sub

Je joins un exemple de fichier excel pour être plus explicite. Voila, je vous remercie d'avance pour vos réponses et j'espère pouvoir m'améliorer en VBA afin de vous aider en retour =).
 

Pièces jointes

  • exemple.xlsx
    8.4 KB · Affichages: 33
  • exemple.xlsx
    8.4 KB · Affichages: 34
  • exemple.xlsx
    8.4 KB · Affichages: 39

ROGER2327

XLDnaute Barbatruc
Re : Remplir plage vide avec plage pleine précedente

Bonjour Daroumx.


À essayer :​
VB:
Sub toto()
Dim i&, j&, Id, oDatId As Range
'
  Set oDatId = [A1:G15].Cells 'à adapter au besoin.
  Id = 7 'ou "G"

  For j = 1 To oDatId.Rows.Count
    i = 0
    Do While oDatId(j, Id).Offset(i + 1).Value = oDatId(j, Id).Offset(i).Value: i = i + 1: Loop
    If i Then oDatId.Rows(j).Copy Destination:=oDatId(j + 1, 1).Resize(i, 1)
    j = j + i
  Next
End Sub


Bonne nuit.


ℝOGER2327
#6996


Lundi 23 As 141 (Saint Quincey, critique d’art - fête Suprême Quarte)
5 Frimaire An CCXXII, 0,3932h - cochon
2013-W48-1T00:56:37Z
 

Daroumx

XLDnaute Nouveau
Re : Remplir plage vide avec plage pleine précedente

Bonjour ROGER2327,

Je vous remercie pour votre réponse rapide. Le code VBA fonctionne dans le fichier exemple mais quand je l'applique sur mon fichier ça me met une erreur 1004. J'ai oublié de mentionner que dans mon fichier les données matricule qui se répètent sont sur la colonne G et H et non seulement sur la colonne G.
Voici mon adaptation de votre code:
Sub toto()
Dim i&, j&, Id, oDatId As Range
'
Set oDatId = [A9:H10004].Cells '
Id = 8

For j = 1 To oDatId.Rows.Count
i = 0
Do While oDatId(j, Id).Offset(i + 1).Value = oDatId(j, Id).Offset(i).Value: i = i + 1: Loop
If i Then oDatId.Rows(j).Copy Destination:=oDatId(j + 1, 1).Resize(i, 1)
j = j + i
Next
End Sub

De plus je viens d'appliquer ,sur une partie du classeur d'origine que vous trouverez en pièce jointe , le code adapté. Mais dans ce cas là rien ne se passe les cellules vides restent vides. Vous trouverez en pièce jointe le fichier identique à celui d'origine (niveau forme) avec le code qui ne fonctionne pas. Je vous remercie pour votre précieuse aide.
 

Pièces jointes

  • Exemple2.xlsm
    16 KB · Affichages: 32
  • Exemple2.xlsm
    16 KB · Affichages: 32
  • Exemple2.xlsm
    16 KB · Affichages: 34
Dernière édition:

Daroumx

XLDnaute Nouveau
Re : Remplir plage vide avec plage pleine précedente

Re bonjour ROGER2327,

J'ai finalement pu résoudre mon problème avec un autre code que voici :

Sub Traitement()
Dim L As Integer
Const LigneDebut = 2
Const LigneFin = 8669
For L = LigneDebut To LigneFin Step 1
If IsEmpty(Cells(L, 1)) Then
Cells(L, 1).Value = Cells(L - 1, 1).Value
End If
Next
For L = LigneDebut To LigneFin Step 1
If IsEmpty(Cells(L, 2)) Then
Cells(L, 2).Value = Cells(L - 1, 2).Value
End If
Next
For L = LigneDebut To LigneFin Step 1
If IsEmpty(Cells(L, 3)) Then
Cells(L, 3).Value = Cells(L - 1, 3).Value
End If
Next
For L = LigneDebut To LigneFin Step 1
If IsEmpty(Cells(L, 4)) Then
Cells(L, 4).Value = Cells(L - 1, 4).Value
End If
Next
For L = LigneDebut To LigneFin Step 1
If IsEmpty(Cells(L, 5)) Then
Cells(L, 5).Value = Cells(L - 1, 5).Value
End If
Next
For L = LigneDebut To LigneFin Step 1
If IsEmpty(Cells(L, 6)) Then
Cells(L, 6).Value = Cells(L - 1, 6).Value
End If
Next


End Sub

Je ne sais pas si c'est le meilleur des codes mais vu mon niveau cela fait l'affaire. Je te remercie encore pour ton aide.
Bonne journée.
Daroumx
 

ROGER2327

XLDnaute Barbatruc
Re : Remplir plage vide avec plage pleine précedente

Rz...


Bonjour ROGER2327,

Je vous remercie pour votre réponse rapide. Le code VBA fonctionne dans le fichier exemple mais quand je l'applique sur mon fichier ça me met une erreur 1004. J'ai oublié de mentionner que dans mon fichier les données matricule qui se répètent sont sur la colonne G et H et non seulement sur la colonne G.
Je vous remercie d'avoir posé un problème qui ne se posait pas en prenant soin de ne pas poser le véritable problème. En fait, j'adore qu'on se foute de ma gueule...​


Bonne continuation.


ℝOGER2327
#6997


Lundi 23 As 141 (Saint Quincey, critique d’art - fête Suprême Quarte)
5 Frimaire An CCXXII, 5,4055h - cochon
2013-W48-1T12:58:23Z
 

Daroumx

XLDnaute Nouveau
Re : Remplir plage vide avec plage pleine précedente

Rz...


Je vous remercie d'avoir posé un problème qui ne se posait pas en prenant soin de ne pas poser le véritable problème. En fait, j'adore qu'on se foute de ma gueule...​


Bonne continuation.


ℝOGER2327
#6997


Lundi 23 As 141 (Saint Quincey, critique d’art - fête Suprême Quarte)
5 Frimaire An CCXXII, 5,4055h - cochon
2013-W48-1T12:58:23Z

Bonjour ,

J'espère que je ne vous ai pas fait perdre votre temps ℝOGER2327 et je m'en excuse si c'est le cas. c'est vrai qu'il aurait fallut que je pose le véritable problème au début mais ce fut un oubli de ma part et je m'en excuse.

Sincères excuses.
Daroumx
 

ROGER2327

XLDnaute Barbatruc
Re : Remplir plage vide avec plage pleine précedente

Re...


Bonjour ,

J'espère que je ne vous ai pas fait perdre votre temps ℝOGER2327 et je m'en excuse si c'est le cas. c'est vrai qu'il aurait fallut que je pose le véritable problème au début mais ce fut un oubli de ma part et je m'en excuse.

Sincères excuses.
Daroumx
Par honnêteté, je dois vous dire que vous n'êtes pas le seul responsable de mon mouvement d'humeur. Il se trouve que de très-nombreuses demandes ne correspondent que de plus ou moins près aux problèmes réels qu'elles sont censées poser. Au bout d'un certain temps, je craque. Mais soyez rassuré : je ne vous en veux pas en particulier. Et s'il arrive que nous nous retrouvions un jour à propos d'un autre problème, je tenterai d'y répondre. Je le fais par plaisir, en réalité ; rien ne m'y oblige...

Disons que vous êtes tombé au mauvais endroit et au mauvais moment...

Ce qui reste vrai, c'est que, comme certainement beaucoup d'autres contributeurs assidus, j'aimerais que les demandeurs prissent le temps de formuler précisément leurs demandes. Nous y gagnerions tous notre temps...


Sans rancune donc,


ℝOGER2327
#6998


Lundi 23 As 141 (Saint Quincey, critique d’art - fête Suprême Quarte)
5 Frimaire An CCXXII, 6,1044h - cochon
2013-W48-1T14:39:02Z
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal