Executer macro si cellule vide

tijocanard

XLDnaute Nouveau
Bonjour,

Je suis sur que c'est tout con mais je ne trouve pas comment vider le contenu de 2 colonnes.

J'ai 3 boutons avec des macros derrière.
Je lance mon bouton 1 qui écrit des choses dans ma feuille excel (colonne A et B), et je veux que si je clique sur le bouton 2 ca écrase les anciennes données et ca écrit les nouvelles toujours en colonne A et B.

Voila ce que j'ai essayé de bidouiller :eek:
Code:
If Worksheets("Feuil1").Range("A2:A40,B2:B40").Value <> "" Then
Range("A2:A40, B2:B40").ClearContents
End If
 

Efgé

XLDnaute Barbatruc
Re : Executer macro si cellule vide

Bonjour tijocanard,
Pas sur d'avoir compris mais si tu veux que le bouton 2 vide les données de ta plage, ce n'est pas la peine de vérifier si cette plage est remplie...
Donc
Code:
Range("A2:A40, B2:B40").ClearContents
devrait suffire.
A moins que je n'ai vraiment pas compris le problème.
Cordialement
 

tijocanard

XLDnaute Nouveau
Re : Executer macro si cellule vide

Pas sur d'avoir compris mais si tu veux que le bouton 2 vide les données de ta plage, ce n'est pas la peine de vérifier si cette plage est remplie...

J'ai mal expliqué: le bouton 2 ne doit pas effacer, il execute une macro comme le bouton1

C'est juste que si j'execute le bouton 2 (1, 2 ou 3 dailleurs) alors il faut dabord effacer le contenu des cellules!

Code:
If Application.CountA(Feuil1.[A2:B40]) > 0 Then Feuil1.[A2:B40].ClearContents
Merci ca fonctionne mais petit probleme: si présence de valeur avant (en A2 et A3 par ex) ca efface bien mais le nouvel enregistrement commence pas en A2 mais A4.

Sinon merci déjà!
 

youky(BJ)

XLDnaute Barbatruc
Re : Executer macro si cellule vide

Bonjour Efgé,
Je suis tout à fait d'accord avec toi
pas besoin de se tracasser à savoir s'il y a des données
1) si pas de données on efface sans conséquences
2) si des données on les effacent
Dans les 2 cas il y a rien à la fin . . . .

Bon tijocanard mets des A4 au lieu de A2 dans les codes
Bruno
 

Efgé

XLDnaute Barbatruc
Re : Executer macro si cellule vide

Re tijocanard, Bonjour youky(BJ),
...C'est juste que si j'execute le bouton 2 (1, 2 ou 3 dailleurs) alors il faut dabord effacer le contenu des cellules!...
J'en reviens à mon questionnement : Pourquoi vérifier si les cellules sont pleines alors que de toute façon " il faut dabord effacer le contenu des cellules!"
D'autre part, pour le problème de
...mais le nouvel enregistrement commence pas en A2 mais A4....
Il faudrait voir un exemple de comment tu colle les données.
Cordialement
 

tijocanard

XLDnaute Nouveau
Re : Executer macro si cellule vide

Pourquoi vérifier si les cellules sont pleines alors que de toute façon " il faut dabord effacer le contenu des cellules!"
oui c'est vrai, tu as tout a fait raison ;)

Il faudrait voir un exemple de comment tu colle les données.

Ma macro va chercher des données dans une base oracle, toutes les 15 min un nouvelle ligne apparait dans mon fichier avec la date et l'heure et une quantité de quelque chose

Pour vous éclairer ma macro:
Code:
Private Sub CommandButton2_Click()
[COLOR="Red"]Dim Ligne As Long
Ligne = Range("A65536").End(xlUp).Row + 1[/COLOR]
[COLOR="DarkOliveGreen"]If Application.CountA(Feuil1.[A3:B40]) > 0 Then Feuil1.[A3:B0].ClearContents[/COLOR]
    With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=dept_85;PWD=dept_85;SERVER=producim;", _
        Destination:=Range("A3"))
        .CommandText = Array( _
        "SELECT histo_tr.DT_DEB_CONS as Date_Heure, Sum(histo_event_tr.QTE_PROD)as Quantité" & Chr(13) & "" & Chr(10) & "FROM DEPT_85.histo_event_tr histo_event_tr, DEPT_85.histo_tr histo_tr" & Chr(13) & "" & Chr(10) & "WHERE histo_event_tr.ID_HISTO = histo_tr.ID_HISTO AND ((histo_event_tr" _
        , _
        ".ID_RESS_HISTO='UPAV3_CU11_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhh24mi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU12_0') AND (histo_tr.DT_DEB_CONS>to" _
        , _
        "_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhh24mi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU21_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhh24m" _
        , _
        "i')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU22_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhh24mi')))" & Chr(13) & "" & Chr(10) & "GROUP BY histo_tr.DT_DEB_CONS" _
        )
        .Name = "Production_Equipe1"
        .FieldNames = False
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = False
        .RefreshPeriod = 2
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
    
End Sub

En rouge ce qui peut poser problème (solution fournie sur ce forum!)
En vert la solution de youky(BJ)

Merci de votre aide
 

Efgé

XLDnaute Barbatruc
Re : Executer macro si cellule vide

Re
Deux remarques :
1 Cette ligne n'est pas bonne:
Code:
If Application.CountA(Feuil1.[A3:B40]) > 0 Then Feuil1[COLOR=red][B].[A3:B0].[/B][/COLOR]ClearContents
Tu ne pourra jamais effacer la cellule B0

