Créer nouvelle ligne et copier des informations

Résolu/Fermé
ClaraBRND - Modifié le 28 juil. 2020 à 09:11
yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 - 28 juil. 2020 à 14:06
Bonjour,

J'ai créé un code pour faire des demandes de gabarits.
Dans un premier temps, le responsable gabarit rentre tous les gabarit disponible pour 1 produit, ce qui créer les lignes correspondantes dans la feuille du produit. Ensuite, les autres responsables peuvent effectuer une demande pour leur pole ce qui rempli les champs sur la ligne du gabarit créé.

Cependant, si une deuxième personne effectue une deuxieme demande pour le même gabarit, j'aimerais qu'excel aille à la dernière cellule vide et créer une autre ligne pour ce gabarit (car sinon la deuxieme demande va simplement remplacer la première.

J'ai fait un code mais cela me créer 20 ligne avec la deuxieme demande, pas seulement 1 ... Je vous joins mon fichier, et voici la ligne de code ou se situe l'erreur. Merci de votre aide !!

https://www.cjoint.com/c/JGChh2PTi5V

Userform : DemandeDeGabarit

Code :
Private Sub BoutonValider_Click()
'Sélectionner la feuille correspondant au Produit
Produit = CaseProduit.Value
Sheets(Produit).Activate

'Ajouter la demande dans le tableau
Dim Rw As Range
Dim Ligne As Long

'Sélectionner la ligne correpondant au gabarit choisit
dlt = Sheets(Produit).Range("B65000").End(xlUp).Row + 1
For Each C In Sheets(Produit).Range("B5:B30")
If C.Value = CaseGabarit.Value Then
Ligne = C.Row

'Si la ligne du gabarit est vide
If Cells(Ligne, 4).Value = "" Then
'Remplir les champs
Cells(Ligne, 4) = CaseQuantité.Value
Cells(Ligne, 5) = CaseBesoin.Value
Cells(Ligne, 8) = CasePole.Value
Cells(Ligne, 9) = CaseDemandeur.Value
Cells(Ligne, 10) = CaseDate.Value
Cells(Ligne, 11) = CaseDélai.Value

If Priorité1 = True Then
Cells(Ligne, 7) = Priorité1.Caption
End If

If Priorité2 = True Then
Cells(Ligne, 7) = Priorité2.Caption
End If

If Priorité3 = True Then
Cells(Ligne, 7) = Priorité3.Caption
End If

If CheckBoxUsure.Value = True Then
Cells(Ligne, 13) = CheckBoxUsure.Caption
End If

If CheckBoxCasse.Value = True Then
Cells(Ligne, 13) = CheckBoxCasse.Caption
End If

If CheckBoxQuantitéSup.Value = True Then
Cells(Ligne, 13) = CheckBoxQuantitéSup.Caption
End If

If CheckBoxNonConforme.Value = True Then
Cells(Ligne, 13) = CheckBoxNonConforme.Caption
End If

If CheckBoxEvolution.Value = True Then
Cells(Ligne, 13) = CheckBoxEvolution.Caption
End If

If CheckBoxAutreRaison.Value = True Then
Cells(Ligne, 13) = CaseAutreRaison.Value
End If

'Si une demande est déjà faite pour le gabarit sélectionné
Else:

'Aller à la premiere case non remplie
dlt = Sheets(Produit).Range("B65000").End(xlUp).Row + 1

'Remplir les champs
Sheets(Produit).Range("B" & dlt) = CaseGabarit.Value
Sheets(Produit).Range("D" & dlt) = CaseQuantité.Value
Sheets(Produit).Range("E" & dlt) = CaseBesoin.Value
Sheets(Produit).Range("H" & dlt) = CasePole.Value
Sheets(Produit).Range("I" & dlt) = CaseDemandeur.Value
Sheets(Produit).Range("J" & dlt) = CaseDate.Value
Sheets(Produit).Range("K" & dlt) = CaseDélai.Value

If Priorité1 = True Then
Sheets(Produit).Range("G" & dlt) = Priorité1.Caption
End If

If Priorité2 = True Then
Sheets(Produit).Range("G" & dlt) = Priorité2.Caption
End If

If Priorité3 = True Then
Sheets(Produit).Range("G" & dlt) = Priorité3.Caption
End If

If CheckBoxUsure.Value = True Then
Sheets(Produit).Range("M" & dlt) = CheckBoxUsure.Caption
End If

If CheckBoxCasse.Value = True Then
Sheets(Produit).Range("M" & dlt) = CheckBoxCasse.Caption
End If

If CheckBoxQuantitéSup.Value = True Then
Sheets(Produit).Range("M" & dlt) = CheckBoxQuantitéSup.Caption
End If

If CheckBoxNonConforme.Value = True Then
Sheets(Produit).Range("M" & dlt) = CheckBoxNonConforme.Caption
End If

If CheckBoxEvolution.Value = True Then
Sheets(Produit).Range("M" & dlt) = CheckBoxEvolution.Caption
End If

If CheckBoxAutreRaison = True Then
Sheets(Produit).Range("M" & dlt) = CaseAutreRaison.Value
End If
End If
End If
Next
End sub
A voir également:

3 réponses

yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 Ambassadeur 1 552
28 juil. 2020 à 10:30
tu dois ajouter
exit for
juste avant le
end if
correspondant à
If C.Value = CaseGabarit.Value Then

ainsi:
            End If
        Exit For
        End If
    Next C
1
Super cela marche parfaitement, la ligne ne se créer qu'une fois.

Cependant, la ligne se créer donc à la première case non remplie, comment dois-je faire pour qu'elle s'insère juste en dessous de la ligne de demande du même gabarit déjà remplie ?

Merci beaucoup
0
ClaraBRND > ClaraBRND
28 juil. 2020 à 11:43
C'est bon j'ai ajouté un sortfield pour que la colonne de tableau se trie par ordre alphabétique.

Merci de votre aide
0
yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 1 552 > ClaraBRND
28 juil. 2020 à 11:46
n'avais-tu pas écrit "j'aimerais qu'excel aille à la dernière cellule vide"?
0
ClaraBRND > yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024
28 juil. 2020 à 12:21
Oui du coup elle rempli les champs à la dernière vide puis range la colonne par ordre alphabétique donc la deuxieme demande d'un même gabarit se met en dessous de la première
0
yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 Ambassadeur 1 552
28 juil. 2020 à 09:58
bonjour,
tu écris "voici la ligne de code ou se situe l'erreur": quelle erreur, quelle ligne?
peux-tu utiliser les balises de code quand tu partages du code? https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code (et préciser "basic" pour du VBA)
0
Il n'y avait pas de ligne d'erreur finalement, juste le code ne me donnait pas le résultat voulu. Mais c'ets bon vous avez réglé le problème ! merci
0
yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 Ambassadeur 1 552
28 juil. 2020 à 10:35
que va t'il se passer si le responsable produit veut ajouter un gabarit alors que des demandes de gabarits ont déjà été faites?
0
Il s'agit d'une macro différente. Il sélectionne le produit auquel ajouter un gabarit, tape le nom du nouveau gabarit (message d'erreur si le gabarit existe déjà) et cela ajoute ce nouveau gabarit à la feuille du produit. Les demandeur pourront alors le sélectionner via la macro demande de gabarit pour effectuer une demande
0
yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 1 552 > ClaraBRND
28 juil. 2020 à 11:48
je pense que tu as intérêt à avoir deux feuilles par produit, une avec la liste des gabarits, une autre avec la liste des gabarits demandés.
0
ClaraBRND > yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024
28 juil. 2020 à 12:23
Nous avons beaucoup de produit cela ferait donc trop de feuille. Mais cela fonctionne bien comme nous avons fait ici, merci !
0
yg_be Messages postés 23312 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 6 novembre 2024 1 552 > ClaraBRND
28 juil. 2020 à 14:06
peux-tu alors marquer la discussion comme résolue?
0