Saltar al contenido

Retos de programacion


alucard2011

Recommended Posts

Buenos dias a todos hace mucho me acuerdo que un compañero del foro Digitalboy nos regalo un reto de programacion hace poco me encontre uno igual de un concurso solo que es de lenguaje PHP lo anexo igual que como el otro reto ver el tipo de programacion en VBA. saludos. anexo el codigo respuesta.

esto con el fin de salir de lo cotidiano un poco del foro.

Problema

Teclado de móvil

El alfabeto inglés contiene 26 caracteres y los teléfonos móviles sólo tienen diez dígitos en el teclado. Varias letras se mapean en cada tecla numérica, como se muestra en la imagen inferior, de forma que se pueda escribir un mensaje con pulsaciones repetitivas. Por ejemplo, para insertar el carácter B, se deberá presionar 22. Para introducir una secuencia de dos caracteres a partir de la misma tecla, el usuario debe hacer una pausa antes de pulsar el botón una segunda vez. Por ejemplo, 2 2 indica AA mientras que 22 indica B (se muestra un "carácter de espacio" para indicar una pausa).

Debe crear un programa que calcule la secuencia de teclas que hay que pulsar para escribir un cierto mensaje.

Entrada

La primera línea de entrada contiene un único entero N, el número de casos de prueba.Cada caso es una línea de texto con formato

mensaje_deseado

Cada mensaje consta sólo de minúsculas de la "a" la "z" y el carácter " " (espacio, que se emite presionando cero).

Salida

Para cada caso de prueba, la salida de una línea que contiene "Caso # x:", seguido por el mensaje traducido en la secuencia de pulsaciones de teclas.

Ejemplo

Entrada

4

hi

yes

foo bar

hello world

Salida

Caso #1: 44 444

Caso #2: 999337777

Caso #3: 333666 6660 022 2777

Caso #4: 4433555 555666096667775553

Solución en lenguaje PHP:

<?php

function teclado_movil($mensaje_deseado){

//Inicializar el teclado
$key = array();
$char = ord('a');

// Guardo las teclas que corresponden a cada letra
for($tecla = 2; $tecla <=9; $tecla++){
//Todas las teclas tienen 3 letras excepto la 7 y la 9 que tienen 4
$hasta = ($tecla == 7 || $tecla == 9)? 4 : 3 ;
for($pulsar = 1; $pulsar <= $hasta; $pulsar){
$key[$char++] = array('tecla' => $tecla, 'pulsar' => $pulsar++);
}
}

//Para el espacio (tecla 0)
$tecla = 0;
$pulsar = 1;
$key[ord(' ')] = array('tecla' => $tecla, 'pulsar' => $pulsar++);

//Transformar string en array
$letras = str_split ($mensaje_deseado);
foreach($letras as $letra){
//Obtengo la tecla que le corresponde y la cantidad de pulsaciones
$tecla = $key[ord($letra)]['tecla'];
$pulsar = $key[ord($letra)]['pulsar'];
//Si es la misma tecla que la anterior va espacio
if($tecla == $tecla_anterior)
$respuesta .= ' ';
//Presiono la tecla la cantidad de veces necesaria
for($i = 0; $i < $pulsar; $i++){
$respuesta .= $tecla;
}
//Antes de seguir recuerdo a esta tecla como la anterior
$tecla_anterior = $tecla;
}
return $respuesta;
}

//Cantidad de casos
$N = $_REQUEST['N'];

//Mensajes
$mensajes = $_REQUEST['mensajes'];

for($i = 1; $i <= $N; $i++){
$mensaje_deseado= $mensajes[$i];
$respuesta = teclado_movil($mensaje_deseado);
echo "Caso #$i: $respuesta <br/>";
}
?>[/PHP]

P.D. espero sirva como entretenimiento para los que les gustan los retos saludos

Enlace a comentario
Compartir con otras webs

que tal verzulsan no sabia de los retos de facebook buscare unos ya que hay veces que uno se aburre y busca cosas diferentes este era de un concurso de apenas mayo de este año y si tienes razon lleva 2 espacios, me parecio correcto compartir este reto por la emulacion de la escritura como un telefono celular, espero no faltar alguna regla del foro.