2 Tu ne te sert jamais de la variable Ligne. Peut être que :
Code:
"ODBC;DRIVER={Microsoft ODBC for Oracle};UID=dept_85;PWD=dept_85;SERVER=producim;", _
        [B][COLOR=red]Destination:=Range("A" & Ligne[/COLOR][COLOR=red])[/COLOR][/B])
pourrait aller mais sans certitude de ce tu cherche à faire.
Cordialement
 

tijocanard

XLDnaute Nouveau
Re : Executer macro si cellule vide

Pour la cellule B0, erreur de copier coller c'est bien B40
Sinon:
Code:
"ODBC;DRIVER={Microsoft ODBC for Oracle};UID=dept_85;PWD=dept_85;SERVER=producim;", _
Destination:=Range("A" & Ligne))
c'est ce que j'ai dans mes macro, à part celle que j'ai collé dans mon post :eek:

En fait j'ai trouvé, ma macro 1 me renvoyait 43 résultats du coup il fallait modifier
Code:
If Application.CountA(Feuil1.[A3:[COLOR="Red"]B50[/COLOR]]) > 0 Then Feuil1.[A3:[COLOR="red"]B50[/COLOR]].ClearContents

Quel couillon :(

J'en profite d'avoir de l'aide précieuse pour une dernière question:
je voudrais que ma macro 1 s'arrette à un enregistrement précis.

Genre quand ma macro renvois telle valeur, il faut l'arreter (car la elle s'arrete pas).
Si ca peut aider, je voudrais arrêter ma macro au bout de 35 données renvoyées.

Pourquoi 35 me direz vous, car je veux que ma macro recupere des infos entre 05h30 et 13h30 toutes les 15min soit 35 résultats!
 
Dernière édition:

tijocanard

XLDnaute Nouveau
Re : Executer macro si cellule vide

Re,

Donc voila mon fichier excel qui recoit les données.
Chaque bouton cache une macro
Et ma macro:
Code:
Private Sub CommandButton2_Click()
If Application.CountA(Feuil1.[A3:B50]) > 0 Then Feuil1.[A3:B50].ClearContents
Dim Ligne As Long
Ligne = Range("A65536").End(xlUp).Row + 1
    With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DRIVER={Microsoft ODBC for Oracle};UID=dept_85;PWD=dept_85;SERVER=producim;", _
        Destination:=Range("A" & Ligne))
        .CommandText = Array( _
        "SELECT histo_tr.DT_DEB_CONS as Date_Heure, Sum(histo_event_tr.QTE_PROD)as Quantité" & Chr(13) & "" & Chr(10) & "FROM DEPT_85.histo_event_tr histo_event_tr, DEPT_85.histo_tr histo_tr" & Chr(13) & "" & Chr(10) & "WHERE histo_event_tr.ID_HISTO = histo_tr.ID_HISTO AND ((histo_event_tr" _
        , _
        ".ID_RESS_HISTO='UPAV3_CU11_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhh24mi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU12_0') AND (histo_tr.DT_DEB_CONS>to" _
        , _
        "_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhh24mi')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU21_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhh24m" _
        , _
        "i')) OR (histo_event_tr.ID_RESS_HISTO='UPAV3_CU22_0') AND (histo_tr.DT_DEB_CONS>to_date(concat(to_char(sysdate,'yymmdd'),'0530'),'yymmddhh24mi')))" & Chr(13) & "" & Chr(10) & "GROUP BY histo_tr.DT_DEB_CONS" _
        )
        .Name = "Production_Equipe1"
        .FieldNames = False
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = True
        .SaveData = True
        .AdjustColumnWidth = False
        .RefreshPeriod = 2
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False
    End With
    
End Sub

Les 3 macros sont quasi identiques: les requetes sont les mêmes mais avec des heures différentes.

Donc il faudrait que je trouve un moyen de dire quand les résultats arrivent en cellule A35 j'arrête la macro.

Merci pour ton aide Efgé
 

Pièces jointes

  • Macro85.zip
    23.8 KB · Affichages: 53

Efgé

XLDnaute Barbatruc
Re : Executer macro si cellule vide

Bonjour tijocanard,
Essai de commencer toutes tes macros de boutons par:
Code:
Private Sub CommandButton1_Click()
Dim Ligne As Long
Ligne = Range("A65536").End(xlUp).Row + 1
If Ligne > 35 Then Exit Sub
'etc...
Cordialement
 

tijocanard

XLDnaute Nouveau
Re : Executer macro si cellule vide

Merci pour ta rapidité, changement effectué je te retiens donc au courant vers 13h30 voir si ma macro continue ou pas :)

Sinon quand j'ouvre ma feuille excel, j'ai toujours le message de excel qui me demande si je veux activer ou désactiver l'actualisation automatique.

J'ai vérifié mes macros et j'ai pourtant bien mis
Code:
.RefreshOnFileOpen = False

De même que dans les propriétés de ma plage de donénes (colonne A et B), le bouton actualisation à l'ouverure de fichier n'est pas coché.

Il doit donc rester quelque part une option cochée mais ou...

Et encore merci pour ton aide
 

Discussions similaires

Réponses
7
Affichages
367

Statistiques des forums

Discussions
312 612
Messages
2 090 227
Membres
104 453
dernier inscrit
benjiii88