Microsoft 365 Comparer chaque cellule contiguë de deux colonnes, et les transférer

t.dort

XLDnaute Nouveau
Bonjour
je vous fais part de mon problème, en essayant dêtre le plus le plus circonscrit possible… Pfuii !

0. il y a 4 x onglets « Données » / « Accords » / « désaccords » / « Archives »
1. La colonne H / vente = "Oui" ou "Non" ou "en attente"
2. La colonne I / Date= «une date quelconque » ou est vide : exemple "10.04.23" ou est vide ""

3. Si H="Oui" et sa cellule contiguë I= " " … est vide, pas de date, (une seule des conditions est remplie)
3.1 alors message : "il manque une date de vente" et stopper VBA, ne rien faire

4. Si H= "Oui" et I ="avec une date" … (les 2 conditions sont remplies)
4.1 faire toujours un copier coller de toutes les lignes dans de l’onglet « Données dans l'onglet "Archives". les nouvelles données s’ajouteront en dessous ultérieurement
4.2 copier chaque lignes de H = « Oui » et I= « avec une date » séparément dans l'onglet "Accords" et effacer les lignes dans l'onglet "Données"
4.2 copier chaque lignes de la colonne H ="Non", dans l'onglet " Désaccords" et effacer les lignes dans l'onglet "Données"

Merci d’avance pour vos réponses
t.dort
 

Pièces jointes

  • Classeur_vente.xlsm
    23.8 KB · Affichages: 6
Solution
Nlig = [Tdonnées].Rows.Count
Vous avez essayer ma PJ ?
J'ai renommé les quatretableaux Tdonnées, Taccords, Tdésaccords, Tarchives.
testez et ça marche :
20230503_212134.gif

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour T.dort, et bienvenu sur XLD,
Un essai en PJ avec :
VB:
Sub Archive()
    Application.ScreenUpdating = False
    Dim L%, C%
    Nlig = [Tdonnées].Rows.Count
    For L = Nlig To 1 Step -1
'NON
        If UCase([Tdonnées[Vente]].Item(L)) = "NON" Then
            If [Tdésaccords].Item(1, 1) = "" Then NligD = 1 Else NligD = 1 + [Tdésaccords].Rows.Count
            For C = 1 To 11
                [Tdésaccords].Item(NligD, C) = [Tdonnées].Item(L, C)
            Next C
            [Tdonnées].ListObject.ListRows(L).Delete
        End If
'OUI
        If UCase([Tdonnées[Vente]].Item(L)) = "OUI" And IsDate([Tdonnées[Date]].Item(L)) Then
            If [Taccords].Item(1, 1) = "" Then NligA = 1 Else NligA = 1 + [Taccords].Rows.Count
            If [Tarchives].Item(1, 1) = "" Then NligArchives = 1 Else NligArchives = 1 + [Tarchives].Rows.Count
            For C = 1 To 11
                [Taccords].Item(NligA, C) = [Tdonnées].Item(L, C)
                [Tarchives].Item(NligArchives, C) = [Tdonnées].Item(L, C)
            Next C
            [Tdonnées].ListObject.ListRows(L).Delete
        End If
'Incidents
        If UCase([Tdonnées[Vente]].Item(L)) = "" And IsDate([Tdonnées[Date]].Item(L)) Then
            [Tdonnées[Vente]].Item(L) = "Statut ?"
        ElseIf UCase([Tdonnées[Vente]].Item(L)) = "OUI" And IsDate([Tdonnées[Date]].Item(L)) = False Then
            [Tdonnées[Date]].Item(L) = "Date ?"
        End If
    Next L
End Sub
 

Pièces jointes

  • Classeur_vente.xlsm
    25.5 KB · Affichages: 4

t.dort

XLDnaute Nouveau
Bonjour T.dort, et bienvenu sur XLD,
Un essai en PJ avec :
VB:
Sub Archive()
    Application.ScreenUpdating = False
    Dim L%, C%
    Nlig = [Tdonnées].Rows.Count
    For L = Nlig To 1 Step -1