Saludos tambien me acuerdo que habia un tema hace mucho en los que macro antonio creo un reto para salir de la monotonia seria bueno retomarlo pero con las funciones nuevas de excel 2010 en adelante sirve que varios nos retroalimentamos.

Enlace a comentario
Compartir con otras webs

Reto superado en excel, el main, (en el adjunto), es solo para llamar a la función. He tomado el rango (A1:AN) como entrada de datos al main y el rango (B2:BN) como salida de datos.

Public Function CadenaToTecladoMovil(Cadena As String) As String
Dim Res As String
Dim LastNum As Integer
For i = 1 To Len(Cadena)
If LastNum <> 0 And LastNum = CInt(Left(GetSequence(Mid(Cadena, i, 1)), 1)) Then Res = Res & " "
LastNum = CInt(Left(GetSequence(Mid(Cadena, i, 1)), 1))
Res = Res & GetSequence(Mid(Cadena, i, 1))
Next
CadenaToTecladoMovil = Res
End Function
Public Function GetSequence(Letra As Variant) As String
Dim Sequence() As String
Dim Posicion As String
Sequence = Split("2;22;222;3;33;333;4;44;444;5;55;555;6;66;666;7;77;777;7777;8;88;888;9;99;999;9999", ";", , vbTextCompare)
If Letra = " " Then
GetSequence = "0"
Else
Posicion = Asc(Letra) - 97
GetSequence = Sequence(Posicion)
End If
End Function[/CODE]

tambien me acuerdo que habia un tema hace mucho en los que macro antonio creo un reto para salir de la monotonia seria bueno retomarlo pero con las funciones nuevas de excel 2010 en adelante sirve que varios nos retroalimentamos.

Nada mejor que romper la monotonía; no uso el 2010 pero recuerdo ese post, yo me apunto, eso sí, mis aportes serán de versiones inferiores o iguales a 2007.

Saludos.

Teclado Numerico.xls

Enlace a comentario
Compartir con otras webs

Me quito el sombrero vaya que en excel el codigo tiene una reduccion significante.

y claro lo que comentaba es que como sabemos excel es enorme en cuanto a codigos desde el office 2007 tubo cambios tanto para bien como para mal nos quito algunos codigos de programacion y anexo mas a sus bibliotecas buscare algunos y como comente sera para salir de la monotonia y al igual para muchos aprender de lo nuevo que tiene en cuanto a cambios desde el 2007 en adelante saludos y espero alguien tambien tome el reto del teclado es bueno aprender varios codigos.

saludos

P.D. Muy buena la implementacion de las pulsaciones me gusto para la identificacion del 7 y del 9 :encouragement:

- - - - - Mensaje combinado - - - - -

Anexo un reto mas se que lo resolveras muy rapido amigo verzulsan este es de un concurso llamado tuenti y el reto era el siguiente:

Una suma difícil

Crea un programa capaz de calcular la suma de los números que se indicarán en la entrada estándar, separados por espacios, y mostrar los resultados en pantalla. Los números pueden ser negativos, grandes y las líneas pueden contener espacios adicionales, por lo que el programa debe ser robusto.

Ejemplo de entrada

123456789012 1

2 3

4 5 -1

Ejemplo de salida

123456789013

5

8

Solución en lenguaje PHP:

<?php

function formulario()
{
//Formulario
echo "<form name='frm' method='post'
action='".$_SERVER["SCRIPT_NAME"]."'>
<textarea name='numeros' rows='10' cols='40' /></textarea>
<br /><input type='submit' name='enviar' value='Enviar' /></form>";
}

function procesa()
{
$contenido=$_POST["numeros"];

$a_total=array();

$a_cont = explode("\n",$contenido);

for($i=0;$i<count($a_cont);$i++)
{
$a_numeros=explode(" ",$a_cont[$i]);
$n=count($a_numeros);
$total=0;
for($j=0;$j<$n;$j++)
{
$total+=$a_numeros[$j];
$todos=$j+1;
if($todos==$n)
{
$a_total[]=$total;
}
}
}

//Resultado
$html="Ejemplo de Salida: <br />";
for($i=0;$i<count($a_total);$i++)
{
$html.=$a_total[$i]."<br />";
}
echo $html;

}

$haydatos=count($_POST);
if(!$haydatos)
formulario();
else
procesa();
?>[/PHP]

