RechercheV spécial VBA

matrix

XLDnaute Occasionnel
Bonjour a tous.

J'ai besoin de votre aide sur unscripte.

Voici mon problème.

Sur la feuille "Test", j'ai plusieurs lignes qui contiennent des données importées d'un fichier .dat.

Donc dans la cellule A2 en descendant, j'ai des données comme ceci:

01517 G1514689610 303 4726 251070309111301230ND$$8.37 5070109N

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Le 01517 = numéro du magasin.

Ensuite, après la lettre G, les 2 premiers chiffres: 15 égale le numéro de département.

Ensuite, la section 11301230 égale Livraison du début (Heure) suivi de Livraison fin (Heure)

Ses mêmes informations se retrouvent dans la feuille 04.

Je voulais que chaque ligne de la feuille test soit corrigée par la feuille 04.

Prenon l'exemple si:

Feuille test

01517 G1514689610 303 4726 251070309111301230ND$$8.37 5070109N
01517 G1714689660 542 4807 256070309111301230ND$$8.53 5070109N


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Feuille 04

Magasin Département Livraison début (Journée) Livraison du début (Heure) Livraison Fin (Jour) Livraison fin (Heure)
01517 15 Mon 07:00 Mon 09:00
01517 17 Thu 07:00 Thu 09:00


Donc je retrouve le même numéro de magasin, le même numéro de département, sauf que les heures ne sont pas identiques. La macro doit prendre les heures de la feuille 04 et les changer dans la feuille test.

Résultat final:

01517 G1514689610 303 4726 251070309107000900ND$$8.37 5070109N
01517 G1714689660 542 4807 256070309107000900ND$$8.53 5070109N


Comment faire s.v.p

Merci encore pour votre aide.

matrix
 

Pièces jointes

  • Book2.zip
    18.3 KB · Affichages: 34
  • Book2.zip
    18.3 KB · Affichages: 33
  • Book2.zip
    18.3 KB · Affichages: 34
Dernière édition:

JNP

XLDnaute Barbatruc
Re : RechercheV spécial VBA

Bonjour Matrix :),
Si (et seulement si :p) le nombre de caractère de ton import est toujours constant avec les mêmes emplacements de caractères, tu peux utiliser Mid(Chaîne, 1er caractère, nbre de caractères) soit pour le département
Code:
Mid(Chaîne, 8, 2)
Tu pourrais le faire aussi par formule, soit avec ta valeur en A1
Code:
=STXT(A1;8;2)
Par contre, si la longueur de ta chaîne n'est pas constante, il va falloir trouver différents moyens de localiser les caractères qui t'intéressent, et là, c'est pas gagné :D...
Bonne journée :cool:
 

matrix

XLDnaute Occasionnel
Re : RechercheV spécial VBA

Bonjour et merci pour ta réponse.

Oui, il est toujours à la position 51 à 58 sur tout les lignes.

Donc comment faire le Mid Chaine en VBA maintenant.

Merci encore.

matrix
 
Dernière édition:

liloucmoi

XLDnaute Occasionnel
Re : RechercheV spécial VBA

Normalement, tu dois avoir un truc dans le genre :
Code:
Sheets("04").Cells(ligne, 1) = Mid(Sheets("Test").Cells(Ligne, 1), 1, 5)
Sheets("04").Cells(ligne, 2) = Mid(Sheets("Test").Cells(Ligne, 1), 8, 2)
Sheets("04").Cells(ligne, 3) = Mid(Sheets("Test").Cells(Ligne, 1), 51, 4)
Sheets("04").Cells(ligne, 4) = Mid(Sheets("Test").Cells(Ligne, 1), 55, 4)

Qui te met en ligne : Numéro de magasin, Département, Heure deb, Heure fin.
Il faut mettre ceci dans une boucle faisant varier ligne, en descendant ta feuille test.
 

pierrejean

XLDnaute Barbatruc
Re : RechercheV spécial VBA

bonjour matrix
Salut JNP
Salut lilouctoi

Teste cette macro

