Menu

Excel/ VB remplir automatiquement les cellules [Résolu/Fermé]

Messages postés
7
Date d'inscription
mardi 26 février 2013
Statut
Membre
Dernière intervention
27 février 2013
-
Bonjour,

Je fais appel à vous aujourd'hui;
je travaille sur une extraction des données sur une base de travaux (pas très personalisable)
j'obtiens donc un tableur qui a encore besoin de traitement et manuellement cela me prend beaucoup de temps. (plusieurs milliers de lignes)

aa bb cc dd
AA
bb
cc
dd
cc1
dd1

BB
bb1
cc2
dd2
cc3
dd3

CC


J'aimerai donc copier le AA dans les cellules vides qui la suivent jusqu'à BB
et copier BB ainsi de suite
De même pour les autres colonnes.
Et arriver au résultat suivant :

aa bb cc dd
AA
AA bb
AA bb cc
AA bb cc dd
AA bb cc1 dd
AA bb cc1 dd1
AA bb cc1 dd1
BB bb cc1 dd1
BB bb1 cc1 dd1
BB bb1 cc2 dd1
BB bb1 cc2 dd2
BB bb1 cc3 dd2
BB bb1 cc3 dd3
BB bb1 cc3 dd3
CC bb1 cc3 dd3

Merci de votre aide


Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
8947
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 mai 2019
1558
1
Merci
une autre solution plus rapide (0.38 s pour 25000 lignes)

Public Sub Remplir()
Dim lifin As Long, cofin As Long, li As Long, co As Long, plage As Range
Dim t
Dim d As Single
d = Timer
Application.ScreenUpdating = False
With Sheets(NF)
  cofin = .Cells.Find("*", , , , xlByColumns, xlPrevious).Column
  For co = codeb To cofin
    lifin = .Cells(Rows.Count, co).End(xlUp).Row
    Set plage = .Range(.Cells(lideb, co), .Cells(lifin, co))
    t = Application.Transpose(plage)
    For li = 1 To UBound(t) - 1
      If t(li + 1) = "" Then t(li + 1) = t(li)
    Next li
    plage = Application.Transpose(t)
  Next co
End With
Application.ScreenUpdating = True
MsgBox (Timer - d & " s")
End Sub

bonne journée

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 39477 internautes nous ont dit merci ce mois-ci

Messages postés
8947
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 mai 2019
1558
0
Merci
Bonjour

peux tu envoyer une partie de ton fichier au format excel 2003 sur cjoint.com et joindre le lien obtenu à ton prochain message
n'oublies pas d'y ajouter quelques explications (ce que tu veux obtenir, à partir de quoi, mettre un exemple ...)

bonne suite
Messages postés
7
Date d'inscription
mardi 26 février 2013
Statut
Membre
Dernière intervention
27 février 2013
0
Merci
Donc voici un lien vers un exemple du tableur extrait de la base

http://cjoint.com/?CBAqDcmYIbP

et j'aimerai avoir un résultat comme ci

http://cjoint.com/?CBAqGfcvA8n

Je m'explique un peu :
Par exemple pour la première colonne :
j'aimerai copier la valeur dans A2 dans les cellules qui suivent qui sont vides jusqu'à la cellule non vide c'est à dire avant A19

Merci de votre aide
Messages postés
8947
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 mai 2019
1558
0
Merci
Est ce que c'est ca?
http://cjoint.com/?3BBgJCdRoIU
Bonne journée
Messages postés
7
Date d'inscription
mardi 26 février 2013
Statut
Membre
Dernière intervention
27 février 2013
0
Merci
bonjour,

Merci beaucoup pour votre aide.
La solution fonctionne sur le fichier d'exemple que j'ai donné
mais je ne comprends pas pourquoi il ne marche pas sur le vrai fichier.
Je suis débutante en VB, et il m'indique une erreur pour
For li = 1 To UBound(t) - 1
ccm81
Messages postés
8947
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 mai 2019
1558 -
c'est une erreur à la compilation ou à l'exécution?
tsangeps
Messages postés
7
Date d'inscription
mardi 26 février 2013
Statut
Membre
Dernière intervention
27 février 2013
-
exactement
quand je fais appel à mon macro il m'indique une erreur à ce niveau
ccm81
Messages postés
8947
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 mai 2019
1558 -
tu n'as pas vraiment répondu à ma question

A la compilation.
Tu vas dans l'éditeur VBA , Deboguage.Compiler y a t'il une erreur signalée

A l'exécution. Quand tu appelle ta macro, l'erreur se produit.
Dans l'éditeur VBA, la ligne se met en jaune, tu passes le curseur sur li (quelle valeur donne t'il) puis sur UBound(t) (idem)

As tu mis
Option Base 1
sur la 1° ligne de code (les indices des tableaux commenceront à 1)
tsangeps
Messages postés
7
Date d'inscription
mardi 26 février 2013
Statut
Membre
Dernière intervention
27 février 2013
-
ah j'ai personnalisé certaines constantes (comme codeb et cofin ) et ça marche super.

Merci beaucoup de votre aide
ccm81
Messages postés
8947
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 mai 2019
1558 -
ah oui, j'avais oublié de le préciser !!!
peux tu mettre le problème à résolu (en haut de ta première demande)

bonne journée