Enlace a comentario
Compartir con otras webs

Pues yo también quiero jugar.



Function TextoSMS(Celda As Range) As Variant

L = "1.....ABC2..DEF3..GHI4..JKL5..MNO6..PQRS7.TUV8..WXYZ9. 0...."
For x = 1 To Len(Celda)
c = InStr(L, UCase(Mid(Celda, x, 1)))
n = Int((c - 1) / 6) + 1
v = c Mod 6
If n = 10 Then n = 0
TextoSMS = TextoSMS & String(v, "" & n & "") & " · "
Next

End Function


[/CODE]

Enlace a comentario
Compartir con otras webs

Una suma difícil

Crea un programa capaz de calcular la suma de los números que se indicarán en la entrada estándar, separados por espacios, y mostrar los resultados en pantalla. Los números pueden ser negativos, grandes y las líneas pueden contener espacios adicionales, por lo que el programa debe ser robusto.

Ejemplo de entrada

123456789012 1

2 3

4 5 -1

Ejemplo de salida

123456789013

5

8

Function SumaConEspacios(Valor As String) As Double
SumaConEspacios = Evaluate(Replace(Valor, " ", "+"))
End Function[/CODE]

Saludos (dos grandes) Macro Antonio y verzulsan

Enlace a comentario
Compartir con otras webs

Uishh casi lo tienes bien Antoni, el código es impresionantemente ingenioso y corto, solo te ha faltado tener en cuenta los espacios, seguramente superarías fácilmente los 10 niveles en http://chevismo.com.

Aquí va otra versión usando solo mates y un circuito lógico, menos líneas, sin función auxiliar y sin usar plantilla de datos, eso sí, mas rebuscado jejeje.

Public Function TextoSMS_vzs(Cadena As String) As String
Dim TempChar As String, actChar As String, Res As Variant, TRes As String, LastNum As Integer
For r = 0 To Len(Cadena) - 1
actChar = Mid(Cadena, r + 1, 1)
TRes = Res
For i = 0 To 7
TempChar = ""
For j = 0 To 2 + CInt(Mid(Application.Dec2Bin(5, 8), (i + 1), 1))
TempChar = TempChar & i + 2
If CInt((i * 3) + j + Int(i / 6)) = CInt(Asc(actChar) - 97) Then
If LastNum <> 0 And LastNum = i + 2 Then Res = Res & " "
LastNum = i + 2
Res = Res & TempChar
End If
Next j
Next i
If TRes = Res Then Res = Res & "0"
Next r
TextoSMS_vzs = Res
End Function[/CODE]

Saludos para ti también tuve y alucard2011

PD: (Antoni, no he conseguido ponerlo como UDF adjunto a una celda, en TextoSMS_vzs = Res, Res tenía el valor correcto pero a la celda llegaba vacía)

Teclado Numerico_v2.xls

Enlace a comentario
Compartir con otras webs

Hola Santi y demás gente de bien:

Uishh casi lo tienes bien Antoni, el código es impresionantemente ingenioso y corto, solo te ha faltado tener en cuenta los espacios

Yo en mi teléfono tengo el espacio en el y el punto en el 1.

Te subo el archivo para que no te "canses",...jeje

- - - - - Mensaje combinado - - - - -

Algo no "pirula" en tu función.

Te adjunto comparativa.

Por cierto no puedo entrar en esa web que me indicas, que por cierto ni idea de lo que es.

De texto a sms.xls

Teclado Numerico_v2.xls

Enlace a comentario
Compartir con otras webs

El enunciado dice que solo entran minúsculas, es por eso que no te coincidían. Lo del espacio me refiero a que el enunciado dice que si presionas mismo numero 2 veces seguidas, hay que dejar un espacio que representa pausa:

3355503666 6444664666022338444777708887777022 277722233555666 662
33555036666444664666022338444777708887777022277722233555666662

2233844477770426620333444566603355503666 6444664666
22338444777704266203334445666033555036666444664666[/CODE]

Ver adjunto

PD: Lo de la página chevismo.com ya es mala suerte, nunca la había visto caída, esta mañana iba, prueba más tarde a ver si te va. Tiene una prueba inicial escondida que si no la pasas no te deja registrarte y luego ya vienen los 10 niveles.

Teclado Numerico_v2_b.xls