Code:
Private Sub CommandButton1_Click()
For n = 2 To Range("A65536").End(xlUp).Row
  For m = 2 To Sheets("04").Range("A65536").End(xlUp).Row
    If Left(ActiveSheet.Range("A" & n), 5) = Sheets("04").Range("B" & m) And Mid(ActiveSheet.Range("A2"), 12, 2) = CStr(Sheets("04").Range("D" & m)) Then
      hh = Format(Sheets("04").Range("V" & m), "hhmm" & Format(Sheets("04").Range("X" & m), "hhmm"))     
      Range("A" & n) = Left(Range("A" & n), 50) & hh & Right(Range("A" & n), Len(Range("A" & n)) - 58)
    End If
  Next m
Next n
End Sub

Attention : dans le fichier joint j'ai modifié la 1ere ligne de optima ... pour avoir un resultat
 

Pièces jointes

  • matrix_Book2.zip
    19.8 KB · Affichages: 28
  • matrix_Book2.zip
    19.8 KB · Affichages: 30
  • matrix_Book2.zip
    19.8 KB · Affichages: 29

matrix

XLDnaute Occasionnel
Re : RechercheV spécial VBA

Oh oui, je crois qu'on y arrive.

Le seul problème qui reste est celui si:

Il ne filtre que le département 15. Si le magasin a plusieurs départements, il prend l'heure du département 15 et il l'attribue aussi aux autres département du même magasin.
 

matrix

XLDnaute Occasionnel
Re : RechercheV spécial VBA

Et voici le fichier.

Il change seulement le premier, pas la suite.
 

Pièces jointes

  • matrix_Book2.zip
    16.2 KB · Affichages: 21
  • matrix_Book2.zip
    16.2 KB · Affichages: 19
  • matrix_Book2.zip
    16.2 KB · Affichages: 24

pierrejean

XLDnaute Barbatruc
Re : RechercheV spécial VBA

Re

Toutes mes excuses
Il y avait une erreur
Voici le bon code

Code:
Private Sub CommandButton1_Click()
For n = 2 To Range("A65536").End(xlUp).Row
  For m = 2 To Sheets("04").Range("A65536").End(xlUp).Row
    If Left(ActiveSheet.Range("A" & n), 5) = Sheets("04").Range("B" & m) And Mid(ActiveSheet.Range[COLOR=blue]("A" & n[/COLOR]), 12, 2) = CStr(Sheets("04").Range("D" & m)) Then
      hh = Format(Sheets("04").Range("V" & m), "hhmm" & Format(Sheets("04").Range("X" & m), "hhmm"))
      Range("A" & n) = Left(Range("A" & n), 50) & hh & Right(Range("A" & n), Len(Range("A" & n)) - 58)
    End If
  Next m
Next n
End Sub
 

Pièces jointes

  • matrix_Book2b.zip
    19.1 KB · Affichages: 34

matrix

XLDnaute Occasionnel
Re : RechercheV spécial VBA

Super, ca fonctionne tres bien.

J'ai voulu faire un test avec un autre option avec le même fichier, mais au lieu de remplacer, il ajoute la donnée de la colonne U et W.

Code:
For n = 2 To Range("A65536").End(xlUp).Row
  For m = 2 To Sheets("10").Range("A65536").End(xlUp).Row
    If Left(ActiveSheet.Range("A" & n), 5) = Sheets("10").Range("B" & m) And Mid(ActiveSheet.Range("A" & n), 12, 2) = CStr(Sheets("10").Range("D" & m)) Then
      DD = Format(Sheets("10").Range("U" & m), "00" & Format(Sheets("10").Range("W" & m), "00"))
      Range("A" & n) = Left(Range("A" & n), 45) & DD & Right(Range("A" & n), Len(Range("A" & n)) - 47)
     
    End If
  Next m
Next n

Dans la colonne U et W, il y a la valeur Jour ex: 25 pour le 25.

Sauf que maintenant, il laisse la valeur déja entre 45 et 47, puis ajoute la nouvelle journée.

Voici un exemple:

Avant:
01517 G1514013700 606 5814 319062609111301230ND$$10.63 5062409N

Apres:
01517 G1514013700 606 5814 31906262509111301230ND$$10.63 5062409N

matrix
 

Discussions similaires

Réponses
2
Affichages
557
Réponses
7
Affichages
436

Statistiques des forums

Discussions
312 666
Messages
2 090 690
Membres
104 635
dernier inscrit
Dami1