Résolu Compter les donnees sur excel

dianbobo

Expert
Bonjour tout le monde,

voila j'ai un classeur excel avec deux feuilles
feuil1=''Global count'' et feuil2=''availability''

Mon objectif c'est chercher les elements de la feuille2 dans la feuille1 grace a deux colonne de la feuille2 identique dans la feuil1.

donc je veux parcourir la feuille1 , ligne par ligne verifier si je retrouve ce que je cherche a partir de ces donnees la, puis inscrire dans la feuille2 le nombre d'elements trouves a la ligne considere.

NB; la feuille1 a deux colonnes de recherche pour chaque element i.
(si je retrouve le meme numero deux fois , je compte 1, si je trouve le numero au moins une fois je compte toujours 1.)

voici ma macro mai j'ai une erreur

Code:
Sub availability_datas()
    Dim i, j As Integer ' declaration des variables entieres i,j
    Dim DernLigne, Item_Number, GB_Dernline, RN_Item_Number, nd_Item_Number As Long ' derniere ligne de la feuille.
    Dim availability As Worksheet

    Dim Count As Integer
    
DernLigne = Worksheets("availability").Range("A1048576").End(xlUp).Row 'derniere ligne de la feuille availability
GB_Dernline = Worksheets("Global count").Range("A1048576").End(xlUp).Row 'derniere ligne de la feuille global count
    
    Count = 0
    
    For i = 3 To DernLigne
    ' on fixe le numero de l'item_Number, puis on fait la recharche dans la seconde feuille.
    Item_Number = Worksheets("availability").Cells(i, "A").Value
            
            For j = 2 To GB_Dernline 'la boucle est pour la feuille "Global count"
               
               RN_Item_Number = Worksheets("Global count").Cells(j, "F").Value
               nd_Item_Number = Worksheets("Global count").Cells(j, "G").Value
                    
                    If Item_Number = RN_Item_Number Then
                        Count = Cout + 1
                    ElseIf Item_Number = Item_Number Then
                        Count = Count + 1
                    Else
                        Count = 0
                    End If
                    
               Count = Count 'quantite trouvee
               
            Next
    
    Worksheets("availability").Cells(i, "G").Value = Count 'Nombre d'items trouves pour l'Item_Number considere
    
    Next
    
    
End Sub

Merci d'avance de votre aide
 

dianbobo

Expert
a ce niveau une erreur s'est glissee voici la bonne formulation

ElseIf Item_Number =nd_Item_Number Then
 

drul

Obscur pro du hardware
Staff
Salut, quel est ton problème exactement (quelle erreur quoi).

Quelques remarques:
Code:
dim i,j as integer 'ici seul j sera un integer, i est un "variant", vba ne permet pas ce type de déclaration...
'...
DernLigne = Worksheets("availability").Range("A1048576").End(xlUp).Row 'pas top (plantera sur excel 2003), à remplacer par:
DernLigne = Worksheets("availability").Range("A" & Application.rows.count).End(xlUp).Row' marchera sur toutes les versions d'excel
'...
Count = Count 'code intéressant mais ...

J'ai dans l'idée que tu remets count à 0 au mauvais endroit, amha il serait plus judicieux de le faire juste après

Code:
Worksheets("availability").Cells(i, "G").Value = Count 'Nombre d'items trouves pour l'Item_Number considere
 

dianbobo

Expert
Voila j'ai fais les modifications que drul a suggere, voici le code

Code:
Sub availability_datas()

    Dim i As Integer ' declaration des variables entieres i
    Dim j As Integer ' declaration des variables entieres j
    
    Dim DernLigne As Long ' derniere ligne de la feuille.
    Dim Item_Number As Long
    Dim GB_Dernline As Long
    Dim RN_Item_Number As Long
    Dim nd_Item_Number As Long
    
    Dim availability As Worksheet

    Dim Count As Long
    
DernLigne = Worksheets("availability").Range("A" & Application.Rows.Count).End(xlUp).Row 'derniere ligne de la feuille availability
GB_Dernline = Worksheets("Global count").Range("A" & Application.Rows.Count).End(xlUp).Row 'derniere ligne de la feuille global count
    
    Count = 0
    
    Worksheets("Global count").Columns(6).TextToColumns FieldInfo:=Array(1, 1) ' Convertir les textes en nombres
    Worksheets("Global count").Columns(7).TextToColumns FieldInfo:=Array(1, 1)
    
    For i = 3 To DernLigne
    ' on fixe le numero de l'item_Number, puis on fait la recharche dans la seconde feuille.
    Item_Number = Worksheets("availability").Cells(i, "A").Value
            
            For j = 2 To GB_Dernline 'la boucle est pour la feuille "Global count"
               
               RN_Item_Number = Worksheets("Global count").Cells(j, "F").Value
               nd_Item_Number = Worksheets("Global count").Cells(j, "G").Value
                    
                    If Item_Number = RN_Item_Number Then
                        Count = Cout + 1
                    ElseIf Item_Number = nd_Item_Number Then
                        Count = Count + 1
                    Else
                        Count = 0
                    End If
                    
               
               
            Next
    
    Worksheets("availability").Cells(i, "G").Value = Count 'Nombre d'items trouves pour l'Item_Number considere
    Count = Count 'quantite trouvee
    Next
    
    
