Rechercher : dans
Par :

Erreur de compilation

Dernière réponse le 14 oct 2008 à 12:08:58 bestkeeper, le 13 oct 2008 à 09:50:19 
 Signaler ce message aux modérateurs

Bonjour,

j'ai une erreur dans ma macro "erreur de compilation, variable non définie" sur la ligne ReDim Preserve my tab


Voici la macro :

Sub Bouton1_QuandClic()


Private myTab()
Private ind As Long

Public Sub mainTri()

prepareTri
lanceRecap

End Sub

Private Sub prepareTri()
Dim ws As Worksheet
Dim i As Long

Set ws = Worksheets(1)
i = 2
While ws.Range("A" & i).Value <> ""
If doesExist(ws.Range("A" & i).Value) = False Then
ind = ind + 1
ReDim Preserve myTab(ind)
myTab(ind) = ws.Range("A" & i).Value
End If
i = i + 1
Wend

Set ws = Nothing

End Sub

Private Sub lanceRecap()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lig1 As Long
Dim lig2 As Long
Dim i As Long
Dim str As Variant

Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
lig2 = 2

For i = 1 To ind
lig1 = 2
str = myTab(i)
While ws1.Range("A" & lig1).Value <> ""
If ws1.Range("A" & lig1).Value = str Then
ws1.Range("B" & lig1).Copy Destination:=ws2.Range("A" & lig2)
ws1.Range("A" & lig1).Copy Destination:=ws2.Range("B" & lig2)
ws1.Range("E" & lig1).Copy Destination:=ws2.Range("C" & lig2)
lig2 = lig2 + 1
End If
lig1 = lig1 + 1
Wend
Next i

Set ws1 = Nothing
Set ws2 = Nothing

End Sub

Private Function doesExist(ByVal str As Variant) As Boolean
Dim i As Long

For i = 1 To ind
If myTab(i) = str Then
doesExist = True
Exit Function
End If
Next i

doesExist = False

End Function

End Function

Help SVP.

Cette macro me sert à effectuer un récapitulatif de commande.

Configuration: Windows XP
Internet Explorer 6.0

