Remplir cellules vides d'une colonne en parallèle à une autre

Fermé
Oscar - Modifié le 22 août 2017 à 19:23
yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 - 23 août 2017 à 20:11
Bonjour,
J’aurais une question à faire : J’ai des donnés dans plusieurs colonnes, l’une de ces colonnes, dans l'exemple, la B, elle compte avec des données dans plusieurs lignes (pour cet exemple, elle a des données sur les lignes 2 à 5). Comme la colonne A utilise uniquement la ligne 2, je voudrais remplir les restantes lignes (3 à 5, colonne A) avec la même information de la ligne 2. La Macro devrait me permettre de réaliser la même opération à plusieurs reprises avec d’autres A (Nom) et des quantités variables de B (Matières)

NOM MATIÈRES

J’ai essayé plusieurs codes, mais je ne maîtrise pas encore bien la logique de programmation. Selon moi, ceci est la logique à appliquer : Aller jusqu’à la dernière ligne non vide de la colonne A (Nom). Copier la valeur de cette ligne, puis la coller sur les lignes suivantes, et ce, jusqu’au qu’on atteint la dernière ligne de la colonne B (Matières) contenant des données. Pouvez-vous, s’il vous plaît, m’aider avec des codes possibles pour régler ce petit problème?
A voir également:

1 réponse

yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 Ambassadeur 1 568
22 août 2017 à 21:25
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?
0
J'avais essayé, entre autres, cette option:

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
0
yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 1 568 > Oscar
23 août 2017 à 09:08
peut-être:
- 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
0
Merci de tes suggestions, cependant, je n’arrive pas encore à une macro fonctionnelle pour cette commande. Vous trouverez ci-dessous le résultat le plus proche à ce que je cherche.

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
0
yg_be Messages postés 23471 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 février 2025 1 568 > Oscar
23 août 2017 à 20:11
dommage que tu ne donnes pas un exemple clair de ce que tu as au départ et ce que tu souhaites à l'arrivée.
je pense que ce serait plus clair pour toi si tu avais uniquement un compteur au lieu de deux.
0