Mise à jour_MACRO HS

Bonjour,

Je viens demander de l'aide.

Il y a 3 ans environ, j'ai trouvé sur ce site les réponses qui me manquaient, j'espere qu'il en sera de même

J'ai une macro existante qui me permet de traiter des données provenants d'une exportation extérieure.

Seul bémol, une mise à jour a été faite.

J'ai réussi à faire quelques corrections qui ont permis de corriger 50% des problèmes.

Malheureusement, j'ai encore deux cas de figures qui ne fonctionnent pas : un cas où aucune donnée n'est importée, un autre cas ou les données sont décalées.

Je pense que le plus clair est de tester

Vous trouverez donc en pièce jointe 4 documents :

1. TEST_MAJ_BUG_IM = le document de suivi sur lequel se trouve la macro et qu'on utilise/ouvre quotidiennement

2. Exemple_tout_ok = exportation que la macro traite (via une fenêtre de sélection) et qui fonctionne

3. Exemple_donnees_decalees = exportation que la macro traite (via une fenêtre de sélection) et qui fonctionne mais les réusltats remontent en décalées

4. Exemple_zero_donnee = exportation que la macro traite (via une fenêtre de sélection) et qui ne fonctionne pas

Je suis bien évidemment à 100% dispo si il y a des questions car je ne suis pas certain d'être assez clair (c'est le problème quand on utilise un tableau tous les jours...)

Excellente journée,

Loic

PS : je ne suis pas un expert des macros, alors pas sûr que tout soit parfait

bonjour

pour info : je traite périodiquement des dizaines de fichiers exportés de progiciels (xls ou txt ou csv)

pas besoin de VBA

un fichier MIR suffit.

la seule condition est que les colonnes ne se modifient pas entre l'extraction de mai et l'extraction de juin

bien entendu s'il y a un décalge définitif, il suffit de refaire un copier/coller en manuel pour que MIR refonctionne. Pour les 10 ans qui viennent.

nota : tu galères pas trop parce que ton exportateur fou fait des fusions de cellules ?

Bonjour,

Pour être franc je ne sais pas ce qu'est un fichier MIR.

De plus, l'importation que j'en fais est reliée à d'autres onglets pour analyse. Je n'ai donne ici qu'un fichier exemple "anonymisé"

Et oui, il y a bien un soucis que je pense du à la mise en page peu stable de l'exportation....

Merci pour ta lecture,

Bonne journée

Loïc

re

imagine ton export : EXPORT.xls

tu n'y touches pas !

tu crées Exploitation.xlsx, avec un onglet MIR

ouvre EXPORT, sélectionne une zone plus grande que les données (surtout vers le bas) car ce fichier grandira à chaque fois qu'on exportera.

copier

va en A1 de MIR

collage spécial avec liaison

rideau !

c'est à la portée d'un débutant. Faut juste y penser.

MIR est donc maintenant un MIRoir de l'export.

Tu n'auras plus jamais besoin d'ouvrir EXPORT.xls et encore moins de bidouiller dedans

Dans Exploitation créé d'autres onglets qui contiendront les formules (et VBA mais je le déconseille) qui viennent chercher les données dans MIR et non dans EXPORT

il est pas chouette Excel ?

Re

Non pas que cette solution ne m'attire pas, mais le document que je propose est utilisé dans de nombreux sites en France.

Je ne peux pas tout changer maintenant.

Le bug que nous avons actuellement est déjà très bloquant et créer un nouveau document de fond en comble, sans savoir comment fonctionne le "MIR", sera trop fastidieux et long...

mais merci pour ton idée

Bonne soirée,

Loic

re

je comprends tes craintes, toutefois :

  • un fichier important qui sert dans de nombreux sites devrait se faire de préférence sous SGBD
  • le fichier Exploitation contenant MIR, : tu le fabriques sur ton PC, puis tu l'envoies aux utilisateurs. Ils l'ouvrent et ça marche tout de suite*

