VBA excel touver une cellule dans un tableau

Résolu
japlo Messages postés 44 Statut Membre -  
japlo Messages postés 44 Statut Membre -
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

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  2. japlo Messages postés 44 Statut Membre 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
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  4. japlo Messages postés 44 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  7. japlo Messages postés 44 Statut Membre 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
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  9. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  10. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  11. japlo Messages postés 44 Statut Membre 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
  12. japlo Messages postés 44 Statut Membre 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
  13. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  14. japlo Messages postés 44 Statut Membre 2
     
    Oui c'est beaucoup mieux ainsi merci à vous deux pour votre intervention.

    Cordialement
    A + japlo
    0