End Sub

l'erreur que j'ai c'est

'''Type mismatch (Error 13)'''

merci de votre aide
 

drul

Obscur pro du hardware
Staff
à quel ligne ça plante ?
Encore quelques remarque:

Code:
If Item_Number = RN_Item_Number Then
  Count = Cout + 1 'Oh la belle boulette ! pour éviter ce genre de truc, utilise "option explicit" dans ton projet

Code:
Count = Count 'ça sert à rien se truc ! remplce le par:  Count = 0 et vire les lignes:

Else
       Count = 0
Question subsidiaire: As-tu qqch dans la colonne A de "Globale count" ? est-ce que cela correspond bien à la dernière ligne non vide de la colonne "F" et de la colonne "G" ?
 

dianbobo

Expert
Je ne sais pas a quelle ligne ca plante. comment le savoir? ( je fais juste run et j'ai un message d'erreur qui apparait )

Count=Count+1 , je ne comprend pas pourqui tu dis que c'est une boulette.

oui dans la colonne A J'ai des nombres et cela correspont bien a la derniere ligne non vide de la colonne ''F'' et ''G''.
 

drul

Obscur pro du hardware
Staff
combien as-tu de ligne dans ton tableau ? (en colonne A) dans les deux feuilles ?
 

dianbobo

Expert
J'ai 214 lignes pour la feuille ''Global count'' et 152 lignes pour la feuille '' availability'' :)
 

dianbobo

Expert
j'ai fais F8, j'ai vu l'erreur en fait j'avais en colonne ''G'' ,dans une cellule un texte au lieu d'un nombre.
le code ne plante plus mais j'ai comme resultat Count=0 pour chaque ligne :(
 

dianbobo

Expert
Code:
Option Explicit

Sub availability_datas()

    Dim i As Integer ' declaration des variables entieres i
    Dim j As Integer ' declaration des variables entieres j
    
    Dim DernLigne As Long ' derniere ligne de la feuille availability
    Dim Item_Number As Long
    Dim GB_Dernline As Long ' derniere ligne de la feuille Global count
    Dim RN_Item_Number As Long
    Dim nd_Item_Number As Long
    
    Dim availability As Worksheet

    Dim Count As Long
    
DernLigne = Worksheets("availability").Range("A" & Application.Rows.Count).End(xlUp).Row 'derniere ligne de la feuille availability
GB_Dernline = Worksheets("Global count").Range("A" & Application.Rows.Count).End(xlUp).Row 'derniere ligne de la feuille global count
    
    Count = 0
    
    Worksheets("Global count").Columns(6).TextToColumns FieldInfo:=Array(1, 1) ' Convertir les textes en nombres
    Worksheets("Global count").Columns(7).TextToColumns FieldInfo:=Array(1, 1)
    Worksheets("availability").Columns(1).TextToColumns FieldInfo:=Array(1, 1)
    
    For i = 3 To DernLigne
    ' on fixe le numero de l'item_Number, puis on fait la recharche dans la seconde feuille.
    Item_Number = Worksheets("availability").Cells(i, "A").Value
            
            For j = 2 To GB_Dernline 'la boucle est pour la feuille "Global count"
               
               RN_Item_Number = Worksheets("Global count").Cells(j, "F").Value
               nd_Item_Number = Worksheets("Global count").Cells(j, "G").Value
                    
                    If Item_Number = RN_Item_Number Then
                        Count = Count + 1
                    ElseIf Item_Number = nd_Item_Number Then
                        Count = Count + 1
                    Else
                        Count = 0
                    End If
               
            Next
     Worksheets("availability").Cells(i, "G").Value = Count 'Nombre d'items trouves pour l'Item_Number considere
    Count = 0
    
    Next
    
    
End Sub
 

drul

Obscur pro du hardware
Staff
Meilleure réponse
pour la troisième fois, enlève :

Else
Count = 0

N.B. Ma remarque sur les integer n'était pas la pour rien, i et j étant d'un type inférieur à DernLigne tu prends un risque d'overflow (même si en pratique je doute que tu dépasses 32767 lignes, c'est un bug lattent facile à éviter).
 

dianbobo

Expert
Oui tu avais raison j'ai fais

j'ai enleve Else ( count = 0) ca marche bien
encore grand merci drul :)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 101
Membres
1 586 287
Dernier membre
lucilleguffey
Partager cette page
Haut