Probleme vba

Fermé
osishame Messages postés 1 Date d'inscription mercredi 19 décembre 2007 Statut Membre Dernière intervention 19 décembre 2007 - 19 déc. 2007 à 14:03
 osishame - 21 déc. 2007 à 22:21
Bonjour,

Débutante en Vba, je viens régulièrement sur ce forum qui m'a déjà aidé plusieurs fois à résoudre mes problèmes sans poser de post !Mais aujourd'hui, je sollicite votre aide pour m'aider à résoudre le problème suivant :

j’ai deux fichiers comprenant une feuille chacun :

Feuil 1 du fichier 1 est composé comme suit :
Colonne 4 : des données texte de la forme : XX0000000000 catégorie article
Colonne 10 : des données date jj/mm/AAAA date de réception théorique du colis
Colonne 11 : des données date jj/mm/AAAA date de réception réelle du colis
Colonne 19 : des données texte de la forme : ZZZ code couleur
Colonne 20 : des données date de la forme jj/mm/AAAA date de confirmation de commande
Colonne 21 : des données Heure de la forme 00 :00 :00 heure de confirmation de commande
Colonne 22 : des données texte soit « equitie » soit « bond »

Feuil 1 du fichier 2 (nomenclature) est composé comme suit
Colonne 1 : des données texte de la forme XX id. catégorie article
Colonne 3 : des données texte de la forme : ZZZ code couleur
Colonne 4 : des données date de la forme jj/mm/AAAA [equitie] nb jour nécessaire à la livraison
Colonne 5 : des données Heure de la forme 00 :00 :00 heure de confirmation limite de la commande [bond]
Colonne 6 : des données date de la forme jj/mm/AAAA [equitie] nb jour nécessaire à la livraison
Colonne 7 : des données Heure de la forme 00 :00 :00 heure de confirmation limite de la commande [bond]


Je dois analyser chaque ligne du fichier 1 avec les règles de déduction présentes dans le fichier 2 pour déterminer LE FAUTIF (qui sera à indiquer en colonne 23)

Pour chaque ligne du fichier 1
Si la date de réception théorique du colis >= date de réception réelle du colis (si le colis a été livré à temps) il n’a pas de fautif (rien à renseigné dans la cellule 23)

Dans le cas contraire, il y a un fautif et les règles de déductions sont les suivantes :
Dans un premier temps, il s’agit de retrouver quelle ligne du fichier 2 correspond à l’article en question. Ceci s’effectue par comparaison des deux premières lettres de la colonne 4 du fichier 1 avec la colonne 1 du fichier 2 ET par comparaison du code couleur des 2 fichiers (respectivement colonne 19 et colonne 3).

Si aucune ligne ne correspond à l’article (ce qui normalement n’est pas possible) on renvoie « code introuvable » en colonne 23

Une fois la ligne trouvée : selon si c’est un equitie ou un bond
Si la date de confirmation de la commande (colonne 20 du fichier 1) est < [date de réception théorique – nb de jour nécessaire pour la livraison] * (colonne 10 du fichier 1 - colonne 4 du fichier 2 pour les equitie ou colonne 6 du fichier 2 pour les bonds)

Le fautif est S

Si les deux dates sont égales *
Si l’heure de confirmation de la commande (colonne 21 du fichier 1) > heure limite de confirmation de la commande (colonne 5 (equitie) et 7 (bond) du fichier 2)
Le fautif est le Client
Sinon c’est S

Si la date de confirmation de la commande (colonne 20 du fichier 1) est > [date de réception théorique – nb de jour nécessaire pour la livraison] * (colonne 10 du fichier 1 - colonne 4 du fichier 2 pour les equitie ou colonne 6 du fichier 2 pour les bonds)
Le fautif est le Client

Ci-joint, mon essai vba :

--------------------------------------------------------
Public Sub NewSubFautif()

Dim Arr1 As Range
Dim Arr2 As Range

Worksheets("Extract").Range("A1").Select 'selectionner la plage 1
Set Arr1 = Selection.CurrentRegion.Select

