Microsoft 365 code pour ajout

  • Initiateur de la discussion Initiateur de la discussion Marvin57
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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

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
 
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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
9
Affichages
379
Réponses
11
Affichages
414
Réponses
5
Affichages
473
Réponses
11
Affichages
736
Réponses
5
Affichages
286
Réponses
22
Affichages
936
Retour