Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

Réponse
 
Outils de la discussion
Vieux 27/08/2008, 16h16   #1 (permalink)
Membre actif
 
Avatar de mat-tech
 
Date d'inscription: avril 2006
Localisation: Bruxelles
Messages: 171
Par défaut Recherche et opération entre Feuil

Bonjour à tous,

A l'aide d'une macro j'aimerai que c'elle-ci regarde 2 cellules dans une "Releve" (l'une au dessus de l'autre), c'elles-ci sont des dates, ensuite qu'elle recherche ces dates dans "gazinfo" et qu'elle fasse une addition des cellules des lignes comprises entre ces date pour les colonnes voisine (des nombres ex 12,2).

J'ai un code mais celui-ci ne fonctionne pas (rien ne se passe, et "erreur 13"), mais je ne vois pas mon erreur( sans doute lorsque le programme arrive a une case vide)

Merci pour votre aide

Code :
 
Private Sub CommandButton1_Click()
Dim i, j As Integer
Dim Ligdeb, LigFin As Integer
Dim Datedeb, Datefin As Date
Dim celdate As String
Dim rep As Variant
 
For j = 3 To Sheets("Releve").Cells(Rows, 1).End(xlUp).Row
 
    Datedeb = Sheets("Releve").Range("B" & j)
    Datefin = Sheets("Releve").Range("B" & j + 1)
    
    With Sheets("gazinfo")
        For i = 3 To .Cells(Rows.Count, 2).End(xlUp).Row
            If .Cells(i, 2) = Datedeb Then
                Ligdeb = i
                Exit For
            End If
        Next
        For i = 3 To .Cells(Rows.Count, 2).End(xlUp).Row
            If .Cells(i, 2) = Datefin Then
                LigFin = i
                Exit For
            End If
        Next
    End With
Range("H" & i + 1) = "=SUM(gazinfo!R" & Ligdeb & "C6:R" & Ligdeb & "C6)"
 
Next
            
End Sub
 
__________________
mat-tech est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 27/08/2008, 17h58   #2 (permalink)
Membre Expert
 
Date d'inscription: juillet 2007
Localisation: Loire Atlantique (44)
Âge: 52
Messages: 1 000
Par défaut

Salut mat-tech et le forum
Comprend pas tout, donc j'ai pas testé
Code :
Private Sub CommandButton1_Click()
Dim i As Long, j As Long
Dim Ligdeb As Long, LigFin As Long
Dim Datedeb As Date, Datefin As Date
Dim Celdate As String
Dim rep
 
For j = 3 To Sheets("Releve").Cells(Rows, "A").End(xlUp).Row 'step 2
'Pour J = 3 jusqu'à dernière de A
    Datedeb = Sheets("Releve").Range("B" & j)
    Datefin = Sheets("Releve").Range("B" & j + 1)
    'On fixe les dates, mais
    'J=3 => Datedeb=B3 et Datefin B4
    'J=4 => Datedeb=B4 et Datefin B5 est-ce normal qu'on réutilise B4 ?
 
    With Sheets("gazinfo")
        For i = 3 To .Cells(Rows.Count, "B").End(xlUp).Row
            If .Cells(i, "B") >= Datedeb Then
                Ligdeb = i
                Exit For
            End If
        Next
        'sert à trouver la première date. si elle n'existe pas, la
        'première qui est supérieure
        For i = 3 To .Cells(Rows.Count, 2).End(xlUp).Row
            If .Cells(i, "B") >= Datefin Or _
               i = .Cells(Rows.Count, 2).End(xlUp).Row Then
                LigFin = i
                Exit For
            End If
        Next
        'même logique de travail
    End With
Range("H" & i + 1).FormulaR1C1 = "=SUM(gazinfo!R" & Ligdeb & "C6:R" & Ligdeb & "C6)"
'Faut expliquer à Excel que c'est une formule RC
Next
End Sub
La dernière instruction est sur la page Active et non sur la feuille "Releve", et à la ligne i => moi j'aurais mis la ligne J
C6 donne la colonne F
A+
Gorfael est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 27/08/2008, 18h17   #3 (permalink)
Membre actif
 
Avatar de mat-tech
 
Date d'inscription: avril 2006
Localisation: Bruxelles
Messages: 171
Par défaut

Pour répondre a ta question oui c'est normal qu'on utilise 2 fois une même cellule, car au premier passage elle sert de datefin et au second passage elle sert de datedeb.

J'ai essayé ton code mais j'ai une " erreur 13 incompatibilité de type" à la ligne

Code :
 
For j = 3 To Sheets("Releve").Cells(Rows, "A").End(xlUp).Row Step 1
 
Pour mieux comprendre en fichier joint il y a mon classeur si tu veux.

Merci
__________________
mat-tech est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 27/08/2008, 18h28   #4 (permalink)
Membre Expert
 
Date d'inscription: juillet 2007
Localisation: Loire Atlantique (44)
Âge: 52
Messages: 1 000
Par défaut

Salut mat-tech et le forum
J'ai fait comme toi, j'ai lu en travers
Code :
 
For j = 3 To Sheets("Releve").Cells(Rows.count, "A").End(xlUp).Row Step 1
 
Devrais être moins mauvais
A+
Gorfael est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 27/08/2008, 19h02   #5 (permalink)
Membre actif
 
Avatar de mat-tech
 
Date d'inscription: avril 2006
Localisation: Bruxelles
Messages: 171
Par défaut

Autant pour moi ...

Voilà il n'y a plus d'erreur, mais il n'y a rien qui se passe, fin il affiche dans H4
Code :
 
=SOMME(gazinfo!$F$3:$F$3)
 
Juste dans H4

La y a quelque chose qui m'échappe
__________________
mat-tech est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 27/08/2008, 19h12   #6 (permalink)
Membre actif
 
Avatar de mat-tech
 
Date d'inscription: avril 2006
Localisation: Bruxelles
Messages: 171
Par défaut

Bon avec recherche j'ai trouvé mes différentes erreurS
et ca donne :

Code :
 
Dim Ligdeb As Long, LigFin As Long
Dim Datedeb As Date, Datefin As Date
Dim Celdate As String
Dim rep
 
'For j = 3 To Sheets("Releve").Cells(Rows, "A").End(xlUp).Row
For j = 3 To Sheets("Releve").Cells(Rows.Count, "A").End(xlUp).Row
 
'Pour J = 3 jusqu'à dernière de A
    Datedeb = Sheets("Releve").Range("A" & j)
    Datefin = Sheets("Releve").Range("A" & j + 1)
    'On fixe les dates, mais
    'J=3 => Datedeb=B3 et Datefin B4
    'J=4 => Datedeb=B4 et Datefin B5 est-ce normal qu'on réutilise B4 ?
    
    With Sheets("gazinfo")
        For i = 3 To .Cells(Rows.Count, "B").End(xlUp).Row
            If .Cells(i, "B") >= Datedeb Then
                Ligdeb = i
                Exit For
            End If
        Next
        'sert à trouver la première date. si elle n'existe pas, la
        'première qui est supérieure
        For i = 3 To .Cells(Rows.Count, "B").End(xlUp).Row
            If .Cells(i, "B") >= Datefin Or _
               i = .Cells(Rows.Count, "B").End(xlUp).Row Then
                LigFin = i
                Exit For
            End If
        Next
        'même logique de travail
    End With
Range("H" & j + 1).FormulaR1C1 = "=SUM(gazinfo!R" & Ligdeb & "C6:R" & LigFin & "C6)"
'Faut expliquer à Excel que c'est une formule RC
Next
End Sub
 
Merci le forum
__________________
mat-tech est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide