Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Des ranges intelligentes qui se font pas avoir!

  • Initiateur de la discussion Initiateur de la discussion GS82
  • 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 !

GS82

XLDnaute Occasionnel
Salut les Xldiens et les Xldiennes
mon problème est ceci
j'ai 4 colonnes dont les valeurs des cellules sont saisies à partir de liste (menu validation/liste etc...)
j'aimerai bien que une fois j'ai choisi une valeur dans une cellule, on ne peut pas la rechoisir sur une cellule de la même ligne
Encore, si dans une ligne quelconque, je laisse une cellule vide, et je veux saisir une valeur dans une cellule à sa droite, celle ci passe automatiquement à la cellule vide que j'ai laissé à gauche
🙄
je joint un exeple qui pourra mieux presenter ma requete

merci et A+
 

Pièces jointes

Re : Des ranges intelligentes qui se font pas avoir!

Comme je le dis dans le premier message, il faut nommer le champs de saisie (sans la ligne de titre) par "saisie".
Est-ce que tu fais uniquement de l'ajout ou il t'arrive aussi de modifier ce que tu as renseigné comme le fais remarquer mécano41?
 
Re : Des ranges intelligentes qui se font pas avoir!

Attends que Skoobi ait corrigé son code ; il t'expliquera comment l'adapter.

Je viens de trouver également un défaut dans le mien : s'il y a plus d'une colonne derrière la valeur qu'on efface, le décalage à gauche se fait mal ; on ne recopie pas tout....

Cordialement
 
Re : Des ranges intelligentes qui se font pas avoir!

oh je crains que si
je modifie les donnée saisie
c'est possible
en fait il s'agit d'une application que je vais donné à mes collaborateur afin d'enregister les evenements qui surgissent au niveau des lignes de production
ces evenements peuvent etre de typ Q cad qualité, P cad panne etc
entre temps je veux pas qu'il inserent des donnée en redondance dans une meme ligne car ca fausse les analyses qui viennet après(taux d'arret par categories,etc...)
c'est pour cela que les données doivenet etre unique ca d'une part
et d'autre part je peux corriger les données que eux ils ont saisi selon ce que je pense
et donc je peux modifier des données deja saisie

Je suis vraimenet reconnaissant pour tout cet effort que vous etes en train de fournir
merci et j'espère atteindre votre niveau un jour
 
Re : Des ranges intelligentes qui se font pas avoir!

Voici une version corrigée et avec des instructions un peu plus compactes et qui a l'air de fonctionner correctement.

Quels que soient le nombre de lignes et de colonnes, cela doit fonctionner si :

- tu recopies bien les deux codes (feuille Ici et module 1)
- tu nommes la première cellule (celle qui contient "Choix1") : DebTab
- tu nommes la zone utile du tableau : Tableau

Si tu dois modifier le nombre de lignes et de colonnes, soit tu renommes la zone, soit tu agrandis ton tableau par le milieu en ajoutant des lignes, des colonnes ou des cellules ; dans ce cas la zone agrandie a pris le nom de l'ancienne zone.

Dans module 1, j'ai ajouté un sub d'une ligne à activer en cas d'erreur pendant les essais (j'avais expliqué pourquoi plus haut)

Bon courage

Cordialement
 

Pièces jointes

Dernière édition:
Re : Des ranges intelligentes qui se font pas avoir!

Re,

voici le code modifié permettant de gérer les modifications:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ColDeb As Long, ColFin As Long, NbOcc As Long, Lig As Long, Col As Long
If Not Intersect(Target, [saisie]) Is Nothing Then
  Application.EnableEvents = False
  ColDeb = [saisie].Columns(1).Column
  ColFin = [saisie].Columns([saisie].Columns.Count).Column
  Lig = Target.Row - Range("saisie")(1).Row + 1
  Col = Target.Column - Range("saisie")(1).Column + 1
  If Target.Value <> "" Then
    If Application.CountIf(Range(Cells(Target.Row, ColDeb), Cells(Target.Row, ColFin)), Target.Value) = 1 Then
      NbOcc = Application.CountA([saisie].Rows(Lig))
      If Col > NbOcc Then
        Range("saisie")(Lig, NbOcc).Value = Target.Value
        Target.ClearContents
      End If
    Else: Target.ClearContents
    End If
  End If
  Application.EnableEvents = True
End If
End Sub
 
