Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Executer macro si cellule vide

  • Initiateur de la discussion Initiateur de la discussion tijocanard
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

T

tijocanard

Guest
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 😱
Code:
If Worksheets("Feuil1").Range("A2:A40,B2:B40").Value <> "" Then
Range("A2:A40, B2:B40").ClearContents
End If
 
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
 
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à!
 
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
 
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
 
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
 
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
 
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 😱

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 modification par un modérateur:
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

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
 
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
 
Re : Executer macro si cellule vide

Re,

Désolé mais ca ne marche pas.
Ma macro 1 qui aurait du arrêter les enregistrements à la ligne 35 (soit 13h30) continue et me renvoit un résultat à la ligne 35 (13h45). 🙁
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
906
Réponses
4
Affichages
586
Réponses
7
Affichages
829
P
Réponses
3
Affichages
552
Réponses
3
Affichages
878
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…