Remplissage d'une cellule vide dans boucle For

silviayo Messages postés 2 Statut Membre -  
silviayo Messages postés 2 Statut Membre -
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

2 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 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
  2. silviayo Messages postés 2 Statut Membre
     
    Salut ThauTheme,

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

    Cdt,

    Silvia
    0