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   -
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
A voir également:

2 réponses

ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonsoir Sílvia, bonsoir le forum,

É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
0
silviayo Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Salut ThauTheme,

Merci beaucoup pour ta réponse et pour tes conseils! Ta solution a très bien marché!

Cdt,

Silvia
0