Meilleures réponses pour « Erreur de compilation » dans :
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Erreur système : Microsoft Visual Basic VoirEn ouvrant Excel, vous rencontrez un message d'erreur. Une fenêtre au nom de "Microsoft Visual Basic" s'ouvre avec le contenu suivant : Erreur système &H80004005 (-2147467259). Erreur non spécifiée Pour corriger le problème, suivez les...
Codes d'erreur de Windows VoirLa liste ci-dessous détaille les codes d'erreur s'affichant dans les boîtes de dialogue sous Windows : Code Description ------------------------ 1 Fonction incorrecte. 2 Le fichier spécifié est introuvable. 3 Le chemin d'accès spécifié...
Le contrôle des erreurs VoirLe contrôle d'erreurs Le codage binaire est très pratique pour une utilisation dans des appareils électroniques tels qu'un ordinateur, dans lesquels l'information peut être codée grâce à la présence ou non d'un signal électrique. Cependant le...
Linux - Compilation du noyau (Kernel) VoirCompilation du Kernel Cet article a pour but de présenter la compilation du noyau (ou kernel) sous Linux. Les explications suivantes sont basées sur la version 2.4.20 du kernel, la dernière en date au moment de l'écriture de l'article (mars...

1

bestkeeper, le 13 oct 2008 à 12:04:44

Quelqu'un peut m'aider SVP.

Je suis bloqué.

Répondre à bestkeeper

2

Polux31, le 13 oct 2008 à 12:07:47

Bonjour

myTab() doit être déclaré en variable global du module et non dans une procédure.

Tu as "Sub Bouton1_QuandClic()" qui n'a rien à faire ici puisque pas de End Sub.

Idem pourquoi 2 fois End Function à la fin ????

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

3

bestkeeper, le 13 oct 2008 à 12:47:59
  • +1

Désolé mais je n'y comprends rien.

Il me semble que c'est toi qui avait écrit la macro, et j'ai du faire une erreur en la recopiant.

Répondre à bestkeeper

4

Polux31, le 13 oct 2008 à 12:58:10
  • +1

Oui c'est bien moi qui ai fait ce code ... mais ça ne devait pas se présenter comme çà ...

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

5

bestkeeper, le 13 oct 2008 à 12:58:22

J'ai apporté les modifications.
Le hic, est que cela ne me prends en compte que les données de la première page.

Répondre à bestkeeper

6

Polux31, le 13 oct 2008 à 13:01:24
  • +1

Comment ça "les données de la première page" ???
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

7

bestkeeper, le 13 oct 2008 à 13:05:32
  • +1

En fait dans mon premier onglet "commande", je crée une page par commande fournisseur.

Et la macro ne prends en compte que les données de la première page.

en espérant être assez clair.

Répondre à bestkeeper

8

Polux31, le 13 oct 2008 à 13:08:48

Il faut modifier l'objet Worksheets().

Faire : Set ws = Worksheets("nom_de_l'onglet") ou lieu de Worksheets(1) par exemple.

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

9

bestkeeper, le 13 oct 2008 à 13:18:17
  • +1

Voici ce que j'ai écrit.
Et toujours le même problème


Option Explicit

Private myTab()
Private ind As Long

Public Sub mainTri()

prepareTri
lanceRecap

End Sub

Private Sub prepareTri()
Dim ws As Worksheet
Dim i As Long

Set ws = Worksheets("commandes")
i = 2
While ws.Range("A" & i).Value <> ""
If doesExist(ws.Range("A" & i).Value) = False Then
ind = ind + 1
ReDim Preserve myTab(ind)
myTab(ind) = ws.Range("A" & i).Value
End If
i = i + 1
Wend

Set ws = Nothing

End Sub

Private Sub lanceRecap()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lig1 As Long
Dim lig2 As Long
Dim i As Long
Dim str As Variant

Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
lig2 = 2

For i = 1 To ind
lig1 = 2
str = myTab(i)
While ws1.Range("A" & lig1).Value <> ""
If ws1.Range("A" & lig1).Value = str Then
ws1.Range("B" & lig1).Copy Destination:=ws2.Range("A" & lig2)
ws1.Range("A" & lig1).Copy Destination:=ws2.Range("B" & lig2)
ws1.Range("E" & lig1).Copy Destination:=ws2.Range("C" & lig2)
lig2 = lig2 + 1
End If
lig1 = lig1 + 1
Wend
Next i

Set ws1 = Nothing
Set ws2 = Nothing

End Sub

Private Function doesExist(ByVal str As Variant) As Boolean
Dim i As Long

For i = 1 To ind
If myTab(i) = str Then
doesExist = True
Exit Function
End If
Next i

doesExist = False

End Function

Répondre à bestkeeper

10

Polux31, le 13 oct 2008 à 13:20:50

Tu dois faire pareil dans lanceRecap() pour ws1 (onglet origine) et ws2 (onglet destination)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

11

bestkeeper, le 13 oct 2008 à 13:27:54

Ça ne marche toujours pas.


Option Explicit

Private myTab()
Private ind As Long

Public Sub mainTri()

prepareTri
lanceRecap

End Sub

Private Sub prepareTri()
Dim ws As Worksheet
Dim i As Long

Set ws = Worksheets("commandes")
i = 2
While ws.Range("A" & i).Value <> ""
If doesExist(ws.Range("A" & i).Value) = False Then
ind = ind + 1
ReDim Preserve myTab(ind)
myTab(ind) = ws.Range("A" & i).Value
End If
i = i + 1
Wend

Set ws = Nothing

End Sub

Private Sub lanceRecap()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lig1 As Long
Dim lig2 As Long
Dim i As Long
Dim str As Variant

Set ws1 = Worksheets("commandes")
Set ws2 = Worksheets("recap")
lig2 = 2

For i = 1 To ind
lig1 = 2
str = myTab(i)
While ws1.Range("A" & lig1).Value <> ""
If ws1.Range("A" & lig1).Value = str Then
ws1.Range("B" & lig1).Copy Destination:=ws2.Range("A" & lig2)
ws1.Range("A" & lig1).Copy Destination:=ws2.Range("B" & lig2)
ws1.Range("E" & lig1).Copy Destination:=ws2.Range("C" & lig2)
lig2 = lig2 + 1
End If
lig1 = lig1 + 1
Wend
Next i

Set ws1 = Worksheets("commandes")
Set ws2 = Worksheets("recap")

End Sub

Private Function doesExist(ByVal str As Variant) As Boolean
Dim i As Long

For i = 1 To ind
If myTab(i) = str Then
doesExist = True
Exit Function
End If
Next i

doesExist = False

End Function

Répondre à bestkeeper

12

Polux31, le 13 oct 2008 à 13:31:11
  • +1

As-tu une erreur ? si oui quel est le message et sur quelle ligne se produit-elle ?
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

13

bestkeeper, le 13 oct 2008 à 13:32:31

Je n'ai pas d'erreur.
La macro s'execute, et seules les données de la première page de l'onglet "commande" apparaissent.

Répondre à bestkeeper

14

Polux31, le 13 oct 2008 à 13:36:21
  • +1

La macro recopie des données de l'onglet "commande" vers l'onglet "recap", je ne vois pas le problème. «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

15

bestkeeper, le 13 oct 2008 à 14:09:26
  • +1

Peut-être des sauts de page?

J'en ai sur mon onglet commande.

Répondre à bestkeeper

16

Polux31, le 13 oct 2008 à 14:12:37

C'est à cause des cellules fusionnées ou vides ... le test se fait sur la colonne A. Pour parcourir toute la feuille, il ne faut ni cellules vides en A, ni cellules fusionnées.
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

17

bestkeeper, le 13 oct 2008 à 14:27:00

Ok, donc moi j'ai des cellules vides.

Je fais un test avec uniquement des cellules pleines, et je te tiens au courant.

Merci

Répondre à bestkeeper

18

Polux31, le 13 oct 2008 à 14:27:55

Ok

;o) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau

Répondre à Polux31

19

bestkeeper, le 13 oct 2008 à 14:56:21

Ça marche en supprimant les cellules vides.

Cependant, la récap ne me tri pas les références article par ordre alphabétique.
Cela serait plus facile à la lecture.

Merci

Répondre à bestkeeper