cs_lu6fer
Messages postés131Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention21 juillet 2005
-
11 juin 2004 à 11:32
cs_PhilippeE
Messages postés437Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention10 août 2010
-
15 juin 2004 à 15:47
voila je suis en stage et mo projet etait une vba Excel mais pour des raison technique il me faut crée un executable en vb grace a l'aide de fanny ;) cette transition avance bien mais la je bloque dans c code il y a deux fonction mais il me semble que c fonction ne marche pas lors ce que je passe en vb, jecherche donc un moyen de les faire fonctionner, si quelqu'un a une idee...
voila je vous mais tout le code c un peu long et pour les fonction c a la fin mais comme ca si vous trouver une amelioration qu'elle conque...
merci d'avance et bonne journée a tous
@+
Private Sub Command2_Click()
Set docExcel = appExcel.Workbooks("AIRBUS-RCS-IS_20040528+Noms")
Set feuilleExcel = appExcel.Worksheets("Workstations with SMS Installed")
Set feuilleExcelTri = appExcel.Worksheets("TriSuppressionDoublon")
appExcel.ScreenUpdating = True
Dim MaCell As Excel.Range
Dim MaCellSuite As Excel.Range
Dim celUn As Excel.Range
Dim celDeux As Excel.Range
Dim celTrois As Excel.Range
Dim fin As Variant
cpt = 0
feuilleExcelTri.Range("B7").Sort _
key1:=feuilleExcelTri.Range("B8"), _
Order1:=xlAscending, Header:=xlGuess
Set MaCell = feuilleExcelTri.Range("B7")
Do While Not IsEmpty(MaCell)
Set MaCellSuite = MaCell.Offset(1, 0)
If MaCellSuite.Value = MaCell.Value Then
MaCell.EntireRow.Delete
End If
Set MaCell = MaCellSuite
Loop
With feuilleExcel
.Select
'.Columns("D:D").Insert
.Columns("E:E").Insert
.Columns("F:F").Insert
End With
With feuilleExcelTri
.Select
.Range("B7:B65536").Select
End With
Excel.Selection.Copy
With feuilleExcel
.Select
.Range("F7:F65536").Select
.Paste
End With
Set celUn = feuilleExcel.Range("A7")
Set celDeux = feuilleExcel.Range("D7")
Set celTrois = feuilleExcel.Range("F7")
'on parcourt toutes les lignes
For i = 1 To feuilleExcel.Range("A7").CurrentRegion.Rows.Count - 1
'si les trois cellules ne sont pas égales :
'on recherche la présence du A dans D (s'il n'y est pas on supprime)
'on recherche la présence du D dans A (s'il n'y est pas on ajoute)
'si A = D alors on décale F d'une ligne If Not (celUn celDeux And celDeux celTrois) Then
'*********************************************
'recherche de A dans D
'si A n'existe pas dans D --> suppression de A
If celUn = celDeux And Not IsEmpty(celTrois) Then GoTo decaleF
If Form1.rechercheA(celUn, celDeux) = False Then
'on prend toutes les lignes jusqu'à la fin sur les 3 colonnes
'et on les remonte d'une case
fin = celUn.CurrentRegion.Rows.Count
feuilleExcel.Range(celUn.Offset(1, 0).Address & ":" & celUn.Offset(fin, 2).Address).Select
Excel.Selection.Cut
celUn.Select
feuilleExcel.Paste
Set celUn = celDeux.Offset(0, -3)
GoTo Suite
End If
'*********************************************
'*********************************************
'recherche de D dans A
'si D n'existe pas dans A --> insertion de D
If Form1.rechercheD(celUn, celDeux) = False Then
'on décale A,B et C d'une ligne
fin = celUn.CurrentRegion.Rows.Count
feuilleExcel.Range(celUn.Address & ":" & celUn.Offset(fin, 2).Address).Select
Excel.Selection.Cut
celUn.Offset(1, 0).Select
feuilleExcel.Paste
Set celUn = celDeux.Offset(0, -3)
'on insère le nouveau D
celUn = celDeux.Value
celUn.Offset(0, 1) = ""
celUn.Offset(0, 2) = ""
GoTo Suite
End If
'*********************************************
'si A existe dans D et D existe dans A alors on décale F d'une ligne
decaleF:
fin = celTrois.CurrentRegion.Rows.Count
feuilleExcel.Range(celTrois.Address & ":" & celTrois.Offset(fin, 0).Address).Select
Excel.Selection.Cut
celTrois.Offset(1, 0).Select
feuilleExcel.Paste
Set celTrois = celUn.Offset(0, 5)
Else
'--------------SI A D F alors on recherche la Date ----------------'
celUn.Offset(0, 2) = rechercheDate(celUn)
'----------------------------------------------------------------------'
End If
Set celUn = celUn.Offset(1, 0)
Set celDeux = celDeux.Offset(1, 0)
Set celTrois = celTrois.Offset(1, 0)
Suite:
Next i
appExcel.ScreenUpdating = True
Dim cellule As Excel.Range
Set cellule = feuilleExcel.Range("A7")
While Not IsEmpty(cellule)
If Not IsEmpty(cellule.Offset(0, 5)) Then cpt = cpt + 1
Set cellule = cellule.Offset(1, 0)
Wend
compteur.Text = cpt
End Sub
'******************Fonction de recherche de A dans D *****************'
Function rechercheA(ByVal celUnBis As Excel.Range, ByVal celDeuxBis As Excel.Range) As Boolean
Dim cherche As Boolean
cherche = False
For i = 1 To celDeuxBis.CurrentRegion.Rows.Count - 1 If celUnBis celDeuxBis Then cherche True
Set celDeuxBis = celDeuxBis.Offset(1, 0)
Next iIf (cherche) Then rechercheA True Else rechercheA False
End Function
'******************Fonction de recherche de D dans A *****************'
Function rechercheD(ByVal celUnBis As Excel.Range, ByVal celDeuxBis As Excel.Range) As Boolean
Dim cherche As Boolean
cherche = False
For i = 1 To celUnBis.CurrentRegion.Rows.Count - 1 If celDeuxBis celUnBis Then cherche True
Set celUnBis = celUnBis.Offset(1, 0)
Next iIf (cherche) Then rechercheD True Else rechercheD False
End Function
'******************Fonction de recherche de la date *****************'
Function rechercheDate(ByVal cel As Excel.Range) As String
Dim cherche As Boolean
Dim celRecherche As Range
cherche = False
Set celRecherche = feuilleExcelTri.Range("B7")
While Not IsEmpty(celRecherche) And cherche = False
If celRecherche.Value = cel.Value Then
cherche = True
GoTo stopRecherche
End If
Set celRecherche = celRecherche.Offset(1, 0)
Wend
stopRecherche:
rechercheDate = celRecherche.Offset(0, -1).Value
End Function
cs_lu6fer
Messages postés131Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention21 juillet 2005 11 juin 2004 à 13:06
toute a la fin tu as trois fonctions nommer rechercheD rechercheA et rechercheDate et il me semble que mon probleme vien de la. il me semble que c du a la decleration des fonction qui ne se font pas comme ca en vb mais en vba
cs_lu6fer
Messages postés131Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention21 juillet 2005 14 juin 2004 à 09:55
non non il ne me donne pas d'erreur et oui Excel et bien coché
en fait en vba la macro marcher tres bien je l'ai passer en vb et la les fonction ne marche pas le prog s'arrette.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_lu6fer
Messages postés131Date d'inscriptionmardi 11 mai 2004StatutMembreDernière intervention21 juillet 2005 15 juin 2004 à 09:25
oui mais comme je l'ai dit plus haut il ya deux machine de developement dont une avec excel XP et l'autre avec excel 2003 donc je ne sait pas mais je pense que ca vien de la !!
cs_PhilippeE
Messages postés437Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention10 août 20102 15 juin 2004 à 15:47
Effectivement c'est possible.
Tu devrais tester de dé-référencer Excel de ton projet.
Tous les objets Excel, tu les passes en type Object.
Tu dois déclarer toutes les constantes Excel que tu utilises dans ton programme.
Au lieu de faire appel au constructeur New, tu passes par la fonction CreateObject.
ex : ancien code
Dim xlApp as Excel.Application
Set xlApp = New Excel.Application
...etc...
ex : nouceau code
Dim xlApp as Object
Set xlApp = CreateObject("Excel.Application")
...etc...