XL 2019 Validation de Données sur plusieurs colonnes

Caninge

XLDnaute Accro
Bonjour à tous,

Je n'arrive pas à trouver la solution.
Je viens donc vous demander naturellement la réponse.
Dans mon vrai tableau j'ai plusieurs colonnes de produits : Colonne B : AQ. Les colonnes ne sont pas identiques en nombre de lignes.
Dans mon exemple seulement 3.
Le but est de réunir ces 3 colonnes dans une seul colonne et dans l'ordre alphabétique.
Ensuite nommer la plage pour l'utiliser avec Validation de Données.
Mais voilà je coince. Pouvez-vous m'aider ?
Merci
CANINGE
 

Pièces jointes

  • Validation de Données sur 3 Colonnes.xlsx
    10.3 KB · Affichages: 15

Dan

XLDnaute Barbatruc
Bonjour
Oui je l'avais mise en plus en cas de rajout d'un produit. On peut la nommer X par exemple en AQ 24 si cela rend la tâche plus simple.
Voici ce que vous devez modifier
- Dans la feuille Produits, ajoutez un nom en AQ24 (ex: Liste)
- Allez dans la formule Produits
- Remplacez la formule par ceci :--> =DECALER(Produits!$AQ$25;;;NBVAL(Produits!$AQ:$AQ)-1)
- Allez ensuite dans l'éditeur VBA
- Dans le module collez le code ci-dessous
- Pour l'exécuter, cliquez sur Maj puis appuyez sur la touche F5 (ou FN + F5)
VB:
Sub Maj()
Dim i As Byte
Dim tablo()
Dim dlg As Integer
Dim plage As Range

With Sheets("Produits")
    dcol = .Cells(25, Columns.Count).End(xlToLeft).Column
    Set plage = .Range(.Cells(25, dcol), .Cells(.Cells(Rows.Count, dcol).End(xlUp).Row, dcol))
    plage.ClearContents
  
    For i = 2 To dcol - 1
        On Error Resume Next
        tablo = .Range(.Cells(25, i), .Cells(.Cells(Rows.Count, i).End(xlUp).Row, i)).Value
        dlg = .Cells(Rows.Count, dcol).End(xlUp).Row + 1
        If dlg < 25 Then dlg = 25
             
        If Err > 0 Then
            .Cells(dlg, dcol) = .Cells(25, i).Value
        Else: .Cells(dlg, dcol).Resize(UBound(tablo)) = tablo
        End If
    Next i
    Set plage = .Range(.Cells(24, dcol), .Cells(.Cells(Rows.Count, dcol).End(xlUp).Row, dcol))
    plage.Sort Key1:=.Cells(25, dcol), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
End Sub
 
Dernière édition:

Caninge

XLDnaute Accro
Bonjour à tous,
la proposition de Oguruma me parait un peu compliqué pour moi mais sans nul doute intéressante .
Je me suis plutôt penché sur celle de Dan.
Je crois avoir bien installé la macro, les formules mais cela ne fonctionne pas correctement.
Par exemple dans la colonne AN j'ai ajouté Vitpris 1 et Vitpris 2 mais ces deux valeurs n'apparaissent pas dans la colonne AP. j'ai du oublier quelque chose en route.
J'envoie le fichier.
A plus
 

Pièces jointes

  • Dépenses alimentaires 2021 - 2022 - 2023 - 2024 Essai.xlsm
    551.2 KB · Affichages: 5

Dan

XLDnaute Barbatruc
Par exemple dans la colonne AN j'ai ajouté Vitpris 1 et Vitpris 2 mais ces deux valeurs n'apparaissent pas dans la colonne AP. j'ai du oublier quelque chose en route.
Si elles apparaissent mais si vous modifiez l'existant vous devez relancer le code bien entendu.

NB : vous pouvez supprimer les 3 codes qui se trouve au dessus du code Maj. Ils ne servent plus.
 

Dan

XLDnaute Barbatruc
Ah ok. je comprends
En fait vous avez copié le code que j'avais placé ce matin. Mais là je l'ai modifié vers 13H et vous aviez déjà repris la version de ce matin
Donc supprimez celui dans le fichier et remplacez-le.
Vous verrez que j'ai ajouté un With sheets("Porduits").....
Désolé....
 

Dan

