Problème de qualificateur

Dapounet

XLDnaute Nouveau
Bonjour à tous !
J'ai déjà créé un topic sur ce forum à propos d'un projet de gestion de garage automobile. J'ai plutôt bien avancé grâce aux aides apportées !
Mais là, j'ai un problème assez spécifique pour créer un nouveaux topic (je pense ^^" )

Mon code ressemble à ceci :
Code:
Sub TestResearch()

    Dim numAno As String
    Dim toto As String
    Dim lignef1 As Integer
    Dim colonnef1 As Integer
    Dim lignef2 As Integer
    Dim colonnef2 As Integer
    Dim Plage As Range

    lignef1 = 2
    colonnef1 = 8
    lignef2 = 3
    colonnef2 = 2

    numAno = Worksheets(7).Cells(lignef1, colonnef1).Value

   Set Plage = Worksheets(8).Range("B4:B65536").Find(What:=numAno, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True, SearchOrder:=xlByRows, SearchDirection:=xlNext)

    If Not Plage Is Nothing Then
    ' On copie l'etat situe dans la feuille 4 sur la feuille 2
        toto = Plage.Offset(0, 35).Value

    'ERREUR ICI  /!\
        toto.Copy Destination:=Worksheets(7).Range(Cells(lignef1, 31))  

        If toto = "Validé" Then
            colonnef1 = colonnef1 + 1
            colonnef2 = colonnef2 + 1
        End If

        ElseIf toto <> "Validé" Then
            lignef1 = lignef1 + 1
            lignef2 = lignef2 + 1
            colonnef1 = 8
            colonnef2 = 2
        End If

    If Plage Is Nothing Then
        Worksheets(7).Range(Cells(lignef1, 31)) = "Validé"
        lignef1 = lignef1 + 1
    End If

End Sub

Voici mon problème :
juste après la ligne en commentaire 'ERREUR ICI, j'ai une erreur de qualificateur lors de la compilation.
Je pense que ceci est dû au fait que je n'ai pas définit de type pour ma variable toto.
En fait, j'aimerais que toto prenne la valeur souhaitée (validé ou pas validé). Seulement, cette valeur est le résultat d'une suite de condition (if). Je pense que mon problème vient de là mais je ne sais pas comment résoudre ce problème ! :S
Quelqu'un pourrait-il m'expliquer s'il vous plaît ?! ^^"

D'avance merci !
 

Dapounet

XLDnaute Nouveau
Re : Problème de qualificateur

Effectivement, je n'y avais pas pensé mais je pense que tu as raison (d'après ce que j'ai pu trouver à droite / à gauche sur le net).

Du coup, j'ai une nouvelle erreur sur cette ligne :
" Erreur d'éxecution 1004
Erreur définie par l'application ou par l'objet"

la ligne en question :
Code:
Worksheets(7).Range(Cells(lignef1, 31)) = toto

A quoi peut être dûe cette erreur ?! :S
 

Dapounet

XLDnaute Nouveau
Re : Problème de qualificateur

YATTA !!!! \o/
You're my masta !! ^^"

