VBA excel touver une cellule dans un tableau

Résolu/Fermé
japlo Messages postés 39 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 15 février 2011 - 14 févr. 2011 à 14:11
japlo Messages postés 39 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 15 février 2011 - 15 févr. 2011 à 18:46
Bonjour,
je cherche un code qui me premettrait de localiser une cellule dans un onglet selon 3 criteres.

J'ai donc trois résultat qui se trouve dans la feuil1 et j'aimerai donc pouvoir trouver la cellule correspondante dans un tableau.
- les communes dans la premiere colonne.
- lignes 1, de 1 à 31 qui sont les jours du mois
- en desous du jours du mois j'ai 4 criteres par jour

Cordialement




A voir également:

13 réponses

ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié par ccm81 le 14/02/2011 à 14:32
bonjour
quelques precisions me semblent nécessaires
Q1. est ce que tu cherches une formule excel ou un code VBA
Q2. tu cherches à localiser la cellule qui correspond par exemple a
(Lille, 25, pluie)
Q3. J'ai du mal à imaginer le tableau dans lequel tu cherches à localiser la cellule
peux tu nous en decrire une partie ou bien envoyer un exemple (format excel 2003) sur le site de ci-joint.fr (même avec données bidon)

bonne suite
0
japlo Messages postés 39 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 15 février 2011 2
14 févr. 2011 à 15:51
Slt,

En fait je recherche un code vba,ensuite oui je recherche à faire corresponde 3 éléments pour trouve une cellule.
je te joint le fichier.

Ensuite lorque j'aurrai déterminer la cellule proprement dite il me restera à faire additionner les interventions à la suite mais avec le fichier se sera surement plus clair pour toi.


http://www.cijoint.fr/cjlink.php?file=cj201102/cijp7AhJEB.xls

Cordialement
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
14 févr. 2011 à 18:09
re


détails dans la feuille interventions, ça doit commencer a ressembler a ce que tu veux

les données saisies, ça se positionne (en principe) dans la feuille mois, sur la (cellule commune,jour+critere)

http://www.cijoint.fr/cjlink.php?file=cj201102/cijzGMbqw2.xls

bonne route
0
japlo Messages postés 39 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 15 février 2011 2
14 févr. 2011 à 18:57
Slt,

nickel c'est exactement ce que je voulais demain j'etudirai plus en profondeur histoire de comprendre ce ce que tu as fait et j'aurrai surement une ou deux questions en passant avant de cloturer le sujet.

ensuite je me pencherai sur la maniere de calculer les interventions au fur et à mesure pour ça j'ai une petite idee.

Bonne soirée japlo
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
14 févr. 2011 à 20:48
re

une nouvelle version qui simplifie et met un peu d'ordre dans le code

http://www.cijoint.fr/cjlink.php?file=cj201102/cijIr1EugP.xls

RQ. les modules 1 & 2 n'on pas l'air utiles

bonne suite
0
japlo Messages postés 39 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 15 février 2011 2
Modifié par japlo le 15/02/2011 à 14:58
Slt
les données saisies, ça se positionne (en principe) dans la feuille mois, sur la (cellule commune,jour+critere)

Je ne savais pas tu veux créer un onglet supplémentaire regroupent toutes les données.


RQ. les modules 1 & 2 n'on pas l'air utiles

Non ils ne sont pas utile.

Peux tu regarder j'ai rajouté une ligne, en fait j'essaye d'additionner les interventions au fir et a mesure.



'fermeture de userform4
Private Sub CommandButton1_Click()
Dim Tcritere
Dim Tmois
Dim licom As Long, nbli As Long, li As Long, cocri
Dim co As Long, nbco As Long
Dim trouve As Boolean
Tmois = Array(" ", "Jan", "Fev", "Mar", "Avr", "Mai", "Juin", "Jui", "Aou", "Sep", "Oct", "Nov", "Déc")
Tcritere = Array(" ", "SAP", "AVP", "INC", "DIV")
If CheckBox1 Or CheckBox2 Or CheckBox3 Or CheckBox4 Or CheckBox5 Or CheckBox6 _
Or CheckBox7 Or CheckBox8 Or CheckBox8 Or CheckBox9 Or CheckBox10 Or CheckBox11 Then
Sheets(Tmois(mois)).Activate
Sheets(Tmois(mois)).Select
With ActiveSheet
nbli = Range("A65536").End(xlUp).Row
trouve = False
For li = 3 To nbli
If .Cells(li, 1) = commune Then
trouve = True
licom = li ' ligne commune
Exit For
End If
Next li
If trouve Then
trouve = False
For li = 1 To 4
If Tcritere(li) = critere Then
trouve = True
cocri = li ' numéro critere
Exit For
End If
Next li
If trouve Then
.Cells(licom, 1 + (jour - 1) * 4 + cocri).Select
End If
End If
End With
Else
MsgBox "Vous devez sélectionner au moins un véhicule avant de valider...", vbInformation, "Merci de suivre les instructions..."
Exit Sub
End If
Unload Me
a$ = ActiveSheet.Name
Sheets("a$").[ActiveCell].Value = Sheets("a$").[ActiveCell].Value + IIf(commandebutton1.Value, 1, -1)
End Sub