'NON
        If UCase([Tdonnées[Vente]].Item(L)) = "NON" Then
            If [Tdésaccords].Item(1, 1) = "" Then NligD = 1 Else NligD = 1 + [Tdésaccords].Rows.Count
            For C = 1 To 11
                [Tdésaccords].Item(NligD, C) = [Tdonnées].Item(L, C)
            Next C
            [Tdonnées].ListObject.ListRows(L).Delete
        End If
'OUI
        If UCase([Tdonnées[Vente]].Item(L)) = "OUI" And IsDate([Tdonnées[Date]].Item(L)) Then
            If [Taccords].Item(1, 1) = "" Then NligA = 1 Else NligA = 1 + [Taccords].Rows.Count
            If [Tarchives].Item(1, 1) = "" Then NligArchives = 1 Else NligArchives = 1 + [Tarchives].Rows.Count
            For C = 1 To 11
                [Taccords].Item(NligA, C) = [Tdonnées].Item(L, C)
                [Tarchives].Item(NligArchives, C) = [Tdonnées].Item(L, C)
            Next C
            [Tdonnées].ListObject.ListRows(L).Delete
        End If
'Incidents
        If UCase([Tdonnées[Vente]].Item(L)) = "" And IsDate([Tdonnées[Date]].Item(L)) Then
            [Tdonnées[Vente]].Item(L) = "Statut ?"
        ElseIf UCase([Tdonnées[Vente]].Item(L)) = "OUI" And IsDate([Tdonnées[Date]].Item(L)) = False Then
            [Tdonnées[Date]].Item(L) = "Date ?"
        End If
    Next L
End Sub
Bonjour
je te remercie pour toute ton implication...mais..cela ne fonctione pas!
la macro m'envoie une erreur "Nlig = [Tdonnées].Rows.Count".. ??

j'aurais une peitie remarque:
la 1ière condition primordiale à remplir, est avant tout si A="oui" et B="". de la découlent toutes les autres conditions.
A="Non" n'intervient que si la 1ière condition est remplie.
 

vgendron

XLDnaute Barbatruc
Bonjour
pfuii..vraiment désolé, mais la macro s'arrête au départ:
'Control de saisie complète
With Sheets("Données").ListObjects("t_Données") 'avec la table "t_Données" de la feuille "Données"

je ne comprends pas trop pourquoi

si tu as fait un copier coller de la macro dans ton fichier, il faut enlever les espaces qu'il y a après "oui" dans ta colonne vente

sinon. bah.. elle s'arrete si il y a un oui et pas de date..
 

t.dort

XLDnaute Nouveau
Bonjour
pfuii..vraiment désolé, mais la macro s'arrête au départ:
'Control de saisie complète
With Sheets("Données").ListObjects("t_Données") 'avec la table "t_Données" de la feuille "Données"

je ne comprends pas trop pourquoi
Rebonjour

j'ai générer un nouveau fichier excel et recopier toute ta macro:
1. je recois bien le message d'erreur
2. Maia la macro s'arrête à : 'Recopie de toutes les lignes dans la feuille archives
-> With Sheets("Archives").ListObjects("t_Archives")
 

Cousinhub

XLDnaute Barbatruc
Inactif
Re-,
Comme ma petite intervention est passée inaperçue....
T.Dort, il est déconseillé de multi-poster... (Une simple lecture des chartes te l'aurait appris....)
Soit tu réponds à @chris dans l'autre forum, et tu clos le fil dédié, soit tu préviens que tu as demandé sur plusieurs forums...
Les personnes qui prennent le temps de te répondre n'ont peut-être pas que ton pb....
Bonne soirée
Edit, il est vrai que mon "Bonsoir", il suffisait de cliquer dessus....
 

Discussions similaires

Réponses
9
Affichages
146

Statistiques des forums

Discussions
313 309
Messages
2 097 030
Membres
106 812
dernier inscrit
Excellou74