Code VBA pour rechercher avec excel

Résolu/Fermé
sekouausud - Modifié par sekouausud le 13/01/2017 à 10:54
 sekouausud - 17 janv. 2017 à 18:16
Bonjour,
Je souhaite avoir un code pour :
- Dans ma colonneB, j'ai des numéros pouvant aller jusqu'à 5000 et un même numéro peut apparaître plusieurs fois (maximum 19 fois et il y a déjà une formule écrite pour cela) mais il doit y avoir une continuité dans leur arrivée,, c'est-à-dire : quand je saisi "1" je peux continuer à mettre d'autres "1" et après le "1" c'est forcément le "2" que je peux suivre donc, impossible de sauter "2" pour saisi le "3". Ainsi à la suite du "3" par exemple je ne peux saisir que le "4" ou répéter soit le "1", le"2" et "3" ;
- Dans les colonnes de F à L, j'ai des informations associées au numéro correspondant de la cellule en colonne B (en F, prénom - en G, nom - en H, Date - en I, Lieu nais - en J, Sexe - en K, adresse et en L , Tel)
- Maintenant, je voudrais avoir un code en colonne B pour que si je saisi un numéro, excel vérifie et exécute l'action appropriée :
a/ si le numéro vient pour la première fois, excel l'accepte et je poursuis la saisie des données dans les colonnes F à L,
b/ si le numéro existe déjà, excel accepte puis recherche dans ma plage "F:L" puis positionne dans les colonnes et cellules correspondantes les données associées au numéro , ce sont des données qui existent parce que le numéro a déjà été utilisé.
NB: Les lignes de ma plage vont de 9 à 5008

Merci beaucoup d'avance à tous.
A voir également:

2 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 709
13 janv. 2017 à 21:21
Bonjour sekouausud,

Cette macro à mettre dans ta feuille concernée devrait le faire :
Private Sub Worksheet_Change(ByVal sel As Range)
If sel.CountLarge > 1 Then Exit Sub
If Not Intersect(sel, [B:B]) Is Nothing Then
   Dim cel As Range, svt As Variant
   Set cel = Range("B2:B" & sel.Row - 1).Find(sel, , , xlWhole)
   If Not cel Is Nothing Then
        Cells(cel.Row, "F").Resize(1, 7).Copy Destination:=Cells(sel.Row, "F")
   Else
        svt = Application.WorksheetFunction.Max(Range("B2:B" & sel.Row - 1)) + 1
        If svt <> sel.Value Then
            sel.Value = svt: MsgBox "Vous avez oublié " & svt
        End If
   End If
End If
End Sub
0
Bonjour,

Le code marche bien, j'ai même augmenté les colonnes mais :

- ( sel.Value = svt: MsgBox "Vous avez oublié " & svt) que veut dire ce message ?
- Aussi,je ne sais pas si c'est impératif d'ouvrir une nouvelle discussion pour gérer mon nouveau problème : dans la feuille4 actuelle j'ai 2 colonnes AF ; AG, et dans une autre feuille2, 2 cellules fixes C4 (valeur=500) et C5(valeur=600). Maintenant, je voudrais que si dans la cellule en AF9 la valeur est égale à celle de C4, alors, en AG9 j'obtiens "-" en lieu et place de "600" et inversement.
En fait, AF9 et AG9 ne doivent pas contenir en même temps des chiffres car si l'une AF9 ="500", "AG" doit forcément être égale à "-" et inversément. Moi j'hésite à créer dans la feuille2 une autre cellule C6 = "-" pour l'utiliser dans une formule de test logique. Qu'en pensez-vous ?

Merci beaucoup
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 709
14 janv. 2017 à 17:30
Bonjour,

que veut dire ce message ?
Tu as dit " après le "1" c'est forcément le "2" que je peux suivre donc, "
donc si tu saisis 3, je te signale que tu as loupé le 2 !

Dans ton autre raisonnement, tu voudrais apparemment lier les 2 cellules entre elles, ce qui est possible mais en mettant une formule tu ne peux plus saisir car c'est valeur ou formule pas les 2.
0
sekouausud > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
17 janv. 2017 à 10:55
Bonjour,
J'avais voyagé, d'où le retard de ma réaction.
A / Vous avez raison au sujet de votre interrogation, c'est moi qui me suis exprimé de façon confuse, je m'en excuse. En fait, en disant " après le "1" c'est forcément le "2" que je peux suivre donc....", la saisie de "3" dont je parle suppose que le "2" a été déjà attribué à un porteur auparavant et qu'à ce stade après le "3" aussi c'est le "4" qui doit forcément suivre.
Je rappelle que le code envoyé à ce propos marche bien.
B / Concernant les cellules de AF et AG, elles ne sont pas liées entre elles mais plutôt à 2 'autres cellules C4 et C5 d'une autre feuille mais finalement, je pense avoir trouvé mieux en reformant la feuille. Ainsi c'en AH où doit s'afficher "500" ou "600" selon des critères définis dans la feuille paramètres :C4 = critère et C5 =500 / E4 = critère et E5 = 600 puis j'ai inséré 1 colonne W pour les critères ; ce qui me donne en AH la formule suivante qui marche et les valeurs s'affichent automatiquement dès remplissage d'une cellule de en W9.
=SI(W9=Paramètres!$C$4;Paramètres!$C$5;Paramètres!$E$5).
Seulement, mon souci actuel c'est créer un code ou une formule pour afficher en AM9 la somme des valeurs de "AH9:AL" si W9 correspond à C4 et afficher la somme des valeurs de "AK:AL" si W9 correspond à E4 en d'autres termes la plage des valeurs à additionner varie en fonction du critère qui est chargé en colonne W.

Merci pour l'intérêt que vous accorder à mon problème

Cordialement
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 709
17 janv. 2017 à 16:46
Bonjour,
Il te suffit d'utiliser la même technique :
=SI(W9=Paramètres!$C$4;SOMME(AH9:AL9);SOMME(AK9:AL9))
0
sekouausud > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
17 janv. 2017 à 18:16
Exacte, ça marche et j'avais essayé cette formule mais il y manquait la 2e parenthèse.
merci à vous.

Cordialement
0