VB et Excel [Résolu]

Messages postés
63
Date d'inscription
lundi 19 octobre 2009
Statut
Membre
Dernière intervention
5 janvier 2011
- - Dernière réponse : rebelette
Messages postés
63
Date d'inscription
lundi 19 octobre 2009
Statut
Membre
Dernière intervention
5 janvier 2011
- 26 janv. 2010 à 21:42
Bonjour, j'ai écrit un morceau de code pour vider des colonnes sur Excel depuis VB, seulement, cela prend une plombe car parfois, il y a plus de 100 colonnes à vider. Peut être existe-t-il une autre méthode (Clear ou autre) mais je ne sais comment sélectionner une colonne entière d'un coup.
Goutte = les différentes colonnes
Larme = les 112 lignes de chaque colonne que je dois vider. Merci de votre réponse

For Goutte = 1 To 140
If xlRange.Cells(2, Goutte).Value = "" Then
For Larme = 1 To 112
xlRange.Cells(Larme, Goutte).Value = ""
Next
Else
End If
Next
Afficher la suite 

20/34 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Bonjour,

confirme que j'ai bien compris :
est-ce bien ceci :
pour chacune des colonnes X de 1 à 140 : effacer les cellules (1,X) à (112,X) de la colonne X si rien en (2,X) ?
Et les autres cellules de chaque colonne X qui ne contient rien en (2,X) ? elles restent intactes ou elles doivent être également vidées ?
Soit tgrès précis sur ce point car traitements différents dans un cas et l'autre

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
61
3
Merci
Salut
Quand tu ne sais pas le code à mettre pour, par exemple, sélectionner une colonne entière, il te suffit d'enregistrer une macro sous Excel en le faisant à la main. Tu auras le code tout fait, il ne restera qu'à le ramener sous VB6 et à changer le nom de l'objet sur lequel porte la commande.
Sélectionner une colonne entière : Range("D:D").Select

Oui, si tu dois vider le contenu de 112 lignes d'une même colonne :
Range("D1:D112").ClearContent

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Jack
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Je t'ai posé une question à laquelle je n'ai pas encore eu de réponse
Mais cela ne fait ruien :
partons de l'hypothèse :
pour chacune des colonnes X de 1 à 140 : effacer les cellules (1,X) à (112,X) de la colonne X si rien en (2,X)