Bon bah effectivement, ça a bien résolu mon problème, plus d'erreur de compilation =)
C'est classe !! Cependant, ma macro ne fait pas ce que je veux ! xD
Enfin si, mais que pour la première ligne (à première vue).
Je ne sais pas si elle passe toutes les valeurs sur la première ligne (problème d'incrémentation de variable ?! :S ).

Est-ce qu'il y a possibilitée de faire une exécution "pas à pas" afin de voir si mes variables changent correctement de valeur ?! :S

(sinon, oui, j'ai 8 feuilles sur mon tableau de 10Mo et quelques ^^" )
 

kjin

XLDnaute Barbatruc
Re : Problème de qualificateur

Bonjour,
Avec le peu d'explication que tu fournis c'est coton
En outre on ne comprend pas à quoi sert l'incrémentation des variables en fin de procédure
Essaie ceci et si ce n'est pas le résultat souhaité, explique au moins l'objet de la macro
Code:
Sub TestResearch()

    Dim numAno As String
    Dim toto As Range
    Dim lignef1 As Integer
    Dim colonnef1 As Integer
    Dim lignef2 As Integer
    Dim colonnef2 As Integer
    Dim Plage As Range

    lignef1 = 2
    colonnef1 = 8
    lignef2 = 3
    colonnef2 = 2

    numAno = Sheets(7).Cells(lignef1, colonnef1)
    
   Set Plage = Sheets(8).Range("B4:B65536").Find(numAno)

    If Not Plage Is Nothing Then
        Set toto = Plage.Offset(0, 35)
        
        toto.Copy Sheets(7).Cells(lignef1, 31)
            
            If toto = "Validé" Then
                colonnef1 = colonnef1 + 1
                colonnef2 = colonnef2 + 1
            Else
                lignef1 = lignef1 + 1
                lignef2 = lignef2 + 1
                colonnef1 = 8
                colonnef2 = 2
            End If
    Else
        Sheets(7).Range(Cells(lignef1, 31)) = "Validé"
        lignef1 = lignef1 + 1
    End If
    
End Sub
A+
kjin

Edit : Oups, un peu à la bourre moi; salut Pascal
 
Dernière édition:

Dapounet

XLDnaute Nouveau
Re : Problème de qualificateur

Merci pour ton aide !!!
Je pense donc avoir une erreur dans mes tests. Je pense que mes variables ne s'incrémentent pas comme il faut, ce qui fait qu'en fait, il ne test que la première anomalie de mon tableau :(

Je vais essayer de trouver une solution à ce problème ^^" C'est pas gagné ! xD
 

Dapounet

XLDnaute Nouveau
Re : Problème de qualificateur

Effectivement, mes explications .... n'existent pas sur ce topic ! Alors voici l'explication :

J'ai 2 feuilles. Une avec des numéros de voitures et des numéros d'anomalies (si les véhicules ont des réparations à effectuer). L'autre avec les numéros d'anomalies et leur état (réparé ou pas ! )

Ce que je souhaiterais : pouvoir afficher sur ma première feuille si les véhicules sont roulants ou non !
Pour cela, on regarde si ils ont des anomalies :
si non, on les considère comme réparé
si oui, on regarde l'état des anomalies :
si elles sont toutes corrigées, alors le véhicule est réparé
sinon, le véhicule prend l'état d'en cours.

J'espère avoir été assez précis dans mon court résumé ! ^^"
Ma boucle me permet (enfin j'aimerais ^^") de parcourir tout mon tableau afin de traiter tout les véhicules (variable lignef1) && traiter toutes les anomalies (variable lignef2).
 

Dapounet

XLDnaute Nouveau
Re : Problème de qualificateur

Je pense avoir oublié une boucle ! En effet, ma macro s'effectue et prends les valeurs souaitées mais elle s'arrête à la fin de mes if ! Ors, je voudrais qu'elle s'effectue en boucle sur mon tableau afin de traiter toutes les "voitures" ^^"
Je vais essayer de trouver une solution ^^"

Merci à vous pour votre aide, ça m'est grandement utile =)
 

Dapounet

XLDnaute Nouveau
Re : Problème de qualificateur

Erf, je butte un peux pour trouver la dernière Cellule de la première ligne, qui contient des données ! :S

Je lis beaucoup de choses sur le net, mais je ne sais pas quelles solutions sont justes ! :S

Auriez-vous une idée pour m'aiguillez s'il vous plaît ?!

Je pensais ensuite à une boucle de type :
Code:
For i=1 To ['ici, la dernière ligne contenant une donnée]
    mon traitement à effectuer
Next

Est-ce juste et une bonne solution ? Ou devrais-je passer par un While ?
 

kjin

XLDnaute Barbatruc
Re : Problème de qualificateur

Re,
Evidemment, si tu crée une boucle, l'incémentation est déjà plus compréhensible
Dans ce cas, je ne comprends pas à quoi sert le Copy/Paste
Plutôt que cette histoire de bagnoles, ne serait ce pas plus simple d'expliquer les tenants et aboutissants de la procédure, parce qu'entre validé, réparé, roulant, cassé, corrigé...:eek:
A+
kjin
 

Dapounet

XLDnaute Nouveau
Re : Problème de qualificateur

^^"

J'aimerais bien mais les données étant confidentielles vu que c'est pour une entreprise nationale, je ne peux pas me le permettre :S (dommage car ça m'aiderait bien ^^" )

En fait, il n'y a que 2 états possibles (pour les anomalies comme pour les voitures) : "Réparé" ou "Pas réparé". Je ne sais pas si ça aide :S

En tout cas, ma boucle fonctionne, niquel, ma macro tourne ! OU PRESQUE :'(

Arrivé au traitement du 3289ème véhicule (irf ^^") j'ai une erreur de compilation :'(
Cela me sort une erreur 1004.... Je ne comprends pas trop d'où cela vient ?! :S

Voici la tête de mon code :
Code:
Sub TestResearch()
'
' TestResearch Macro
' Essai pour la recherche d'une valeur en VB
'
    
'
' Définition des variables
' numAno = numero de l'anomalie a chercher
' lignef1 = numéro de la ligne sur laquelle on souhaite effectuer la recherche sur la feuille des voitures
' colonnef1 = numéro de la colonne sur laquelle on souhaite effectuer la recherche sur la feuille des voitures
' lignef2 = numéro de la ligne sur laquelle on souhaite effectuer la recherche sur la feuille des anomalies
' colonnef2 = numéro de la colonne sur laquelle on souhaite effectuer la recherche sur la feuille des anomalies

' plage est la plage sur laquelle on souhaite effectuer la recherche
'

    Dim numAno As String
    Dim toto As String
    Dim lignef1 As Integer
    Dim colonnef1 As Integer
    Dim lignef2 As Integer
    Dim colonnef2 As Integer
    Dim Plage As Range
    Dim l

'
' Initialisation des variables
' Worksheets(2).Cells(lignef1, colonnef1) nous pose sur la cellule H2, premiere case avec anomalie sur la feuille 2
' Worksheets(4).Cells(lignef2, colonnef2) nous pose sur la cellule B4, premiere case avec anomalie sur la feuille 4
'
    
    lignef1 = 2
    colonnef1 = 8
    lignef2 = 3
    colonnef2 = 2
    l = Worksheets(7).Cells(Rows.Count, 1).End(xlUp).Row
    
    For i = 1 To l
        numAno = Worksheets(7).Cells(lignef1, colonnef1).Value
       
        '
        ' Debut du traitement a effectuer
        '
        Set Plage = Worksheets(8).Range("B4:B65536").Find(What:=numAno, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True, SearchOrder:=xlByRows, SearchDirection:=xlNext)

    
        ' Si il y a une valeur pour l'etat :
        If Not Plage Is Nothing Then
        ' On copie l'etat situe dans la feuille 4 sur la feuille 2
            toto = Plage.Offset(0, 35).Value
        
            Worksheets(7).Cells(lignef1, 31) = toto
            ' Si l'etat est "corrigee" alors on incremente colonne pour regarder si il y a une autre anomalie
        
            If toto = "Corrigée" Then
                colonnef1 = colonnef1 + 1
                colonnef2 = colonnef2 + 1
            
            ' Si l'etat est different de "corrigee" alors on incremente ligne pour passer au folio/raster suivant
            Else
                lignef1 = lignef1 + 1
                lignef2 = lignef2 + 1
                colonnef1 = 8
                colonnef2 = 2
            End If
        
    ' Si il n'y a pas de valeur pour l'etat d'une anomalie :
        Else
            Worksheets(7).Range(Cells(lignef1, 31)) = "Corrigée"
            lignef1 = lignef1 + 1
        End If
    Next
'
End Sub

Quelqu'un aurait une idée ?! :S
 

Dapounet

XLDnaute Nouveau
Re : Problème de qualificateur

Hey ! Ne bougeons plus ! Il semblerait que l'erreur vienne de mon tableau !! ^^"

Le boss qui aurait merdouillé ?! :p

Sinon, à première vue, ma macro marche (pour ceux qui voudraient l'utiliser .... il n'y a pas de problème !! =) )
 

Discussions similaires

Statistiques des forums

Discussions
312 550
Messages
2 089 518
Membres
104 200
dernier inscrit
JONVA