CountA d'une autre feuille
Bonjour,
J'aurais besoin de support pour une fonction dans une macro.
Je veux calculer le nombre de cellule non-vide sur une plage d'un autre onglet à l'aide d'une macro
L'onglet ou je veux faire le calcul de non-vide: T_Apec, range A2 à A999
La destination du calcul de nombre de cellule non-vide est dans l'onglet: Champs_et_doublons
La cellule de destination est D8
Voici la macro.
Sub MAJ_Valeur()
'valeur analyte
Worksheets("Champs_et_doublons").Range("D8").Activate
ActiveCell.Value = Worksheets("T_APEC").WorksheetFunction.CountA(Range("A2:a999"))
End Sub
_______________
Est-ce possible de mettre une condition en début de macro qui excécute la macro uniquement si l'onglet T_APEC existe.
Merci de votre support
Bonjour,
Un test :
Sub MAJ_Valeur()
'valeur analyte
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "T_APEC" Then
Worksheets("Champs_et_doublons").Range("D8").Activate
ActiveCell.Value = Worksheets("T_APEC").WorksheetFunction.CountA(Range("A2:A999"))
End If
Next i
End Sub
Cdlt,
Allo Ergotamine.
Ca bug pour:
ActiveCell.Value = Worksheets("T_APEC").WorksheetFunction.CountA(Range("A2:A999"))
Bonsoir La_baie_1976, Ergotamine, le forum,
une variante....à tester....
Function WsExist(Nom$) As Boolean
On Error Resume Next
WsExist = Worksheets(Nom).Index
End Function
Sub test()
If Not WsExist("T_Apec") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
With Sheets("Champs_et_doublons")
.Range("D8") = Application.WorksheetFunction.CountA(Sheets("T_Apec").Range("A2:a999"))
End With
End Sub
Cordialement,
Merci beaucoup Xorsankukai.
Il ne me reste qu'à le faire pour 26 tables et relations :)
Merci de votre support :)
Bonjour à tous,
Votre code était éronné de base sur la formule :
Sub MAJ_Valeur()
'valeur analyte
For i = 1 To Worksheets.Count
If Worksheets(i).Name = "T_APEC" Then
Worksheets("Champs_et_doublons").Range("D8").Value = WorksheetFunction.CountA(Worksheets("T_APEC").Range("A2:A999"))
End If
Next i
End Sub
Cdlt,
Bonjour à tous,
ce n'est pas une fonction que tu veux, mais un sub.
Une fonction retourne une valeur dans une variable. Comme a= SIN(123)
Sub MAJ_Valeur()
'valeur analyte
On Error GoTo fin
Worksheets("Champs_et_doublons").Range("D8").Value = Application.WorksheetFunction.CountA(Worksheets("T_APEC").Range("A2:a999"))
On Error GoTo 0
Exit Sub
fin:
MsgBox "Feuille T_APEC absente"
End Sub
Activer D8 n'est pas nécessaire, ça ralenti pour rien.
eric
Bonjour.
Voici le code que j'ai fais avec votre aide.
Quand la feuille est absente il sort complètement de la macro alors que je voudrais seulement qu'il passe à la prochaine étape.
Function WsExist(Nom$) As Boolean
On Error Resume Next
WsExist = Worksheets(Nom).Index
End Function
Sub MAJ_NB()
'*********************
'Mise a jour Analyte
'*************************
If Not WsExist("Analytes") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
With Sheets("Champs_et_doublons")
.Range("d8") = Application.WorksheetFunction.CountA(Sheets("Analytes").Range("A2:a9999"))
End With
'*********************
'Mise a jour nb APEC
'*************************
If Not WsExist("Apec") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
With Sheets("Champs_et_doublons")
.Range("d9") = Application.WorksheetFunction.CountA(Sheets("Apec").Range("A2:a999"))
End With
If Not WsExist("T_Apec") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
With Sheets("Champs_et_doublons")
.Range("F9") = Application.WorksheetFunction.CountA(Sheets("T_Apec").Range("A2:a999"))
End With
'*********************************************************************************************************
'MAJ ContaminatedSiteAreasByMedia
'********************************************
If Not WsExist("ContaminatedSiteAreasByMedia") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
With Sheets("Champs_et_doublons")
.Range("D10") = Application.WorksheetFunction.CountA(Sheets("ContaminatedSiteAreasByMedia").Range("A2:a999"))
End With
If Not WsExist("T_media_fail") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
With Sheets("Champs_et_doublons")
.Range("F10") = Application.WorksheetFunction.CountA(Sheets("T_media_fail").Range("A2:a999"))
End With
'*********************************************************************************************************
'MAJ Contamination
'***************************
If Not WsExist("Contamination") Then MsgBox "Cette feuille n'existe pas !": 'Exit Sub
With Sheets("Champs_et_doublons")
.Range("D11") = Application.WorksheetFunction.CountA(Sheets("Contamination").Range("A2:a999"))
End With
If Not WsExist("T_contamination") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
With Sheets("Champs_et_doublons")
.Range("F11") = Application.WorksheetFunction.CountA(Sheets("T_contamination").Range("A2:a999"))
End With
'*********************************************************************************************************
'MAJ decision unit
'***************************
If Not WsExist("DecisionUnits") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
With Sheets("Champs_et_doublons")
.Range("d12") = Application.WorksheetFunction.CountA(Sheets("DecisionUnits").Range("A2:a999"))
End With
If Not WsExist("T_Decision_unit") Then MsgBox "Cette feuille n'existe pas !": Exit Sub
With Sheets("Champs_et_doublons")
.Range("f12") = Application.WorksheetFunction.CountA(Sheets("T_Decision_unit").Range("A2:a999"))
End With
J'en ai pour 3x comme ca :)
Donc si la feuille n'existe pas il faudrait passer à la prochaine validation.
Merci de votre support
Re,
Merci pour ton retour,
Voici une solution (parmis d'autres)....
Function WsExist(Nom$) As Boolean
On Error Resume Next
WsExist = Worksheets(Nom).Index
End Function
Sub test()
With Sheets("Champs_et_doublons")
On Error Resume Next
.Range("D8") = IIf(WsExist("Analytes"), Application.WorksheetFunction.CountA(Sheets("Analytes").Range("A2:a999")), "")
.Range("D9") = IIf(WsExist("T_Apec"), Application.WorksheetFunction.CountA(Sheets("T_Apec").Range("A2:a999")), "")
.Range("D10") = IIf(WsExist("ContaminatedSiteAreasByMedia"), Application.WorksheetFunction.CountA(Sheets("ContaminatedSiteAreasByMedia").Range("A2:a999")), "")
.Range("D11") = IIf(WsExist("test"), Application.WorksheetFunction.CountA(Sheets("test").Range("A2:a999")), "")
'ETC......
End With
End Sub
Si tu postais un fichier, tu aurais certainement une solution plus adaptée....
Cordialement,