XLDnaute Barbatruc
J'ai copié le code de 10H41 mais je ne vois pas le deuxième.
Vous ne m'avez pas compris.
Il n'y a pas de deuxième code, je vous ai écrit que j'ai remplacé le code que j'avais mis à 10h41
Donc oubliez ce que vous avez copié dans le fichier et recopiez à nouveau ce code placé dans le post et associez-le à nouveau à votre bouton.
 
Dernière édition:

Caninge

XLDnaute Accro
j'y suis arrivé. une seule petite chose :
La plage de tous les produits se positionne dans la colonne AP et donc une colonne avant.
Il faudrait que la liste se déroule dans la plage nommé Plage_X.
J'ai essayé de modifié les codes. Rien à faire!
 

Pièces jointes

  • Dépenses alimentaires 2021 - 2022 - 2023 - 2024 Essai.xlsm
    540.5 KB · Affichages: 3

Dan

XLDnaute Barbatruc
La plage de tous les produits se positionne dans la colonne AP et donc une colonne avant.

Oui exact. Je vous remets tout le code dans lequel j'ai modifié quelques lignes
VB:
Sub Maj()
Dim i As Byte
Dim tablo()
Dim dlg As Integer
Dim plage As Range

With Sheets("Produits")
    dcol = .Cells(24, Columns.Count).End(xlToLeft).Column
    dlg = .Cells(Rows.Count, dcol).End(xlUp).Row
    If dlg < 25 Then dlg = 25
    .Range(.Cells(25, dcol), .Cells(dlg, dcol)).ClearContents
 
    For i = 2 To dcol - 1
        On Error Resume Next
        tablo = .Range(.Cells(25, i), .Cells(.Cells(Rows.Count, i).End(xlUp).Row, i)).Value
        dlg = .Cells(Rows.Count, dcol).End(xlUp).Row + 1
        If dlg < 25 Then dlg = 25
           
        If Err > 0 Then
            .Cells(dlg, dcol) = .Cells(25, i).Value
        Else: .Cells(dlg, dcol).Resize(UBound(tablo)) = tablo
        End If
    Next i
    Set plage = .Range(.Cells(25, dcol), .Cells(.Cells(Rows.Count, dcol).End(xlUp).Row, dcol))
    plage.Sort Key1:=.Cells(25, dcol), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
End Sub

Rem : Oubliez pas le titre à mettre en AQ24 comme écrit ici --> https://excel-downloads.com/threads...sur-plusieurs-colonnes.20080140/post-20620884
Dans votre fichier l'info est manquante

Désolé pour les petites erreurs:(
 
Dernière édition:

Caninge

XLDnaute Accro
Oui exact. Je vous remets tout le code dans lequel j'ai modifié quelques lignes
VB:
Sub Maj()
Dim i As Byte
Dim tablo()
Dim dlg As Integer
Dim plage As Range

With Sheets("Produits")
    dcol = .Cells(24, Columns.Count).End(xlToLeft).Column
    dlg = .Cells(Rows.Count, dcol).End(xlUp).Row
    If dlg < 25 Then dlg = 25
    .Range(.Cells(25, dcol), .Cells(dlg, dcol)).ClearContents
 
    For i = 2 To dcol - 1
        On Error Resume Next
        tablo = .Range(.Cells(25, i), .Cells(.Cells(Rows.Count, i).End(xlUp).Row, i)).Value
        dlg = .Cells(Rows.Count, dcol).End(xlUp).Row + 1
        If dlg < 25 Then dlg = 25
          
        If Err > 0 Then
            .Cells(dlg, dcol) = .Cells(25, i).Value
        Else: .Cells(dlg, dcol).Resize(UBound(tablo)) = tablo
        End If
    Next i
    Set plage = .Range(.Cells(25, dcol), .Cells(.Cells(Rows.Count, dcol).End(xlUp).Row, dcol))
    plage.Sort Key1:=.Cells(25, dcol), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
End Sub

Rem : Oubliez pas le titre à mettre en AQ24 comme écrit ici --> https://excel-downloads.com/threads...sur-plusieurs-colonnes.20080140/post-20620884
Dans votre fichier l'info est manquante

Désolé pour les petites erreurs:(
 

Caninge

XLDnaute Accro
Bonjour à tous, bonjour Dan,
apparemment tout fonctionne bien maintenant.
Dan il ne faut pas être désolé quand même. C'est plutôt moi qui devrait être désolé de vous
demander à chaque fois ce qui ne vas pas.
Dans tous les cas merci Dan sans oublier les autres également.
A La prochaine.
 

Discussions similaires

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh