Remplissage d'une cellule vide dans boucle For
silviayo
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
silviayo Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
silviayo Messages postés 2 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis confronté à un problème auquel je n'arrive pas à trouver la solution toute seule et je vous serais très très reconnaissante si vous pourriez m'aider.
Je suis en train de faire une macro qui me permette de gérer une base client. En gros j'ai deux feuille "Base" qui correspondent à une base client avec les données sur les différents clients et un autre fichier "Base étude" avec les nouveaux produits pour lesquels les clients sont prospectés. Sur la ligne de chaque client dans la feuille "Base" il y a 5 cellules, les colonnes (R:V), qui correspondent aux produits en prospection. J'ai déjà créé un Userform qui me permet pour chaque nouveau produit créé, de l'associer à des clients. J'aimerais qu'à chaque rajout de nouveau produits, une macro vienne trouver le client que je souhaite mettre à jour, et qu'elle trouve quelle cellule dans la plage (R:V) du client est vide afin d'y coller le nouveau produit prospecté.
La macro que j'ai créée fonctionne mais au lieu de copier le nom du nouveau produit sur la première cellule vide, elle l'étend à toutes les cellules vides des colonnes (R:V).
Voici mon code:
For r = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(r) = True Then
For c = 1 To ListBox1.ColumnCount - 14
Sheet5.Cells(4 + Range("Compteur2"), c + 3).Value = ListBox1.List(r, c)
Sheets("Base étude").Select
Cells(3 + Range("Compteur2"), 4).Select
Selection.Copy
Sheets("Feuille sup").Select
Range("B42").Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("B43").Value = TextBox1.Value
Range("B43").Select
Selection.Copy
Sheets("Base").Select
If (Cells(2 + Range("numéro"), 18)) = "" Then
Cells(2 + Range("numéro"), 18).Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf IsEmpty(Cells(2 + Range("numéro"), 19)) Then
Cells(2 + Range("numéro"), 19).Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf IsEmpty(Cells(2 + Range("numéro"), 20)) Then
Cells(2 + Range("numéro"), 20).Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf IsEmpty(Cells(2 + Range("numéro"), 21)) Then
Cells(2 + Range("numéro"), 21).Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf IsEmpty(Cells(2 + Range("numéro"), 22)) Then
Cells(2 + Range("numéro"), 22).Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If
Next c
End If
Next r
Sheets("Base étude").Select
Range("Q5").Copy
Range("Q6:Q70000").Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
J'espère avoir été claire!
Merci d'avance
Cordialement,
Silvia
Je suis confronté à un problème auquel je n'arrive pas à trouver la solution toute seule et je vous serais très très reconnaissante si vous pourriez m'aider.
Je suis en train de faire une macro qui me permette de gérer une base client. En gros j'ai deux feuille "Base" qui correspondent à une base client avec les données sur les différents clients et un autre fichier "Base étude" avec les nouveaux produits pour lesquels les clients sont prospectés. Sur la ligne de chaque client dans la feuille "Base" il y a 5 cellules, les colonnes (R:V), qui correspondent aux produits en prospection. J'ai déjà créé un Userform qui me permet pour chaque nouveau produit créé, de l'associer à des clients. J'aimerais qu'à chaque rajout de nouveau produits, une macro vienne trouver le client que je souhaite mettre à jour, et qu'elle trouve quelle cellule dans la plage (R:V) du client est vide afin d'y coller le nouveau produit prospecté.
La macro que j'ai créée fonctionne mais au lieu de copier le nom du nouveau produit sur la première cellule vide, elle l'étend à toutes les cellules vides des colonnes (R:V).
Voici mon code:
For r = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(r) = True Then
For c = 1 To ListBox1.ColumnCount - 14
Sheet5.Cells(4 + Range("Compteur2"), c + 3).Value = ListBox1.List(r, c)
Sheets("Base étude").Select
Cells(3 + Range("Compteur2"), 4).Select
Selection.Copy
Sheets("Feuille sup").Select
Range("B42").Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("B43").Value = TextBox1.Value
Range("B43").Select
Selection.Copy
Sheets("Base").Select
If (Cells(2 + Range("numéro"), 18)) = "" Then
Cells(2 + Range("numéro"), 18).Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf IsEmpty(Cells(2 + Range("numéro"), 19)) Then
Cells(2 + Range("numéro"), 19).Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf IsEmpty(Cells(2 + Range("numéro"), 20)) Then
Cells(2 + Range("numéro"), 20).Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf IsEmpty(Cells(2 + Range("numéro"), 21)) Then
Cells(2 + Range("numéro"), 21).Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
ElseIf IsEmpty(Cells(2 + Range("numéro"), 22)) Then
Cells(2 + Range("numéro"), 22).Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If
Next c
End If
Next r
Sheets("Base étude").Select
Range("Q5").Copy
Range("Q6:Q70000").Select
Selection.PasteSpecial paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("A1").Select
J'espère avoir été claire!
Merci d'avance
Cordialement,
Silvia
A voir également:
- Remplissage d'une cellule vide dans boucle For
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Comment supprimer une page vide sur word - Guide
- Aller à la ligne dans une cellule excel - Guide
- Excel cellule couleur si condition texte - Guide
- Proteger cellule excel - Guide
2 réponses
Bonsoir Sílvia, bonsoir le forum,
Évite autant que tu le peux les Select qui ne font que ralentir l'exécution du code.
peut s'écrire :
Et si tu copies tous les formats ça se simplifie encore avec :
Pour ton problème, si j'ai bien compris car sans fichier c'est pas facile, je te propose le code ci-dessous qui utilise l'étiquette suite. Il faudra peut-être la déplacer vers le bas. Tu adapteras :
À plus,
ThauTheme
Évite autant que tu le peux les Select qui ne font que ralentir l'exécution du code.
Sheets("Feuil1").Select Range("A1").Select Selection.Copy Sheets("Feuil2").Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
peut s'écrire :
Sheets("Feuil1").Range("A1").Copy Sheets("Feuil2").Range("B1").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Et si tu copies tous les formats ça se simplifie encore avec :
Sheets("Feuil1").Range("A1").Copy Sheets("Feuil2").Range("B1")
Pour ton problème, si j'ai bien compris car sans fichier c'est pas facile, je te propose le code ci-dessous qui utilise l'étiquette suite. Il faudra peut-être la déplacer vers le bas. Tu adapteras :
Sub Macro1() For r = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(r) = True Then For c = 1 To ListBox1.ColumnCount - 14 Sheet5.Cells(4 + Range("Compteur2"), c + 3).Value = ListBox1.List(r, c) Sheets("Base étude").Cells(3 + Range("Compteur2"), 4).Copy With Sheets("Feuille sup") .Range("B42").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False .Range("B43").Value = TextBox1.Value .Range("B43").Copy End With With Sheets("Base") If (.Cells(2 + Range("numéro"), 18)) = "" Then .Cells(2 + Range("numéro"), 18).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False GoTo suite ElseIf IsEmpty(.Cells(2 + Range("numéro"), 19)) Then .Cells(2 + Range("numéro"), 19).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False GoTo suite ElseIf IsEmpty(.Cells(2 + Range("numéro"), 20)) Then .Cells(2 + Range("numéro"), 20).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False GoTo suite ElseIf IsEmpty(.Cells(2 + Range("numéro"), 21)) Then .Cells(2 + Range("numéro"), 21).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False GoTo suite ElseIf IsEmpty(.Cells(2 + Range("numéro"), 22)) Then .Cells(2 + Range("numéro"), 22).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False End If End With suite: Next c End If Next r With Sheets("Base étude") .Range("Q5").Copy .Range("Q6:Q70000").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False .Select .Range("A1").Select End With End Sub
À plus,
ThauTheme