Consulta datos de conductor desde Excel VBA

Hola mi querida gente de Perú, hoy veremos cómo crear una macro que he nombrado Consulta datos de conductor desde Excel

La información la obtendremos de manera individual y masiva, nos conectaremos a la web icjc.mtc.gob.pe

Descargar Consulta datos de conductor desde Excel.xlsm (Contraseña: tutorialesexcel.com)

Empezaremos analizando cómo se comunica el desarrollo con su servidor

consulta datos del conductor excel vba

Se envían muchos parámetros a través de un POST, perderíamos mucho tiempo analizando el valor de cada parámetro

Bueno seguiremos otro camino entonces, a continuación listaré el desarrollo en 4 simples pasos:

Paso #1: Diseño de la macro ‘Consulta datos de conductor desde Excel’

Esto ya lo hemos visto varias veces, y es necesario hacer un diseño amigable y sencillo

Consulta individual conductores
Consulta conductores individual
Consulta masiva conductores
Consulta masiva conductores

Ambas hojas las nombraré como wInicio y wMasiva

Paso #2: Desarrollo del procedimiento de consulta por DNI

Para poder crear nuestro desarrollo en Excel ‘Consulta datos de conductor desde Excel.xlsm‘ empezaremos realizando un desarrollo que lo utilizaremos en las consultas individual y masiva

Nos conectaremos a la web https://icjc.mtc.gob.pe y completaremos la información del objeto con id ContentPlaceHolder1_ddlTipoDocumento y ContentPlaceHolder1_txtNumDocumento

Luego presionaremos el botón ‘Buscar Data’, usaremos el siguiente código

Public Informacion(5) As String
Sub MTCBusqueda(DNI As String)
    Dim i As Byte, ie As Object, Tiempo As Double
    Set ie = CreateObject("InternetExplorer.Application")
    Tiempo = Timer
    ie.Visible = 0: ie.navigate "https://icjc.mtc.gob.pe"
    
    Do
        DoEvents
    Loop Until ie.readyState = 4
    
    ie.document.getElementById("ContentPlaceHolder1_ddlTipoDocumento").Value = "2"
    ie.document.getElementById("ContentPlaceHolder1_txtNumDocumento").Value = DNI
    ie.document.getElementById("ContentPlaceHolder1_btnBuscar").Click
    
    Do
        DoEvents
    Loop Until ie.readyState = 4 Or (Timer - Tiempo) > 12
    Application.Wait (Now + TimeValue("00:00:02"))
    
    Informacion(0) = ie.document.getElementById("ContentPlaceHolder1_txtNombreCompleto").innerText 'Nombre Completo
    Informacion(1) = ie.document.getElementById("ContentPlaceHolder1_txtDireccion").innerText 'Domicilio
    Informacion(2) = ie.document.getElementById("ContentPlaceHolder1_txtNrolicencia").innerText 'Nro Licencia
    Informacion(3) = ie.document.getElementById("ContentPlaceHolder1_txtFechaRevalidacion").innerText 'Fecha
    Informacion(4) = ie.document.getElementById("ContentPlaceHolder1_txtCategoria").innerText 'Categoría
    Informacion(5) = ie.document.getElementById("ContentPlaceHolder1_txtFechaNacimiento").innerText 'Fecha de nacimiento
    
    ie.Quit
End Sub

La información será almacenada en el array Información de tamaño 5

Paso #3: Procesos de limpieza y listado de información

Vale, cuando hagamos consultas (individual o masiva) vamos a tener la necesidad de limpiar las celdas en donde se imprimirá la información y listar la data de la macro MTCBusqueda

Para no estar creando tres procesos de limpieza (Individual, Masiva y Array), haré una con un Select Case

Sub limpiar(tipo As Byte)
    Select Case tipo
        Case 1
            wInicio.Range("C4", "C9") = Empty
        Case 2
            Dim n&
            With wMasiva
                n = .Range("A1").CurrentRegion.Rows.Count
                n = IIf(n = 1, 2, n)
                .Range("B2", "G" & Rows.Count) = Empty
            End With
        Case 3
            Dim i As Byte
            For i = 0 To 5
                Informacion(i) = Empty
            Next
    End Select
End Sub

Usaré la misma lógica para el listado de información, si es un listado masivo usaré una variable opcional que indicará la fila en donde se imprimirá

Sub listar(tipo As Byte, Optional fila As Long)
    Dim i As Byte
    Select Case tipo
        Case 1
            For i = 4 To 9
                wInicio.Range("C" & i) = Informacion(i - 4)
            Next
        Case 2
            For i = 2 To 7
                wMasiva.Cells(fila, i) = Informacion(i - 2)
            Next
    End Select
End Sub

Paso #4: Programar el procedimiento de consulta individual y masiva

Vale, uniremos las macros creadas en los pasos previos, será muy sencillo

Sub consultaIndividual()
    With wInicio
        MTCBusqueda .Range("C2")
        limpiar 1
        listar 1
    End With
End Sub

Y para la consulta masiva usaremos

Sub consultaMasiva()
    limpiar 2
    With wMasiva
        Dim i&, n&
        n = wMasiva.Range("A1").CurrentRegion.Rows.Count
        For i = 2 To n
            MTCBusqueda .Range("A" & i)
            listar 2, i
            limpiar 3
            Application.StatusBar = "Consultando " & i - 1 & " de " & n - 1
        Next
    End With
    
    MsgBox "Información consultada", vbInformation, "TutorialesExcel.com"
    Application.StatusBar = Empty
End Sub

Por temas de estética he agregado un StatusBar y un MsgBox al finalizar

Y eso es todo, espero te haya gustado mi publicación, si te gustó por favor compártela, me ayudarías mucho

Te comento que estoy empezando un nuevo curso de Excel VBA el día 22/06/2019 esta vez en Cedhinfo CLICK AQUÍ PARA VER DETALLES

Descargar Consulta datos de conductor desde Excel.xlsm (Contraseña: tutorialesexcel.com)

Recuerda que puedes descargar todos mis archivos desde https://tutorialesexcel.com/archivos/ completamente gratis

Todas mis publicaciones se hacen primero el grupo de facebook: Grupo Excel Sin Límites

Esta entrada tiene 3 comentarios

  1. Juan

    Hola , y si fuera para visual fox pro

  2. Diego Casusol

    Buenas tardes. Luis, gracias. Tus aportes al conocimiento se deben reconocer. Es una motivacion para seguir aprendiendo y seguir enseñando. Que estes bien. Bendiciones para ti y tu familia.

    1. Muchas gracias por tus palabras Diego, desde la fecha haré publicaciones mejores, y en breves días publicaré mi curso de VBA básico

Deja una respuesta