Re : Des ranges intelligentes qui se font pas avoir!

Bonjour à tous,

Pour Skoobi :

Peux-tu me dire où l'on peut trouver l'utilisation des syntaxes raccourcies que tu utilises (j'ai un gros bouquin : rien là-dessus!) par exemple : Range("saisie")(Lig, Col) ou Range("saisie")(Position)? Les crochets, je connais mais je ne pense pas systématiquement à les utiliser, pourtant, ces syntaxes (il doit y en avoir d'autres) permettent de raccourcir les lignes de code et une fois l'habitude prise, on doit s'y retrouver aussi bien qu'avant.

Pour ton code : je ne sais pas si cela est important pour GS82, mais si l'on supprime un choix en effaçant une cellule, le décalage à gauche ne se fait pas, et si l'on sélectionne plus d'une cellule et que l'on efface, il y a erreur (le : If Target.Value <> "" Then... n'aime pas du tout!)

Cordialement
 
Dernière édition:
Re : Des ranges intelligentes qui se font pas avoir!

Bonjour à tous,

@ Mécano41, que je vénère
Range("saisie")(Lig, Col), c'est un raccourci pour offset, que j'utilise mais avec une seule variable, là je viens d'apprendre que deux étaient possibles, logique, un tableau ayant 2 dimensions, des lignes, des colonnes.

@Skoobi que j'adule
la méthode Private Sub Worksheet_Change(ByVal Target As Range) est fachée avec les listes de validation chez moi. En revanche, à la mimine, ça marche.
Y a-t-il un truc ou un machin spécial à régler ?

@GS82
Bravo pour ce sujet très intéressant.

A plus, je suis très content d'avoir appris encore, et du retour de Mécano, qui se faisait rare 😉

Gruick
 
Re : Des ranges intelligentes qui se font pas avoir!

la méthode Private Sub Worksheet_Change(ByVal Target As Range) est fachée avec les listes de validation chez moi. En revanche, à la mimine, ça marche.
Y a-t-il un truc ou un machin spécial à régler ?

Salut Gruick,

J'ai lu des messages d'intervenants pestant contre la version EXCEL4 Mac... il faudrait peut-être te renseigner de ce côté-là...

Je n'avais pas disparu mais, j'essaie d'aider sur quelques-uns des forums de Futura Sciences et certains sujets me prennent parfois beaucoup de temps. Lorsque ça se calme je viens ici pour poser des questions ou pour aider...

Cordialement
 
Re : Des ranges intelligentes qui se font pas avoir!

Re,

Voici un nouveau code prenant en compte la multi sélection ainsi que la suppression d'un choix (comme le faisait remarqué mécano41 😉).
J'ai également commenté le code pour aidé à la compréhension.
Voili voilou.

Code:
[/FONT]
[FONT=Arial]Private Sub Worksheet_Change(ByVal Target As Range)[/FONT]
[FONT=Arial]Dim ColDeb As Long, ColFin As Long, NbOcc As Long, Lig As Long, Col As Long[/FONT]
[FONT=Arial]Application.DisplayAlerts = False[/FONT]
[FONT=Arial]If Not Intersect(Target, [saisie]) Is Nothing Then[/FONT]
[FONT=Arial]  If Target.Count > 1 And Target.Count < Range("saisie").Count Then[/FONT]
[FONT=Arial]    [/FONT][FONT=Arial]MsgBox "Attention: le décalage ne s'est pas fait correctement. Prière de supprimer un seul à la fois!", vbExclamation[/FONT]
[FONT=Arial]    Exit Sub[/FONT]
[FONT=Arial]  [/FONT][FONT=Arial]ElseIf Target.Count = 1 Then[/FONT]
[FONT=Arial]    Application.EnableEvents = False[/FONT]
[FONT=Arial]  [/FONT][FONT=Arial]'première colonne du champ "saisie"[/FONT]
[FONT=Arial]    ColDeb = [saisie].Columns(1).Column[/FONT]
[FONT=Arial]  'dernière colonne du champ "saisie"[/FONT]
[FONT=Arial]    ColFin = [saisie].Columns([saisie].Columns.Count).Column[/FONT]
[FONT=Arial]  'numéro de ligne dans le champ "saisie"[/FONT]
[FONT=Arial]    Lig = Target.Row - Range("saisie")(1).Row + 1[/FONT]
[FONT=Arial]  'numéro de colonne dans le champ "saisie"[/FONT]
[FONT=Arial]    Col = Target.Column - Range("saisie")(1).Column + 1[/FONT]
[FONT=Arial]  'nombre de choix actuel sur la ligne[/FONT]
[FONT=Arial]    NbOcc = Application.CountA([saisie].Rows(Lig))[/FONT]
[FONT=Arial]  'si la cellule n'est pas vide[/FONT]
[FONT=Arial]    If Target.Value <> "" Then[/FONT]
[FONT=Arial]  'ici on vérifie que le choix n'existe pas déjà[/FONT]
[FONT=Arial]      [/FONT][FONT=Arial]If Application.CountIf(Range(Cells(Target.Row, ColDeb), Cells(Target.Row, ColFin)), Target.Value) = 1 Then[/FONT]
[FONT=Arial]        If Col > NbOcc Then[/FONT]
[FONT=Arial]          Range("saisie")(Lig, NbOcc).Value = Target.Value[/FONT]
[FONT=Arial]          [/FONT][FONT=Arial]Target.ClearContents[/FONT]
[FONT=Arial]        End If[/FONT]
[FONT=Arial]  'si le choix existe déjà[/FONT]
[FONT=Arial]      Else: Target.ClearContents[/FONT]
[FONT=Arial]      End If[/FONT]
[FONT=Arial]  'si la cellule est vide[/FONT]
[FONT=Arial]    [/FONT][FONT=Arial]Else[/FONT]
[FONT=Arial]      If Target.Column < ColFin Then[/FONT]
[FONT=Arial]        For i = Target.Column To ColFin - 1[/FONT]
[FONT=Arial]          Cells(Target.Row, i).Value = Cells(Target.Row, i + 1).Value[/FONT]
[FONT=Arial]        Next[/FONT]
[FONT=Arial]        Cells(Target.Row, ColFin).ClearContents[/FONT]
[FONT=Arial]      End If[/FONT]
[FONT=Arial]    End If[/FONT]
[FONT=Arial]    Application.EnableEvents = True[/FONT]
[FONT=Arial]  End If[/FONT]
[FONT=Arial]End If[/FONT]
[FONT=Arial]Application.DisplayAlerts = True[/FONT]
[FONT=Arial] [/FONT]
[FONT=Arial]End Sub[/FONT]
[FONT=Arial]


Petite précision à propos de l'explication donné par Gruick (que je salue au passage J):
Je vous invite à faire ce test (ce sera plus compréhensif qu'un long discours):
Code:
[/FONT]
[FONT=Arial]range("A1:B10").Offset(2,2).select[/FONT]
[FONT=Arial]range("A1:B10")(2,2).select [/FONT]
[FONT=Arial]
 
Re : Des ranges intelligentes qui se font pas avoir!

Petite précision à propos de l'explication donné par Gruick (que je salue au passage Je vous invite à faire ce test ...

Bonjour,

J'avais compris ce que tu as fait (et même déjà réutilisé ailleurs... 😀 ) mais j'aurais voulu connaître un endroit où l'on présente ces différents "raccourcis", car il doit bien en exister d'autres du même tonneau...et c'est intéressant...

Cordialement
 
Re : Des ranges intelligentes qui se font pas avoir!

Re,

mais j'aurais voulu connaître un endroit où l'on présente ces différents "raccourcis",

Attention!!!
Ce n'est pas un "raccourci"!.
Les 2 lignes ne font pas du tout la même chose.
Comment je le sais, je sais plus...dans un bouquin je crois (pas le même que le tiens apparement 😀 [humour]).
 
Re : Des ranges intelligentes qui se font pas avoir!

re,

Je suis confus de honte...😱 et je m'aplatis en excuses

J'ai voulu faire l'intéressant, et plouf ! (Pas mon jour...) et pas su l'expliquer
car je m'en suis souvent servi. Je ne sais plus où me mettre.

Skoobi, tu es une sommité.
S'il y avait une macro du mois, je voterai pour la tienne.

A plus mes deux maîtres, sûrement pour des questions plus que des réponses.

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

M
Réponses
6
Affichages
2 K
Maryloo2005
M
P
  • Question Question
Réponses
5
Affichages
2 K
PierreJeanPierre
P
L
Réponses
2
Affichages
1 K
lowkick
L
G
Réponses
16
Affichages
2 K
G
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…