Créer nouvelle ligne et copier des informations [Résolu]

Signaler
-
Messages postés
12306
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2020
-
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

3 réponses

Messages postés
12306
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2020
693
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
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
> ClaraBRND
C'est bon j'ai ajouté un sortfield pour que la colonne de tableau se trie par ordre alphabétique.

Merci de votre aide
Messages postés
12306
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2020
693 > ClaraBRND
n'avais-tu pas écrit "j'aimerais qu'excel aille à la dernière cellule vide"?
>
Messages postés
12306
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2020

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
Messages postés
12306
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2020
693
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)
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
Messages postés
12306
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2020
693
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?
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
Messages postés
12306
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2020
693 > ClaraBRND
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.
>
Messages postés
12306
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2020

Nous avons beaucoup de produit cela ferait donc trop de feuille. Mais cela fonctionne bien comme nous avons fait ici, merci !
Messages postés
12306
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 septembre 2020
693 > ClaraBRND
peux-tu alors marquer la discussion comme résolue?