*condition : mettre Exploitation dans le répertoire contenant Export. Sans quoi il faut rétablir la liaison (c'est très facile mais la France compte tellement de novices en Excel ! )

note que dans le cas de dispersion d'un fichier, VBA pose parfois de graves problèmes si on change de Windows ou sur Mac.

Bonsoir le fil, bonsoir le forum,

Je te propose une nouvelle méthode bien plus rapide et qui semble fonctionner.

Le code affecté au bouton Lancer l'importation :

Sub Macro1()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim BD As FileDialog 'déclare la variable BD (Boîte de Dialogue)
Dim DLS As Integer 'déclare la variable DLS (Dernière Ligne de l'onglet Source)
Dim DCS As Integer 'déclare la variable DCS (Dernière Colonne de l'onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Long 'déclare la variable D (Date)
Dim H As Double 'déclare la variable H (Heure)
Dim DH As Double 'déclare la variable DH (Date + Heure)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim L As Byte 'déclare la variable L (incrément)
Dim T() As Variant 'déclare la variable T (Tableau)
Dim X As Byte 'déclare la variable X (incrément)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
Set OD = CD.Worksheets("Intervention Manager") 'définit l'onglet destination OD
Set BD = Application.FileDialog(msoFileDialogFilePicker) 'définit la boîte de dialogue BD
BD.AllowMultiSelect = False 'n'autorise pas le sélection multiple
BD.Show 'affiche la boîte de dialogue
If BD.SelectedItems.Count = 0 Then Exit Sub 'si aucun fichier sélectionné, sort de la procédure
Workbooks.Open BD.SelectedItems(1) 'ouvre le fichier sélectionné
Set CS = ActiveWorkbook 'définit le classeur source CS
Set OS = CS.Worksheets("Sheet1") 'définit l'onglet source OS
DLS = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DLS de la colonne A de l'onglet source OS
DCS = OS.UsedRange.Columns.Count 'définit la dernière colonne éditée DCS de l'onglet source OS
OS.Cells.UnMerge 'defusionne toutes les cellules
TV = OS.Range(OS.Cells(1, 1), OS.Cells(DLS, DCS)) 'définit le tableau des valeurs TV
K = 1 'initialise la variable K
For I = 16 To DLS 'boucle 1 : sur les lignes I du tableau des valeurs TV (de 16 à DLS)
    If TV(I, 1) <> "" Then 'condition : si la donnée ligne I colonne 1 de TV n'est pas vide
        For J = 1 To DCS 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV
            Select Case TV(I, J) 'agit en fonction de la valeur de la donnée ligne I colonne J de TV
                Case "Sud", "Est", "TOM", "DOM" '1 de ces 4 cas
                    For L = 1 To DCS 'boucle 3 : sur toutes les colonnes L du tableau des valeurs TV
                        'si la donnée ligne I colonne L de TV n'est pas vide, ajoute cette donnée au tableau T et incrémente X
                        If TV(I, L) <> "" Then ReDim Preserve T(X): T(X) = TV(I, L): X = X + 1
                    Next L 'prochaine colonne de la boucle 3
                    D = CLng(DateSerial(Year(T(4)), Month(T(4)), Day(T(4)))) 'définit la date D (entier long)
                    H = CDbl(TimeSerial(Hour(T(4)), Minute(T(4)), Second(T(4)))) 'définit l'heure H (en Double)
                    DH = D + H 'définit la date + heure DH
                    ReDim Preserve TL(1 To 6, 1 To K) 'redimensionne le tableau des lignes TL (6 lignes, K colonnes)
                    TL(1, K) = TV(I, J) 'récupère dans la ligne 1 de TL la donnée ligne I colonne J de TV [région]
                    TL(2, K) = T(0) 'récupère dans la ligne 2 de TL la donnée 0 de T [Superviseur]
                    TL(3, K) = T(1) 'récupère dans la ligne 3 de TL la donnée 1 de T [Caisse]
                    TL(4, K) = T(2) 'récupère dans la ligne 4 de TL la donnée 2 de T [Ticket Nº]
                    TL(5, K) = T(3) 'récupère dans la ligne 5 de TL la donnée 3 de T [Opérateur]
                    TL(6, K) = CDbl(DH) 'renvoie dans la ligne 6 de TL la date + heure DH
                    K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
                    Exit For 'sort de la boucle 2
            End Select 'fin de l'action en fonction de ...
        Next J 'prochaine colonne de la boucle 2
        Erase T: X = 0 'vide le tableau T et initialise la variable X
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle 1
CS.Close SaveChanges:=False 'ferme le classeur source (sans enregistrer)
If K > 1 Then 'condition : si K est supérieure à 1
    'définit le cellule de destination DEST
    Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)
    'renvoie dans DEST redimensionnée le tableau TL transposé
    DEST.Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL)
    'modifie le format des nouvelles données
    DEST.Resize(UBound(TL, 2)).Offset(0, 5).NumberFormat = "dd/mm/yyyy hh:mm:ss"
    OD.Range("A6").Select 'sélectionne la cellule A5
    ClasserFeuil3.classer2 'lance la procédure [Classer2] du module [ClasserFeuil3]
End If 'fin de la condition
End Sub

Le code de la macro [classer2] à mettre dans le module [ClasserFeuil3] (que j'ai légèrement modifié) :

Sub classer2()
    Dim Fin&
    With Sheets("Intervention Manager")
        Fin = .Range("A" & Rows.Count).End(3).Row
        If Range("A7").Value = "" Then Exit Sub
        If Fin < 7 Then Fin = 7
        .Range("J7").FormulaR1C1 = "=IF(COUNTIF(RC[-5],""*virtual*"")=1,""RC"",IF(RC[-3]=0,""Saisir un n° de collaborateur"",IF(COUNTIF(RC[-5],""*virtual*"")=1,""RC"",IF(LEN(RC[-3])>=7,""RC"",""FOOD""))))"
        .Range("J7").AutoFill Destination:=.Range("J7:J" & Fin)
        .Range("A7:J" & Fin).Sort key1:=.Range("F6"), order1:=xlDescending, key2:=.Range("A7"), order2:=xlAscending, Header:=xlNo
    End With
End Sub

Le fichier :

Bonjour,

Au vu des premiers tests réalisés ce matin, tout me semble parfait.

Un énorme merci pour l'aide et la résolution rapide.

Maintenant, je vais me pencher sur les fichiers MIR histoire d'en apprendre toujours plus

Excellente journée à tous,

Loic

Rechercher des sujets similaires à "mise jour macro"