A voir également:
- Remplir cellules vides d'une colonne en parallèle à une autre
- Déplacer une colonne excel - Guide
- Trier une colonne excel - Guide
- Comment supprimer une page vide sur word - Guide
- Colonne word - Guide
- Formule somme excel colonne - Guide
1 réponse
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonsoir, peux-tu partager le code que tu as déjà réalisé?
moi je ferais ainsi:
- parcourir la colonne B de haut en bas, ligne par ligne tant qu'elle n'est pas vide
- si la valeur de la colonne A pour la ligne en cours est vide, recopier en colonne A la valeur de la ligne précédente
qu'en penses-tu?
moi je ferais ainsi:
- parcourir la colonne B de haut en bas, ligne par ligne tant qu'elle n'est pas vide
- si la valeur de la colonne A pour la ligne en cours est vide, recopier en colonne A la valeur de la ligne précédente
qu'en penses-tu?
Private Sub Remplir_Cellules_A()
Dim N As Long 'N Nom
Dim M As Long 'M Matière
N = 1
M = 1
' Exprimer la double condition, cellule dans la colonne B non vide et celle de A vide.
If (Sheets(Feuil1).Cells("M", 2)) <> "" And (Sheets(Feuil1).Cells("N", 2)) = "" Then
Sheets("Feuil1").Cells(65535, 1).End(xlUp)(2).Value = _
Sheets("Feuil1").Cells("N" - 1, 2)
End If
N = N + 1
M = M + 1
End Sub
Dans l'exécution pas à pas, la commande If présente un erreur '13', incompatibilité de type
- en ajoutant "option explicit" en haut de module
- en remplaçant Sheets(Feuil1) par Sheets("Feuil1")
- en remplaçant "M" et "N" par le numéro de colonne
Supposons les suivantes données pour la colonne A (Nom) et la B (Matières)
A : (Oscar)
B : (Science, Math, Français, Anglais)
Voici la macro :
Private Sub Remplir_Cellules_C()
Dim m As Long
Dim n As Long
m = 1 ' m fait référence à commencer à la ligne 2 (Colonne B Matières)
n = 2 ' n fait référence à commencer à la ligne 2 (colonne A Nom)
While Not IsEmpty(Sheets("Feuil1").Cells(m, 2))
Sheets("Feuil1").Cells(65535, 1).End(xlUp)(2).Value = _
Sheets("Feuil1").Cells(n, 1)
m = m + 1 ' passer à la ligne prochaine pour faire le test
n = n + 1
Wend
End Sub
Le problème de cette macro, c’est qu’elle compte le nombre de lignes utilisées (non vides) et elle copie le nom ‘Oscar’ autant de fois que les cellules dans la colonne B sont non vides. Alors, à la première exécution j’ai ‘Oscar’ sur 5 cellules, pendant que la colonne B comporte que 4 données.
À une deuxième étape, j’ai ajouté une condition avec If et And, mais cela n’a pas fonctionné :
Private Sub Remplir_Cellules_D()
Dim m As Long
Dim n As Long
m = 1 ' m fait référence à commencer à la ligne 2 (Colonne 2 Matières)
n = 2 ' n fait référence à commencer à la ligne 2 (colonne 1 Nom)
If Sheets("Feuil1").Cells(n, 2) = "" And Sheets("Feuil1").Cells(m, 2) <> "" Then
While Not IsEmpty(Sheets("Feuil1").Cells(m, 2))
Sheets("Feuil1").Cells(65535, 1).End(xlUp)(2).Value = _
Sheets("Feuil1").Cells(n, 1)
m = m + 1 ' passer à la ligne prochaine pour faire le test
n = n + 1
Wend
Else
End If
End Sub
je pense que ce serait plus clair pour toi si tu avais uniquement un compteur au lieu de deux.