Le plus rapide (en temps d'exécution) sera de très loin ceci :;

Dim couic As Range
  For Each c In Range(Cells(1, 1), Cells(112, 140)).Columns
   If Cells(2, c.Column) = "" Then
     If couic Is Nothing Then
       Set couic = Range(Cells(1, c.Column), Cells(112, c.Column))
     Else
        Set couic = Application.Union(couic, Range(Cells(1, c.Column), Cells(112, c.Column)))
     End If
   End If
  Next
  couic.ClearContents
  Set couic = Nothing


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
63
Date d'inscription
lundi 19 octobre 2009
Statut
Membre
Dernière intervention
5 janvier 2011
3
Merci
Public xlApp, xlBook, xlChart, xlRange, xlWKS As Object
Public xlWhs, iRows, iCols, iRotate As Object
Public Fichier As String

' Je déclare les Objets Xl avant l'Option Explicit pour pouvoir les utiliser depuis d'autres feuilles

Option Explicit

Private Sub Form_Load()
Fichier = Chemin.Text
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(Fichier)
Set xlWKS = xlBook.WorkSheet(1)
Set xlRange = xlWKS.Range("A1:A65535")

J'ai utilisé ce code car je l'ai trouvé sur ce site et après moults Bugs, ça a fonctionné. Il y a sûrement d'autres façons plus adéquates pour effectuer ces opérations, mais je n'ai pas assez d'expérience. Merci de tes réponses.
Je vais essayer ton code depuis Excel.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de rebelette
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Voilà !
Essaye depuis Excel d'abord et reviens ensuite ...
Ce sera un bon début pour y voir plus clair .

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Mais non ...
Il devrait suffire de modifier mon code et d'y ajouter (sous VB6, la référence à ta feuille.
Tu t'es référé à ta feuille par cette ligne :
Set xlWKS = xlBook.WorkSheet(1)
Il devrait allors te suffire d'ajouter Set xlWKS.
(n'oublie pas le .)
devant chaque Range et chaque Cells ...
Essaye ...
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Correction :
Il devrait allors te suffire d'ajouter xlWKS.


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Et tu types couic ainsi :
Dim couic as Object


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Essaye ainsi :

Dim couic As Object, c As Object
  For Each c In xlWKS.Range(xlWKS.Cells(1, 1), xlWKS.Cells(112, 140)).Columns
   If xlWKS.Cells(2, c.Column) = "" Then
     If couic Is Nothing Then
       Set couic = xlWKS.Range(xlWKS.Cells(1, c.Column), xlWKS.Cells(112, c.Column))
     Else
        Set couic = Application.Union(couic, xlWKS.Range(xlWKS.Cells(1, c.Column), xlWKS.Cells(112, c.Column)))
     End If
   End If
  Next
  MsgBox couic.Address
  couic.ClearContents
  Set couic = Nothing


Dans la partie de tes déclarations :

Public xlApp as object, xlBook as object, xlWKS As Object
Public Fichier As String

J'espère que tu as fait sauter ton Public Range as object ...

et dans ton Form_load :

Fichier = Chemin.Text
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(Fichier)
Set xlWKS = xlBook.WorkSheets(1) 

et fait sauter ton :
Set xlRange = xlWKS.Range("A1:A65535")
dont je ne vois pas à quoi il sert
Il apparaissait dans la liste des propositions acceptables parce que tu l'avais déclaré comme objet
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Ah oui :
Remplace également chaque mot Application par xlApp.Application

Je suis désolé de ne pouvoir faire pour toi des tests pour arriver à la syntaxe exacte.
La raison en est la suivante : La machine sur laquelle j'ai Excel est sans aucun runtime de vb6 (et sans VB6). Celle (distincte) où j'ai VB6 est sans Excel. Ceci parce que je développe certains éléments (ocx principalement) et qu'il me faut essayer leur parfait fonctionnement dans Excel en étant absolument certain de ce que leur bon fonctionnement ne serait pas lié, de près ou de loin, à la présence de runtimes de VB6. Il ne m'est donc pas possible de faire moi-même des tests de pilotage d'Excel depuis VB6.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Heureux de l'apprendre, Rebelette,

cependant : deux prières :
1) donne dorénavant, s'il te plait, un titre plus "révêlateur" du problème à tes discussions
2) l'important, dans cette affaire, n'était pas réellement comment "piloter", mais bien (avant toute autre chose) comment traiter sous VBA/Excel.
Mon code est en effet plus rapide (très) à l'exécution. Pourquoi et comment devraient être (pour tous comme les autres) la seule vraie question. Analyse-le avec calme et fais-en tes choux gras . . Car là était l'essentiel.
3) (et cela n'engage que moi) : ce n'est pas toujours une bonne idée, que celle de "piloter" . Le problème des "pilotages" ? ===>> le code mis sous VB6 est dépendant de la version de l'appli "pilotée". Difficile, alors, d'en assurer une véritable pérennité
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Pour répondre valablement à ta question, il nous faudrait savoir où, comment et pourquoi tu utilises cette plage xlRange ainsi définie :
Set xlRange = xlWKS.Range("A1:A65535") !

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Je ne sais pas si tu réalises !
ton xlRange, dans cette affaire, n'est rien d'autre que ta feuille ! (xlWKS) ...
et ton truc s'écrit donc :

With xlWKS
For i= 3 To 19 Step 2
  If (.Cells(2, i).Value) <> "" Then
    CmbPJs.AddItem (.Cells(2, i).Value)
    CmbXPMJ.AddItem (.Cells(2, i).Value)
  End If
Next 

et xlrange ne sefrt à rien !

Cà, c'est pour le premier principe ... Quand tu l'auras compris, on passera au second (ne pas traiter, surtout dans une boucle, ce qu'il est inutile de traiter !)
Et ce n'est pas tout... mais bon... il faut bien débuter ... mais pourquoi ne fais-tu pas comme l'également débutant (je te le jure) que je suis sous VBA/Excel ? ===>>> je bûche comme un dingue pour rattraper mon retard !
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Tu as dans ce cas 22 mois d'avance sur moi en VBA/Excel

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
3
Merci
Je sais , je sais ...
Mais quand on veut ramer : on rame (ce que nous faisons tous). ... même si ce n'est pas toujours agréable (encore que...)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
63
Date d'inscription
lundi 19 octobre 2009
Statut
Membre
Dernière intervention
5 janvier 2011
0
Merci
Merci de ta réponse. Il s'agit effectivement d'effacer les colonnes où rien ne se trouve dans la ligne 2. Je vais essayer le code que tu m'as envoyé, et te recontacte si je galère trop. A +
Commenter la réponse de rebelette
Messages postés
63
Date d'inscription
lundi 19 octobre 2009
Statut
Membre
Dernière intervention
5 janvier 2011
0
Merci
Bon ben voilà, 1er truc que je compends pas :
j'ai déclaré Range as Object en Public dans ma Feuille principale, mais quand je lance l'application, j'ai ce message d'erreur qui apparait

'Type défini par l'utilisateur non défini
à propos de
Dim couic As Range
Que puis je faire?
Commenter la réponse de rebelette
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
j'ai déclaré Range as Object en Public dans ma Feuille principale


Ah !
Range est un mot réservé de VBA/Excel !
Qu'est-ce qui te prend de faire un tel typage de Range (qui est une plage) ?
Et que cela a-t-il à voir avec le problème objet de ta question ? (c'est comme si, allant chez le garagiste, tu lui demandais pourquoi ton allumage ne va plus depuis que tu as changé un pneu !)
Ne peux-tu pas te contenter de faire ce qui t'a été montré et marche bien ? (testé chez moi).
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu
Messages postés
63
Date d'inscription
lundi 19 octobre 2009
Statut
Membre
Dernière intervention
5 janvier 2011
0
Merci
en commentaire, je t'avais inscrit le message d'erreur (pour le distinguer du reste du texte).
Remarque : l'application sur laquelle je travaille eest en VB6.0 et non en VBA (il n'y a pas trace de Range dans l'explorateur d'objets). C'est peut être la raison pour laquelle ça passe pas.
Commenter la réponse de rebelette
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
212
0
Merci
Tout le code que tu nous as jusqu'à présent montré est ... un code ... VBA/Excel !
Si tu pilotes Excel depuis VB6, montre comment tu ouvres et pilotes ton appli Excel (et tout ton code est alors à modifier)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
Commenter la réponse de ucfoutu