Microsoft 365 code pour ajout

Marvin57

XLDnaute Occasionnel
Bonjour tout le monde,

dans le fichier ci-joint, j'aurai besoin de votre aide s'il vous plaît.

Explications :

Il y a un onglet nommé RESERVE et un onglet nommé AJOUT.

Mon souhait serait de pouvoir ajouter via l'onglet AJOUT des données non existantes en RESERVE. C'est à dire le créer lors d'un ajout parmi les autres en créant un nouvel ID comme vous le voyez dans le tableau de l'onglet ajout sur les deux dernières lignes.

Donc en gros, mettre à jour les données RESERVE et si besoin comme les deux dernières lignes du tableau de l'onglet AJOUT n'existent pas dans la RESERVE, alors il faudrait créer les ID non existant et mettre à jour la RESERVE.

J'espère avoir bien expliqué mon souhait.

Merci d'avance à vous.

Marvin57
 

Pièces jointes

  • Marvin57 ajouter.xlsx
    13.8 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Marvin,
Un essai en PJ :
VB:
Sub UpdateReserve()
Dim Ajout, Reserve, Najout%, i%, j%, C%, Present
Ajout = [Tableau2]              ' Transfert tableau Ajout dans array
Reserve = [Tableau5]            ' Transfert tableau Reserve dans array
Najout = 0                      ' Pour compter le nombre de lignes ajoutées pour message de sortie
For i = 1 To UBound(Ajout)      ' pour toutes les lignes
    ID = Ajout(i, 10)           ' On récupère l'ID
    Present = 0                 ' Présent=0 alors ID absent, =1 ID déjà present
    For j = 1 To UBound(Reserve) ' Pour chaque ligne de Reserve
        If Reserve(j, 1) = Ajout(i, 10) Then    ' On vérifie les ID
            Present = 1: Exit For               ' Si ID présent, on sort
        End If
    Next j
    If Present = 0 Then         ' Donc ID absent
        [Tableau5].ListObject.ListRows.Add              ' Alors on crée une nouvelle ligne
        Ligne = [Tableau5].ListObject.ListRows.Count
        For C = 1 To 9          ' On recopie les 9 champ décalés de 1 en colonne
            [Tableau5].Item(Ligne, C + 1) = [Tableau2].Item(i, C)
        Next C
        [Tableau5].Item(Ligne, 1) = [Tableau2].Item(i, 10)  ' On recopie l'ID du champ 10 dans le champ 1
        Najout = Najout + 1     ' On incrément le nbre de lignes ajoutées
    End If
Next i
If Najout = 0 Then MsgBox "Aucune ligne ajoutée." Else MsgBox Najout & " ligne(s) ajoutée(s)." ' Bilan en sortie
End Sub
 

Pièces jointes

  • Marvin57 ajouter.xlsm
    21 KB · Affichages: 1

Marvin57

XLDnaute Occasionnel
Bonjour Marvin,
Un essai en PJ :
VB:
Sub UpdateReserve()
Dim Ajout, Reserve, Najout%, i%, j%, C%, Present
Ajout = [Tableau2]              ' Transfert tableau Ajout dans array
Reserve = [Tableau5]            ' Transfert tableau Reserve dans array
Najout = 0                      ' Pour compter le nombre de lignes ajoutées pour message de sortie
For i = 1 To UBound(Ajout)      ' pour toutes les lignes
    ID = Ajout(i, 10)           ' On récupère l'ID
    Present = 0                 ' Présent=0 alors ID absent, =1 ID déjà present
    For j = 1 To UBound(Reserve) ' Pour chaque ligne de Reserve
        If Reserve(j, 1) = Ajout(i, 10) Then    ' On vérifie les ID
            Present = 1: Exit For               ' Si ID présent, on sort
        End If
    Next j
    If Present = 0 Then         ' Donc ID absent
        [Tableau5].ListObject.ListRows.Add              ' Alors on crée une nouvelle ligne
        Ligne = [Tableau5].ListObject.ListRows.Count
        For C = 1 To 9          ' On recopie les 9 champ décalés de 1 en colonne
            [Tableau5].Item(Ligne, C + 1) = [Tableau2].Item(i, C)
        Next C
        [Tableau5].Item(Ligne, 1) = [Tableau2].Item(i, 10)  ' On recopie l'ID du champ 10 dans le champ 1
        Najout = Najout + 1     ' On incrément le nbre de lignes ajoutées
    End If
Next i
If Najout = 0 Then MsgBox "Aucune ligne ajoutée." Else MsgBox Najout & " ligne(s) ajoutée(s)." ' Bilan en sortie
End Sub
Bonjour sylvanu,