Enlace a comentario
Compartir con otras webs

Ya lo he "pillao", ahora van iguales.

Function TextoSMS(Celda As Range) As Variant

L = "1.....ABC2..DEF3..GHI4..JKL5..MNO6..PQRS7.TUV8..WXYZ9. 0...."
For x = 1 To Len(Celda)
c = InStr(L, UCase(Mid(Celda, x, 1)))
n = Int((c - 1) / 6) + 1
v = c Mod 6
If n = 10 Then n = 0
If n = nn Then TextoSMS = TextoSMS & " "
TextoSMS = TextoSMS & String(v, "" & n & "")
nn = n
Next


End Function


[/CODE]

Enlace a comentario
Compartir con otras webs

Saludos a todos que bueno que el primer ejercicio logro el cometido y aparte nos hace ver las diferentes formas de programacion de 2 grandes, muy buena UDF macro antonio.

P.D. a mi tampoco me abrio el enlace, al rato subo otro reto matematico no se porque no me dejaba entrar al foro

Amigo "Tuve" excelente respuesta bienvenido al tema

Saludos

- - - - - Mensaje combinado - - - - -

ahi va otro para serles sincero a este no le entendi nadita jajajajajajajajaja dejo el reto y como en la escuela a aprender de los buenos saludos.

Palíndromo primo

Un entero se dice que es un palíndromo si es igual a su inversa. Por ejemplo, 79.197 y 324.423 son palíndromos. En esta tarea se le dará un entero N, 1 <= N <= 1.000.000. Usted debe encontrar el menor entero M tal que M <= N que es primo y M es un palíndromo N.

Por ejemplo, si N es 31, entonces la respuesta es 101.

Formato de entrada:

Un solo entero N, (1 <= N <= 1.000.000), en una sola línea.

Formato de salida:

Su salida debe consistir en un solo número entero, el más pequeño palíndromo primo mayor que o igual a N.

Ejemplo de entrada:

31

Ejemplo de salida:

101

Enlace a comentario
Compartir con otras webs

Formato de entrada:

Un solo entero N, (1 <= N <= 1.000.000), en una sola línea.

Formato de salida:

Su salida debe consistir en un solo número entero, el más pequeño palíndromo primo mayor que o igual a N.

Ejemplo de entrada:

31

Ejemplo de salida:

101

Una posible solución

Function MenorPrimo(N As Long) As Long
Dim M As Long
Dim EsPrimo As String
M = IIf(N Mod 2 = 0, N + 1, N)

Do
If M = StrReverse(M) Then
EsPrimo = "=SUMPRODUCT(--(MOD(" & M & ",ROW(3:" & Int(Sqr(M)) & "))=0))"
If Evaluate(EsPrimo) = 0 Then
MenorPrimo = M
Exit Do
End If
End If
M = M + 2
Loop

End Function
[/CODE]

Saludos

Enlace a comentario
Compartir con otras webs

Hola tuve, lo primero, tu función es brillante, excesivamente ingeniosa y a la altura de las paranoyas de Macro Antonio, me quito el sombrero.

Me ha tenido atrapado un buen rato para poder entenderla ya que nunca había trabajado de esta manera en VBA con las funciones nativas del Excel usando evaluate, que por cierto es la primera vez que la uso también y es simplemente genial.

Lo que me ha tenido en jaque un rato ha sido el por qué esto me funcionaba:

MsgBox Evaluate("MOD(3,ROW(3:1))")[/CODE]

Y sin embargo esto no

[CODE]MsgBox Evaluate("ROW(3:11)")[/CODE]

Eso sí, en cualquier celda, [b]=FILA(3:11)[/b], sí que funciona.

Terminé de entenderlo en el siguiente enlace donde lo explica bastante bien:

Formula Forensics looks at Is my number a Prime Number? | Chandoo.org - Learn Microsoft Excel Online

Tampoco sabía, como indican en el enlace a chandoo , que la formula Row devuelve una colección de objetos (además del numero de fila) que pensaba que era lo único para lo que servía la función =FILA(), empiezo a pensar seriamente que debería tomar unas clases de Excel.

Ya por último, el iif de una sola línea IIf(N Mod 2 = 0, N + 1, N), nunca antes lo había visto en VBA o al menos hasta hoy no me había fijado, solo lo había usado en javascript y pensé que era exclusivo de otros lenguajes, Expresión = (A ==100) ? true : false;. Con el if de una línea se puede ahorrar mucho en código, muy útil.