Workbooks("Cutoff.xls").Worksheets("Feul1").Range( "A1").Select 'selectionner la plage 2
Set Arr2 = Selection.CurrentRegion.Select

Dim iArr1 As Integer
Dim iArr2 As Integer
Dim iArr2_trouve As Integer

For iArr1 = 2 To Arr1.Rows.Count Step 1
If (Arr1.Cells(iArr1, 10).Value >= Arr1.Cells(iArr1, 11).Value) Then

With ActiveSheet
Cells(iArr1, 23) = ""
End With

Else

If Arr1.Cells(iArr1, 22).Value = "Equities" Then

a_chercher = Left(Arr1.Cells(iArr1, 10), 2)
trouve = False
iArr2_trouve = 0

For iArr2 = 2 To Arr2.Rows.Count Step 1
If (a_chercher = Arr2.Cells(iArr2, 1).Value) And (Arr1.Cells(iArr1, 19).Value = Arr2.Cells(iArr2, 3)) Then
trouve = True
iArr2_trouve = iArr2
End If
Next iArr2

If (trouve = True) Then

If Arr1.Cells(iArr1, 20).Value < (Arr1.Cells(iArr1, 10).Value - Arr2.Cells(iArr2_trouve, 4).Value) Then

With ActiveSheet
Cells(iArr1, 23) = "sgss"
End With

Else

If Arr1.Cells(iArr1, 20).Value = (Arr1.Cells(iArr1, 10).Value - Arr2.Cells(iArr2_trouve, 4).Value) Then

If Arr1.Cells(iArr1, 21).Value >= Arr2.Cells(iArr2_trouve, 5).Value Then

With ActiveSheet
Cells(iArr1, 23) = "client"
End With

Else

With ActiveSheet
Cells(iArr1, 23) = "sgss"
End With

End If

Else

With ActiveSheet
Cells(iArr1, 23) = "client"
End With

End If

End If

End If


Else

a_chercher = Left(Arr1.Cells(iArr1, 10), 2)
trouve = False
iArr2_trouve = 0

For iArr2 = 2 To Arr2.Rows.Count Step 1
If (a_chercher = Arr2.Cells(iArr2, 1).Value) And (Arr1.Cells(iArr1, 19).Value = Arr2.Cells(iArr2, 3)) Then
trouve = True
iArr2_trouve = iArr2
End If
Next iArr2

End If

If (trouve = True) Then

If Arr1.Cells(iArr1, 20).Value < (Arr1.Cells(iArr1, 10).Value - Arr2.Cells(iArr2_trouve, 6).Value) Then

With ActiveSheet
Cells(iArr1, 23) = "sgss"
End With

Else

If Arr1.Cells(iArr1, 20).Value = (Arr1.Cells(iArr1, 10).Value - Arr2.Cells(iArr2_trouve, 6).Value) Then

If Arr1.Cells(iArr1, 21).Value >= Arr2.Cells(iArr2_trouve, 7).Value Then

With ActiveSheet
Cells(iArr1, 23) = "client"
End With

Else

With ActiveSheet
Cells(iArr1, 23) = "sgss"
End With

End If

Else

With ActiveSheet
Cells(iArr1, 23) = "client"
End With

End If

End If

End If

End If


Next iArr1

End Sub

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

N'hésitez pas pour toutes précisions supplémentaires.
Merci de votre aide.

4 réponses

phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
19 déc. 2007 à 17:45
EXCEL NB'EST PAS UNE BASE DE DONNEES
0
Bonjour phil32,

j'en ai conscience. J'ai besoin de cette macro pour réaliser une analyse économique à partir d'une extraction. Est ce possible ? je pense que oui bien que n'ayant pas les capacités pour le faire.
Si tu as d'autres suggestions, n'hésites pas !
0
phil232 Messages postés 607 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 31 janvier 2008 178
21 déc. 2007 à 10:49
compliqué à réaliser. pas envie d'investir des heures pour ça.
0
une fois de plus phil32, merci pour ton intervention pertinente.
0