VBA excel touver une cellule dans un tableau

Résolu/Fermé
Signaler
Messages postés
39
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
15 février 2011
-
Messages postés
39
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
15 février 2011
-
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




13 réponses

Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
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
Messages postés
39
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
15 février 2011
2
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
Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
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
Messages postés
39
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
15 février 2011
2
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
Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
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
Messages postés
39
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
15 février 2011
2
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
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 197
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
Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
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
Messages postés
10197
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
14 janvier 2022
2 275
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
Messages postés
39
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
15 février 2011
2
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
Messages postés
39
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
15 février 2011
2
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
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 197
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
Messages postés
39
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
15 février 2011
2
Oui c'est beaucoup mieux ainsi merci à vous deux pour votre intervention.



Cordialement
A + japlo
0