Un saludo.

Enlace a comentario
Compartir con otras webs

Buen dia a todos dejo otro reto del mismo concurso Tuenti para que se desaburran este fin de semana saludos a todos

La abuela binaria

Yuki es una chica con suerte. Su abuela Chika es una encantadora anciona, propietaria de una granja de ovejas, experta repostera y ninja de la costura, y tiene un avellanero detrás de casa. Yuki pide avellanas continuamente, pero su sabia abuela no permite que Yuki coma demasiadas para que no caiga enferma.

Chika es aficionada a los números binarios, así que propuso este juego a Yuki: ella diría un número N y Yuki escogería dos números, x e y, tales que x + y = N. Entonces, Chika daría a Yuki tantas avellanas como la cantidad de unos que tengan x e y en base 2. Por ejemplo, si Chika propone 7 y Yuki escoge 3 y 4, recibiría 2 (porque 3 en base 2 es 11) y 1 (porque 4 en base 2 es 100): 3 avellanas.

Yuki quiere saber la máxima cantidad de avellanas que podría obtener de Chika.

Entrada: La primera línea es el número de casos, y a continuación, cada caso en una nueva línea (un número entero, entre 0 y 10^19, que puede no caber en un entero de 32 bits).

Salida: Para cada caso, una línea conteniendo "Caso #x: M", donde x es el número de caso (desde 1) y M es el número máximo de avellanas.

Ejemplo de entrada:

3

1

6

Salida correspondiente:

Caso #1: 1

Caso #2: 4

Caso #3: 14

Les dejo el link del concurso Tuenti

https://contest.tuenti.net/Questions

o si aun quieren los sigo subiendo traducidos saludos

Enlace a comentario
Compartir con otras webs

Hola Alucard2011, te falta el caso 3 en el enunciado

3 = Número de casos de entrada

1 : Caso 1

6 : Caso 2

2135 : Caso 3

