Avec VISUAL BASIC créer un tableau
benny
-
Polux31 Messages postés 7219 Statut Membre -
Polux31 Messages postés 7219 Statut Membre -
Bonjour,
je souhait faire un tableau:
j'ai deux colone -les lieus des pannes
-les pannes
je veux savoir le nombre de pannes par lieus. donc j'éfface les doublon de mes pannes et de mes lieus é je mets les lieus dans une colonne é mes pannes dans une ligne.
maintenant le problème sé l'équation ki va me permetre de sortir le nombre de pannes par lieu... jespère ke l'on poura m'aidé merci d'avance
je vous donne le début :
Sub installation()
ranger
compter
classement
edit_graphe
End Sub
_____________________________________________________________________________________
Sub ranger()
'j'écris les toutes les installations du query et j'éfface les doublons
'======================================================================
Worksheets("brouillon").Range("A2:E1000").Value = Null
Sheets("QUERY").Select
Range("I2:I1000").Select
Selection.Copy
Sheets("brouillon").Select
Range("B2").Select
ActiveSheet.Paste
Sheets("QUERY").Select
Range("D1:D1000").Select
Selection.Copy
Sheets("brouillon").Select
Range("A1").Select
ActiveSheet.Paste
' Range("A1").Select
Application.CutCopyMode = False
Range("A1:A1000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"C1"), Unique:=True
End Sub
___________________________________________________________________________________________
Sub compter()
Worksheets("brouillon").Range("D2:E1000").Value = 0
lignea = 2
ligneb = lignea
lignec = 2
pasvide = True
test = Worksheets("brouillon").Cells(lignea, 1).Value
While pasvide = True
lignec = 2
pasvide1 = True
test1 = Worksheets("brouillon").Cells(lignec, 3).Value
While pasvide1 = True
If Worksheets("brouillon").Cells(lignec, 3).Value = Worksheets("brouillon").Cells(lignea, 1).Value Then
Worksheets("brouillon").Cells(lignec, 4).Value = Worksheets("brouillon").Cells(lignec, 4).Value + 1
Worksheets("brouillon").Cells(lignec, 5).Value = Worksheets("brouillon").Cells(lignec, 5).Value + Worksheets("brouillon").Cells(lignea, 2).Value
pasvide1 = False
End If
If Worksheets("brouillon").Cells(lignec, 3).Value <> Worksheets("brouillon").Cells(lignea, 1).Value Then
lignec = lignec + 1
End If
test1 = Worksheets("brouillon").Cells(lignec, 3).Value
If test1 = "" Then
pasvide1 = False
End If
Wend
lignea = lignea + 1
test = Worksheets("brouillon").Cells(lignea, 1).Value
If test = "" Then
pasvide = False
End If
Wend
Worksheets("brouillon").Range("A1:B1000").Value = Null
End Sub
je souhait faire un tableau:
j'ai deux colone -les lieus des pannes
-les pannes
je veux savoir le nombre de pannes par lieus. donc j'éfface les doublon de mes pannes et de mes lieus é je mets les lieus dans une colonne é mes pannes dans une ligne.
maintenant le problème sé l'équation ki va me permetre de sortir le nombre de pannes par lieu... jespère ke l'on poura m'aidé merci d'avance
je vous donne le début :
Sub installation()
ranger
compter
classement
edit_graphe
End Sub
_____________________________________________________________________________________
Sub ranger()
'j'écris les toutes les installations du query et j'éfface les doublons
'======================================================================
Worksheets("brouillon").Range("A2:E1000").Value = Null
Sheets("QUERY").Select
Range("I2:I1000").Select
Selection.Copy
Sheets("brouillon").Select
Range("B2").Select
ActiveSheet.Paste
Sheets("QUERY").Select
Range("D1:D1000").Select
Selection.Copy
Sheets("brouillon").Select
Range("A1").Select
ActiveSheet.Paste
' Range("A1").Select
Application.CutCopyMode = False
Range("A1:A1000").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"C1"), Unique:=True
End Sub
___________________________________________________________________________________________
Sub compter()
Worksheets("brouillon").Range("D2:E1000").Value = 0
lignea = 2
ligneb = lignea
lignec = 2
pasvide = True
test = Worksheets("brouillon").Cells(lignea, 1).Value
While pasvide = True
lignec = 2
pasvide1 = True
test1 = Worksheets("brouillon").Cells(lignec, 3).Value
While pasvide1 = True
If Worksheets("brouillon").Cells(lignec, 3).Value = Worksheets("brouillon").Cells(lignea, 1).Value Then
Worksheets("brouillon").Cells(lignec, 4).Value = Worksheets("brouillon").Cells(lignec, 4).Value + 1
Worksheets("brouillon").Cells(lignec, 5).Value = Worksheets("brouillon").Cells(lignec, 5).Value + Worksheets("brouillon").Cells(lignea, 2).Value
pasvide1 = False
End If
If Worksheets("brouillon").Cells(lignec, 3).Value <> Worksheets("brouillon").Cells(lignea, 1).Value Then
lignec = lignec + 1
End If
test1 = Worksheets("brouillon").Cells(lignec, 3).Value
If test1 = "" Then
pasvide1 = False
End If
Wend
lignea = lignea + 1
test = Worksheets("brouillon").Cells(lignea, 1).Value
If test = "" Then
pasvide = False
End If
Wend
Worksheets("brouillon").Range("A1:B1000").Value = Null
End Sub
A voir également:
- Avec VISUAL BASIC créer un tableau
- Tableau word - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Visual basic - Télécharger - Langages
- Créer un lien pour partager des photos - Guide
8 réponses
bonjour,
beh à première vue y à pas photo
Tu vide la feuille
Worksheets("brouillon").Range("D2:E1000").Value = 0
lignea = 2
ligneb = lignea
lignec = 2
pasvide = True
ensuite tu veux savoir ce qu'il y a dedans
test = Worksheets("brouillon").Cells(lignea, 1).Value
mais bien sûr c'est zéro puisque 3 ligne plus haut tu met tout à zéro ????
Alors ?? j'ai rien compris
A+
beh à première vue y à pas photo
Tu vide la feuille
Worksheets("brouillon").Range("D2:E1000").Value = 0
lignea = 2
ligneb = lignea
lignec = 2
pasvide = True
ensuite tu veux savoir ce qu'il y a dedans
test = Worksheets("brouillon").Cells(lignea, 1).Value
mais bien sûr c'est zéro puisque 3 ligne plus haut tu met tout à zéro ????
Alors ?? j'ai rien compris
A+
Bonjour,
Je ne comprends pas non plus pourquoi enlever les doublons s'il faut faire un comptage ??? ou alors j'ai pas tout bien compris ... :o|
Sinon voilà un exemple qui permet de compter les pannes par lieux et les pannes par type de pannes
;o)
EDIT: J'ai apporté des corrections.
Je ne comprends pas non plus pourquoi enlever les doublons s'il faut faire un comptage ??? ou alors j'ai pas tout bien compris ... :o|
Sinon voilà un exemple qui permet de compter les pannes par lieux et les pannes par type de pannes
Option Explicit
Private tabLieux()
Private TabPanne()
Private indLieux As Long
Private indPanne As Long
Sub main()
indLieux = 0
indPanne = 0
initTableau
comptePanneParLieu
compteTypedePanneparPanne
End Sub
Public Sub initTableau()
Dim ws As Worksheet
Dim lig As Long
Set ws = Worksheets(1)
lig = 2
ReDim tabLieux(indLieux)
With ws
While .Range("A" & lig).Value <> ""
If doesExist(.Range("A" & lig).Value, tabLieux) = False Then
ReDim Preserve tabLieux(indLieux)
tabLieux(indLieux) = .Range("A" & lig).Value
indLieux = indLieux + 1
End If
lig = lig + 1
Wend
lig = 2
ReDim TabPanne(indPanne)
While .Range("B" & lig).Value <> ""
If doesExist(.Range("B" & lig).Value, TabPanne) = False Then
ReDim Preserve TabPanne(indPanne)
TabPanne(indPanne) = .Range("B" & lig).Value
indPanne = indPanne + 1
End If
lig = lig + 1
Wend
End With
End Sub
Private Sub comptePanneParLieu()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lig1 As Long
Dim lig2 As Long
Dim i As Long
Dim cpt As Long
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
lig2 = 2
With ws1
For i = LBound(tabLieux()) To UBound(tabLieux())
cpt = 0
lig1 = 2
While .Range("A" & lig1).Value <> ""
If .Range("A" & lig1).Value = tabLieux(i) Then
cpt = cpt + 1
End If
lig1 = lig1 + 1
Wend
ws2.Range("A" & lig2).Value = tabLieux(i)
ws2.Range("B" & lig2).Value = cpt
lig2 = lig2 + 1
Next i
End With
End Sub
Private Sub compteTypedePanneparPanne()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim lig1 As Long
Dim lig2 As Long
Dim i As Long
Dim cpt As Long
Set ws1 = Worksheets(1)
Set ws2 = Worksheets(2)
lig2 = 2
With ws1
For i = LBound(TabPanne()) To UBound(TabPanne())
cpt = 0
lig1 = 2
While .Range("B" & lig1).Value <> ""
If .Range("B" & lig1).Value = TabPanne(i) Then
cpt = cpt + 1
End If
lig1 = lig1 + 1
Wend
ws2.Range("D" & lig2).Value = TabPanne(i)
ws2.Range("E" & lig2).Value = cpt
lig2 = lig2 + 1
Next i
End With
End Sub
Private Function doesExist(ByVal str As Variant, ByRef tbl()) As Boolean
Dim i As Long
For i = LBound(tbl()) To UBound(tbl())
If tbl(i) = str Then
doesExist = True
Exit Function
End If
Next i
doesExist = False
End Function
;o)
EDIT: J'ai apporté des corrections.
merci Polux31 mais il me di k'il ya pliein de "beug" (que 'ai esseiller de rectifier avec pas trop de succè)
pour se qui non pas compris
sur une page appellé brouillon
j'ai une première colonne avec les lieu des pannes (A) avec 1 nombre indéfini de lieu
j'ai une deuxième colonne avec les différente pannes (B) celon les lieus
a partir de sa je souhait sortir 1 tableau ki me donnera le nombre de panne par lieu
par exempl sur la ligne (sur la ligne 1 é a partir de la colonne E) je vais mettre les différentes pannes (pour sela jutilise le système des doublons)
ensuite je vais mettre les différent lieu(toujour le système des doublons) sur une colonne (a partir de la ligne 2 et la colonne E)
et la vien mon problème (ki me prend la tète depuis hier midi) je veu compter le nombre de pannes par lieu é l'écrire dans mon tableau.
voila si je pouvais avoir un petit coup de pouce sa marrangerè bien merci d'avance
pour se qui non pas compris
sur une page appellé brouillon
j'ai une première colonne avec les lieu des pannes (A) avec 1 nombre indéfini de lieu
j'ai une deuxième colonne avec les différente pannes (B) celon les lieus
a partir de sa je souhait sortir 1 tableau ki me donnera le nombre de panne par lieu
par exempl sur la ligne (sur la ligne 1 é a partir de la colonne E) je vais mettre les différentes pannes (pour sela jutilise le système des doublons)
ensuite je vais mettre les différent lieu(toujour le système des doublons) sur une colonne (a partir de la ligne 2 et la colonne E)
et la vien mon problème (ki me prend la tète depuis hier midi) je veu compter le nombre de pannes par lieu é l'écrire dans mon tableau.
voila si je pouvais avoir un petit coup de pouce sa marrangerè bien merci d'avance
Bonjour,
As-tu remarqué que j'avais apporté des corrections. Il suffit d'adapter à ton fichier (le nom des feuilles, les colonnes etc...). Ca fonctionne très bien chez moi.
As-tu remarqué que j'avais apporté des corrections. Il suffit d'adapter à ton fichier (le nom des feuilles, les colonnes etc...). Ca fonctionne très bien chez moi.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Tu veux absolument le faire en vba ?
Sinon tu le tableau croisé dynamique (TCD) dans le menu données qui est prévu pour...
# Cliquer dans la base
# Données/Rapport de tableau croisé
# Cliquer sur Disposition
# Lieux en ligne, nbPannes en colonne, nbPannes dans données
# Double-clic sur nbPannes , puis Somme
et si tu veux approfondir les TCD : http://boisgontierjacques.free.fr/
eric
Tu veux absolument le faire en vba ?
Sinon tu le tableau croisé dynamique (TCD) dans le menu données qui est prévu pour...
# Cliquer dans la base
# Données/Rapport de tableau croisé
# Cliquer sur Disposition
# Lieux en ligne, nbPannes en colonne, nbPannes dans données
# Double-clic sur nbPannes , puis Somme
et si tu veux approfondir les TCD : http://boisgontierjacques.free.fr/
eric
pour POLUX31: oui je pense que la majeur parite des beugs vien de l'adaptation mais il y'a certainne chose que je n'arrive pas à adapter comme
Private tabLieux()
Private TabPanne()
Private indLieux As Long
Private indPanne As Long
j'arrive pa a voir a quoi cela correspond.
pour eriiic: je veux ke celase face automtiquement donc sé pa super. mais j'ai utilisé ton idé pour enregistrer une macro mé s'est pa super
je continue a chercher é si quelqu'un a une idé k'il n'ézite pas merci d'avance
Private tabLieux()
Private TabPanne()
Private indLieux As Long
Private indPanne As Long
j'arrive pa a voir a quoi cela correspond.
pour eriiic: je veux ke celase face automtiquement donc sé pa super. mais j'ai utilisé ton idé pour enregistrer une macro mé s'est pa super
je continue a chercher é si quelqu'un a une idé k'il n'ézite pas merci d'avance
re,
c'était pas super car il fallait seulement Lieux en ligne et nbPannes dans données (pas nbPannes en colonne)
Et si tu rajoutes/modifies les données il faut 'actualiser les données' avec le ! rouge
http://www.cijoint.fr/cjlink.php?file=cj200903/cijjaseSzP.xls
eric
c'était pas super car il fallait seulement Lieux en ligne et nbPannes dans données (pas nbPannes en colonne)
Et si tu rajoutes/modifies les données il faut 'actualiser les données' avec le ! rouge
http://www.cijoint.fr/cjlink.php?file=cj200903/cijjaseSzP.xls
eric
Private tabLieux() et Private TabPanne() sont, ce que l'on appelle des tableaux. Dans tabLieux on stocke les lieux, en passant pas la fonction doesExist(), on évite les doublons. Idem pour tabPanne qui stocke les pannes.
indLieux et indPanne sont des index utilisés pour allouer un élément en mémoire à chaque tableau.
Ensuite, la procédure comptePanneParLieu() compte combien de fois on trouve chaque élément du tableau tabLieux dans la colonne A, ce qui me donne le nombre de panne par lieu.
La procédure compteTypedePanneparPanne() compte de fois on trouve chaque élément du tableau tabPanne dans la colonne B, ce qui me donne le nombre de panne par type de panne.
Le résultat s'affiche dans l'onglet 2 du classeur.
indLieux et indPanne sont des index utilisés pour allouer un élément en mémoire à chaque tableau.
Ensuite, la procédure comptePanneParLieu() compte combien de fois on trouve chaque élément du tableau tabLieux dans la colonne A, ce qui me donne le nombre de panne par lieu.
La procédure compteTypedePanneparPanne() compte de fois on trouve chaque élément du tableau tabPanne dans la colonne B, ce qui me donne le nombre de panne par type de panne.
Le résultat s'affiche dans l'onglet 2 du classeur.