Cordialement
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
15 févr. 2011 à 14:03
Bonjour,
Bonjour ccm,
J'ai fait quelques modif dans ton code, il y a une ou deux remarque que j'ai mis en commentaires.
Pour que le code fonctionne deux modif sont nécessaire.
Les CheckBox 5 et 6 sont inversés, les remettre dans l'ordre. le 5 = le 6 et le 6 = le 5
Ensuite ajouter un 0 devant le N° des checkbox, CheckBox01, CheckBox02.. CheckBox09
Supprimer TOUT le code du module et remplacer par...
'fermeture de userform4
Private Sub CommandButton1_Click()
Dim Tcritere
Dim Tmois
Dim licom As Long, nbli As Long, li As Long, cocri
Dim co As Long, nbco As Long
Dim trouve As Boolean
Tmois = Array(" ", "Jan", "Fev", "Mar", "Avr", "Mai", "Juin", "Jui", "Aou", "Sep", "Oct", "Nov", "Déc")
Tcritere = Array(" ", "SAP", "AVP", "INC", "DIV")
If VoirCheck Then
  Sheets(Tmois(Mois)).Activate
'  Sheets(Tmois(mois)).Select  'Doublon
  With ActiveSheet
  'ATTENTION, avec xlUp comprend également les lignes 16 et 17 (vides)
  'ainsi que les lignes 18 à 21
  'Le code ci-dessous recherche jusque la ligne 15 (ce qui est logique)
    nbli = Range("A3").End(xlDown).Row
    trouve = False
    For li = 3 To nbli
     If .Cells(li, 1) = commune Then
        trouve = True
        licom = li  ' ligne commune
        Exit For
      End If
    Next li
    If trouve Then
      trouve = False
      For li = 1 To 4
        If Tcritere(li) = critere Then
          trouve = True
          cocri = li  ' numéro critere
          Exit For
        End If
      Next li
      If trouve Then
        .Cells(licom, 1 + (jour - 1) * 4 + cocri).Select
      End If
    End If
  End With
Else
  MsgBox "Vous devez sélectionner au moins un véhicule avant de valider...", vbInformation, "Merci de suivre les instructions..."
  Exit Sub
End If
Unload Me
a$ = ActiveSheet.Name
End Sub

'Cette fonction remplace les 11 événement Change des CheckBox
'Et le test des 11 CheckBox pour savoir si au moins un est sélectiionner
'Evite aussi de devoir décrémenter la feuille si "DéCheck" un checkBox
Private Function VoirCheck() As Boolean
Dim Chk As Control, Lig As Byte
    With Sheets("Véhicules")
    For Each Chk In Me.Controls
        If TypeOf Chk Is MSForms.CheckBox Then
            If Chk.Value Then
                Lig = Val(Right(Chk.Name, 2))
                Cells(Lig, 2) = Cells(Lig, 2) + 1: VoirCheck = True
            End If
        End If
    Next Chk
    End With
End Function

A+
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié par ccm81 le 15/02/2011 à 16:01
re

1. je ne savais pas tu veux créer un onglet supplémentaire regroupent toutes les données.
que veux tu dire? s'agit il de la feuille 'feuil1'? que veux tu en faire?

2. pour une MAJ des interventions dans la feuille mois, ça peut se faire après le trouvé du critère
      If trouve Then  
        ' MAJ des interventions dans la feuille mois  
        li = licom  
        co = 1 + (jour - 1) * 4 + cocri  
        .Cells(li, co).Value = .Cells(li, co).Value + 1  
      End If


ce qui rend inutile ce qu'il y a avant le end sub

bonne suite

PS. je viens de voir la proposition de lermite222, l'as tu prise en compte, ses RQ sont tout à fait justifiées et pertinentes.
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié par ccm81 le 15/02/2011 à 16:11
re

je viens de prendre en compte la proposition de lermite222, le fichier modifié
j'ai remis dans l'ordre les vehicules dans la feuille 'véhicules' et modifié les noms des checkbox (n° sur 2 chiffres > RQ de lermite222)
j'ai supprimé les modules 1 et 2

http://www.cijoint.fr/cjlink.php?file=cj201102/cij627L48A.xls

bonne suite
0
japlo Messages postés 39 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 15 février 2011 2
15 févr. 2011 à 16:23
Je viens de supprimer mon message car tu venais d'en envoyer un dans le même temps je comprend mieux maintenant ce que lermite222 voulais dire.

Merci à vous il ne me reste plus qu'a effectuer quelques verifications.

A+
0
japlo Messages postés 39 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 15 février 2011 2
15 févr. 2011 à 16:33
Re

Il semblerai que cette fonction ne donne aucun résultat dans l'onglet Véhicules ??

'Nombre de sortie par véhicule
'Cette fonction remplace les 11 événement Change des CheckBox
'Et le test des 11 CheckBox pour savoir si au moins un est sélectiionner
'Evite aussi de devoir décrémenter la feuille si "DéCheck" un checkBox
Private Function VoirCheck() As Boolean
Dim Chk As Control, Lig As Byte
With Sheets("Véhicules")
For Each Chk In Me.Controls
If TypeOf Chk Is MSForms.CheckBox Then
If Chk.Value Then
Lig = Val(Right(Chk.Name, 2))
Cells(Lig, 2) = Cells(Lig, 2) + 1: VoirCheck = True
End If
End If
Next Chk
End With
End Function

A+
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 15/02/2011 à 16:41
Re,
Petit oubli dans la fonction...
Lig = Val(Right(Chk.Name, 2)) 
                Cells(Lig, 2) = Cells(Lig, 2) + 1: VoirCheck = True

J'ai oublier les points.
Lig = Val(Right(Chk.Name, 2)) 
                .Cells(Lig, 2) = .Cells(Lig, 2) + 1: VoirCheck = True
A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
0
japlo Messages postés 39 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 15 février 2011 2
15 févr. 2011 à 18:46
Oui c'est beaucoup mieux ainsi merci à vous deux pour votre intervention.



Cordialement
A + japlo
0