Macro Excel remplir cellules automatiquement

chrismichel -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je suis confronté à un soucis avec un tableau Excel qui comporte des milliers d'entrées, je cherche donc une solution automatique pour régler ce problème mais comme je suis totalement inculte en macro Excel je m'en remets au savoir de la communauté ;-)

Je voudrais remplir une cellule avec le contenu de la cellule la plus proche située au-dessus (dans la même colonne) et qui contient une donnée. Dis comme cela c'est un peu compliqué mais voici un exemple avant/après de ce que je voudrais :

TABLEAU AVANT :

Nom1
0 Poste1
0 Poste2
Nom2
0 Poste1
0 Poste2
0 Poste3
Nom3
0 Poste1

TABLEAU APRES :

Nom1
Nom1 Poste1
Nom1 Poste2
Nom2
Nom2 Poste1
Nom2 Poste2
Nom2 Poste3
Nom3
Nom3 Poste1

Donc voilà, les 0 sont remplacés par le Nom situé au-dessus (Nom1, Nom2, Nom3).

PS : Le nombre de ligne par Nom est variable.

D'avance merci pour votre aide.
A voir également:

4 réponses

michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour,

des milliers de lignes, c'est combien? la macro sera complètement différente selon le nombre de milliers (rapidité d'exécution)!
dans l'attente
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
tout compte fait qqsoit le nombre de lignes:

Option Explicit  

Const Col As Byte = 1 'colonne à traiter  
Const Deplig As Byte = 1 'ligne départ  
Const col_r As Byte = 3 'colonne de restitution  

Sub donner_prefixe_poste()  
Dim Derlig As Long, Nbre As Long, Lig As Long  
Dim tablo  
Dim cptr As Long, nom As String  

Derlig = Cells(Cells.Rows.Count, 1).End(xlUp).Row  
tablo = Application.Transpose(Range(Cells(Deplig, Col), Cells(Derlig, Col)))  

For cptr = 1 To UBound(tablo)  
    If tablo(cptr) Like "Nom*" Then  
        nom = tablo(cptr)  
    Else  
        tablo(cptr) = nom & Replace(tablo(cptr), 0, "")  
    End If  
Next  

Application.ScreenUpdating = False  
Range(Cells(Deplig, col_r), Cells(30000, col_r)).Clear  
Cells(Deplig, col_r).Resize(UBound(tablo), 1) = Application.Transpose(tablo)  

End Sub  

tu adaptes les constantes col, deplig et col_r à la disposition de ton classeur (col_r peut être égal à col pour transformer la colonne initiale)

Mais quelque chose me dit qu'on pourrait le faire par formule...
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour,

si en fait on a Toto à la place de nom1, Bidochon -nom2 etc
remplacer:
If tablo(cptr) Like "Nom*" Then  

par
 If Not tablo(cptr) Like "0*" Then
0
m@rina Messages postés 26515 Date d'inscription   Statut Contributeur Dernière intervention   11 490
 
Bonjour, (coucou michel ! ;))

Plus simplement peut être :

Supposant que la dernière ligne à compter en colonne B puisque par défaut la première colonne n'est pas complète.

sub remplir() 
Dim ligne, DL 
Dim texte 
DL = Range("B65536").End(xlUp).Row 'dernière ligne de la col B 

For ligne = 1 To DL 
    If Cells(ligne, 1) <> "" Then 
        texte= Cells(ligne, 1) 
    Else 
        Cells(ligne, 1) = texte 
    End If 
 Next ligne 
end sub


Sur 3000 lignes, ça prendra 1 seconde.

m@rina



- "Sur le forum bureautique, on pose des questions concernant la bureautique..."
- "Ah bon ???"
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
bonjour M@rina,

je viens de tester sur 3000 lignes aussi: 0,047 seconde...(ram: 512)

mais il me semble que dans le résultat, il faut le nomN puis le nomN en cours et le numéro de poste tant qu'on a zéro avant posteX ?
peut ^tre sur 2 colonnes d'ailleurs! moi j'ai tout regroupé dand la m^ colonne

cordialement
0
m@rina Messages postés 26515 Date d'inscription   Statut Contributeur Dernière intervention   11 490
 
J'ai peut être lu la question "un peu" en diagonale ??
C'est l'une de mes spécificité !! ;))

Merci pour ta réponse ! ;)
m@rina
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour tou(te)s
Beh moi je trouve qu'avant de se décarcassés vaudrait mieux avoir des explications un peu (beaucoups) plus "explicite".
Et remplace tes 0 par des noms ce serras plus simple, parce que des zéro partout j'y comprend rien.
A+
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour à tous,
En fait, la demande originale date de juin 2009 et restée sans réponse jusqu'à ce que Li relance ce jeudi avant d'aller au dodo et apparemment elle ne s'est pas réveillée depuis ...
Enfin, ca nous aura permis de jouer au petit train électrique vba!
0
Li
 
Moi aussi ça m'intéresse !!!!!
-1