Merci pour cette première proposition.
Alors le rajout des ID non existants fonctionne comme voulu. Mais il fallait également mettre à jour la RESERVE avec les autres ID.

Est-ce possible ?

Merci d'avance
Marvin57
 

Marvin57

XLDnaute Occasionnel
Bonjour Marvin,
Un essai en PJ :
VB:
Sub UpdateReserve()
Dim Ajout, Reserve, Najout%, i%, j%, C%, Present
Ajout = [Tableau2]              ' Transfert tableau Ajout dans array
Reserve = [Tableau5]            ' Transfert tableau Reserve dans array
Najout = 0                      ' Pour compter le nombre de lignes ajoutées pour message de sortie
For i = 1 To UBound(Ajout)      ' pour toutes les lignes
    ID = Ajout(i, 10)           ' On récupère l'ID
    Present = 0                 ' Présent=0 alors ID absent, =1 ID déjà present
    For j = 1 To UBound(Reserve) ' Pour chaque ligne de Reserve
        If Reserve(j, 1) = Ajout(i, 10) Then    ' On vérifie les ID
            Present = 1: Exit For               ' Si ID présent, on sort
        End If
    Next j
    If Present = 0 Then         ' Donc ID absent
        [Tableau5].ListObject.ListRows.Add              ' Alors on crée une nouvelle ligne
        Ligne = [Tableau5].ListObject.ListRows.Count
        For C = 1 To 9          ' On recopie les 9 champ décalés de 1 en colonne
            [Tableau5].Item(Ligne, C + 1) = [Tableau2].Item(i, C)
        Next C
        [Tableau5].Item(Ligne, 1) = [Tableau2].Item(i, 10)  ' On recopie l'ID du champ 10 dans le champ 1
        Najout = Najout + 1     ' On incrément le nbre de lignes ajoutées
    End If
Next i
If Najout = 0 Then MsgBox "Aucune ligne ajoutée." Else MsgBox Najout & " ligne(s) ajoutée(s)." ' Bilan en sortie
End Sub
Re sylvanu,

écoutez, je suis vraiment désolé mais je me suis trompé ce matin en vous transmettant le fichier !!

Dans le fichier corrigé ci présent vous verrez que dans l'onglet AJOUT la colonne NOM se trouve à l'extrémité droite et non à gauche comme au départ. Je ne sais pas ou j'avais la tête, désolé.

Donc pour revenir au souhait :

Si l'ID est inexistant il doit le créer, cela avait bien fonctionné. Sauf que en même temps il doit placé la nouvelle ligne avec le NOM, sinon il ne la place pas au bon endroit.
Comme vous le verrez j'ai cliquez pour transférer et voyez le désordre qu'il fait.
J'espère que vous me pardonnez .

A+
Marvin57
 

Pièces jointes

  • Marvin57 ajouter.xlsx
    13.8 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Le fichier est un xlsx sans les macros, que dois je vérifier ?
Comme vous le verrez j'ai cliquez pour transférer et voyez le désordre qu'il fait.

Dans la V2 j'ai fait l'essai :
1713439970475.png

Les deux lignes R1214 et R1215 sont bien recopiées avec les bonnes valeurs.

Donc je ne comprends rien, faites un effort de clarté. :)
 

Marvin57

XLDnaute Occasionnel
Le fichier est un xlsx sans les macros, que dois je vérifier ?


Dans la V2 j'ai fait l'essai :
Regarde la pièce jointe 1195294
Les deux lignes R1214 et R1215 sont bien recopiées avec les bonnes valeurs.

Donc je ne comprends rien, faites un effort de clarté. :)
Désolé sylvanu,

ouvrez le fichier et cliquez sur le bouton pour transférer et vous verrez déja qu'il ne place pas dans l'ordre et qu'il place les ID en première colonne ainsi qu'en dernière colonne.
Mon erreur ce matin était la colonne NOM dans l'onglet AJOUT, car en réalité elle se situe comme dans ce fichier à la dernière colonne. Donc lors d'une nouvelle création d'un ID il devra placé la nouvelle ligne non à la fin du tableau de l'onglet RESERVE mais dans l'ordre des NOMS en colonne NOM.

J'espère que j'ai bien expliqué cette fois ci.🙈
 

Pièces jointes

  • Marvin57 ajouter.xlsm
    26.4 KB · Affichages: 1

Discussions similaires

Réponses
9
Affichages
146
Réponses
11
Affichages
198
Réponses
2
Affichages
131
Réponses
26
Affichages
871
Réponses
6
Affichages
529
  • Résolu(e)
Microsoft 365 Code de tri
Réponses
22
Affichages
319
Réponses
11
Affichages
487
Réponses
93
Affichages
2 K

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87