Vba excel -> vb = probleme ???

cs_lu6fer Messages postés 131 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 juillet 2005 - 11 juin 2004 à 11:32
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 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

7 réponses

cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
11 juin 2004 à 11:52
Pourrais-tu préciser les fonctions qui ne marchent pas (ce que tu veux faire et ce qu'il se passe) stp ... parce que je n'ai pas vu où tu les listes.
0
cs_lu6fer Messages postés 131 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 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
0
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
11 juin 2004 à 18:00
Erreur de compilation :
Type défini par l'utilisateur non défini

C'est ça ton erreur ? Sur la fonction RechercheA ???
As-tu coché Excel dans tes références du projet ?
0
cs_lu6fer Messages postés 131 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
14 juin 2004 à 17:39
Tu fais le test sur la machine de développement ?
0
cs_lu6fer Messages postés 131 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 21 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 !!
0
cs_PhilippeE Messages postés 437 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 10 août 2010 2
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...
0
Rejoignez-nous