Para obtener la mayor cantidad de unos' date=' uno de los sumandos debe tener la mayor cantidad de bits posibles y todos a 1 (he llegado a esta conclusion por el cuento de la vieja, y no me refiero al cuento de Chika xD), el otro sumando tan solo ha de restar este número con el [b']N[/b]úmero Inicial (NI). La mayor cantidad de bits posibles es la mayor potencia de los números naturales a la que se puede elevar 2 sin que sobrepase el (NI) y esto se obtiene sacando la parte entera del logaritmo en base dos de (NI).

Para numeros menores de 1022

Public Function MaxAvellanas_1022(Num As Integer) As Integer
Dim sum1 As Long, sum2 As Long, Cadena As String
sum1 = (2 ^ (Int(Log(Num) / Log(2)))) - 1
sum2 = Num - sum1
Cadena = Application.Dec2Bin(sum1, 10) & Application.Dec2Bin(sum2, 10)
MaxAvellanas_1022 = Len(Replace(Cadena, "0", "", , , vbTextCompare))
End Function[/CODE]

Para números mayores que 1022, he usado una función conversor dec2bin extraída de esta web

[CODE]Function d2b(numero As Long) As String
While numero >= 2
d2b = CStr(numero Mod 2) & d2b
numero = numero \ 2
Wend
d2b = CStr(numero Mod 2) & d2b
End Function[/CODE]

[CODE]Public Function MaxAvellanas(Num As Long) As Integer
Dim sum1 As Long, sum2 As Long, Cadena As String
sum1 = (2 ^ (Int(Log(Num) / Log(2)))) - 1
sum2 = Num - sum1
Cadena = d2b(sum1) & d2b(sum2)
MaxAvellanas = Len(Replace(Cadena, "0", "", , , vbTextCompare))
End Function[/CODE]

Saludos.

Enlace a comentario
Compartir con otras webs

Verzulan antes que nada que buena explicacion nos acabas de regalar, la otra perdon al pasar la traduccion yo pense que habia apretado esos numeros sin querer al revisar como excusa tengo al pequeño beltmon cazando vampiros en el patio :witless:, jajajaja ya hablando en serio que grandes paginas nos has regalado y yo la verdad estoy aprendiendo bastante ya vieron que los codigos que anexe en los primeros retos casi eran un libro comparado con sus codigos que la verdad tienen una reduccion memorable, mañana subo otro reto ya que mis vecinos vampiros quieren dar una vuelta.

Saludos.

P.D. Maestro Macro tambien seria bueno si nos regalas un reto como los de antaño, quiero descargar mi furia al no poder resolverlo con la gente de transilvania jajajaja :snowman:

Enlace a comentario
Compartir con otras webs

Hola "pipol":

No solo no lo he conseguido con una línea si no que además la he hecho mas larga.

Si he entendido lo que hay que hacer, en ocasiones hay mas de una solución válida, por ejemplo el Nº 7.

Mi macro las muestra todas,....:ghost::ghost::ghost::joyous:

Sub Calcular()

Sumandos 7 'Número de la abuela

End Sub
[/CODE]

[CODE]
Private Sub Sumandos(N As Integer)

For x = 1 To Int(N / 2)
Range("A" & x) = UBound(Split(Application.Dec2Bin(x), 1)) + _
UBound(Split(Application.Dec2Bin(N - x), 1))
Range("B" & x) = x
Range("C" & x) = N - x
Next

Range("A1:C" & x - 1).Sort Key1:=Columns(1), Order1:=xlDescending

Range("A1").Select
Do Until ActiveCell <> Range("A1")
Parejas = Parejas & ", " & ActiveCell.Offset(0, 1) & " y " & ActiveCell.Offset(0, 2)
ActiveCell.Offset(1, 0).Select
Loop

MsgBox Mid(Parejas, 3)
Cells.Clear

End Sub
[/CODE]

Santi, compara resultados con tu primera propuesta porqué creo que no dan lo mismo.

Enlace a comentario
Compartir con otras webs

Funciona correctamente, :encouragement:

la diferencia es que el mío dice el número de unos totales que tienen ambos números en binario y el tuyo dice que números dan ese total de unos. No he mirado en profundidad las paranoias que haces ordenando y recolocando pero pillo la idea, muy buena.

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 97 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Hola que tal amigos programadores por favor me podrían ayudar con una macro que me genere un archivo CSV delimitado por comas, la estructura del archivo CSV no deberá llevar encabezado, los datos del archivo CSV serán obtenidos de la hoja “Datos”. En la columna A: deberá tener la clave clues que se toma de la columna B de la hoja Datos En la Columna B: el Código (son 230 codigos que van del rango G1:IB1 de la hoja datos) En la Columna C: el valor almacenado a su correspondiente al código y clues En la Columna D: el número del mes que se obtendrá de la de la columna E de la hoja Datos En la Columna E: el año que se tomará de la columna F de la hoja de Datos   Son 230 códigos por lo que la macro generará 230 filas por cada clave clues que tenga la hoja Datos En el archivo anexo una hoja llamada CSV para que vean la estructura que tendrá, el archivo CSV estará delimitado por comas   Les agradecería mucho que me ayuden por favor, Dios los bendiga Exportar datos a csv.xlsx
    • Hola buenas tardes.   Debido al trabajo debo estar comparando en un periodo unos archivos dentro de una carpeta o subcarpeta. en base a la fecha de creacion o modificacion.  pero tengo que estar viendo carpeta por carpeta y aveces son varios. Con una macro intente  listar los archivos de cualquier carpeta y subcarpeta, esto activandolo segun la celdaactiva. El problema es que tiene algunos errores. 1. si la carpeta cuenta con subcarpetas me los manda a muchas filas abajo. Mi idea es hoja(Así debe quedar) Que con una macro pueda seleccionar la carpeta desde el buscador y me de la lista de archivos a partir de la fila 6. siendo columna A= fecha de modificación, columna B =Fecha de creación y columna C=Nombre del archivo con hiperlink. Con otro o con la misma macro poder seleccionar otra carpeta y sus subcarpetas, según sea el caso. y me liste a partir de la columna F de la fila 6 Siendo La columna F=Nombre del archivo, columna H=fecha de creación, columna I=ultima modificación   Para así poder acceder y comparar mis archivos, directamente desde excel.   Muchas gracias Mariano       Listar archivos de 2 carpetas para comparar.xlsm
    • Hola buenas, Os presento mis dudas. Tengo un libro  (llamémosle LibroDestino) con dos módulos, uno de definición de variables "ModDef" y otro de inicializacion de esas mismas variables "ModCfg". Necesito que al copiarme una hoja de otro libro(llamémosle LibroOrigen), mediante un procedimiento, sobrescribir el modulo de inicialización de variables del LibroDestino con el  contenido del módulo que hay en el LibroOrigen. Destacar que los dos módulos de cada libro tienen el mismo nombre "ModCfg". Y tienen una única variable llamada "Mensaje". En el LibroDestino tiene el valor "Hola" y en el LibroOrigen el valor "Adiós" Este procedimiento lo realiza perfectamente,  es decir se sobrescribe, pero si en el mismo procedimiento quiero utilizar el nuevo valor de esa variable, me conserva el valor de la variable anterior. Para hacer las comprobaciones he ejecutado un MsgBox al empezar y al acabar el procedimiento, pero en los dos casos me devuelve el valor original del LibroDestino el valor "Hola", cuando mi idea es que al sobrescribir el modulo con el nuevo valor de la variable, el último MsgBox me devuelva el valor "Adios". Mi objetivo es poder tener la inicialización de esas variables en un libro que no sea el de trabajo (LibroDestino), ya que según la hoja que importe puedo requerir que las variables tengan un valor u otro. ¿Por que no me coge en el procedimiento el nuevo valor de la variable? ¿Cómo podría conseguirlo? He tenido que activar en VBA  la referencia Microsoft visual basic for applications extensibility 5.3 desde  Herramientas -> Referencias. Creo que es la única manera de poder trabajar con los módulos desde VBA, aunque si se pudiera de otra manera creo que sería mas óptimo. Mil gracias de antemano, un saludo!         Libro1_Prueba.xlsm Libro2_Prueba.xlsm
    • Agradecido Antoni! Tus sugerencias me ayudaron mucho! Como pudiese hacerte llegar el archivo?
    • Prueba este código. Sin el archivo no te puedo ajustar más. Private Sub btnCargaBancos_Click() 'El tipo de dato debe especificase para cada variable Dim TasaCompra As Double, TasaVenta As Double, InvBanesco As Double, InvVzla As Double Dim MontoBanesco As Double, MontoVzla As Double, TasaDiaBan As Double, TasaDiaVzla As Double Dim TasaActual As Double 'Hay que comprobar que los textbox tienen contenido numérico 'Los datos numéricos solo pueden contener números y el separador decimal, cualquier otro caracter dará error al convertir If Not IsNumeric(txtInverBanesco) Or _ Not IsNumeric(txtInverVzla) Or _ Not IsNumeric(txtTasaCompra) Or _ Not IsNumeric(txtTasaVenta) Then MsgBox "Los datos deben ser numéricos", vbCritical Exit Sub End If InvBanesco = CDbl(txtInverBanesco) InvVzla = CDbl(txtInverVzla) TasaCompra = CDbl(txtTasaCompra) TasaVenta = CDbl(txtTasaVenta) 'Los datos de los divisores no pueden ser 0 (Indeterminación matemática) If TasaCompra = 0 Or _ InvBanesco = 0 Or _ InvVzla = 0 Then MsgBox "Los datos no admiten valor cero", vbCritical Exit Sub End If MontoBanesco = (InvBanesco / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) MontoVzla = (InvVzla / TasaCompra) * (1 - 0.18 / 100) * (TasaVenta * (1 - 0.18 / 100)) TasaDiaBan = (MontoBanesco / InvBanesco) * (1 - 0.055) TasaDiaVzla = (MontoVzla / InvVzla) * (1 - 0.055) If TasaDiaBan < TasaDiaVzla Then TasaActual = TasaDiaBan Else TasaActual = TasaDiaVzla End If 'En VBA, los datos numéricos no admiten ser formateados, formatear directamente en las celdas, 'MontoBanesco = FormatNumber(MontoBanesco, 2, True, vbFalse) 'MontoVzla = FormatNumber(MontoVzla, 2, True, vbFalse) 'TasaActual = FormatNumber(TasaActual, 5, True, False) txtBcoBanesco = MontoBanesco txtBcoVenezuela = MontoVzla txtTasaDiaria = TasaActual End Sub  
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.