IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

If sur une plage de cellules par référence absolue [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Par défaut If sur une plage de cellules par référence absolue
    Bonjour,
    Si vous pouviez me sortir le ma galère ...
    Ma macro extrait des données lignes par ligne d'un fichier dans un autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ... 'extraction des informations LignePV , colonnes 1 à 4 (présence de données obligatoires)
    Do While WbCumul.Sheets(Produit).Cells(2, Col) <> "" 'prend les valeurs tant que toutes les colonnnes où se trouvent potentiellement des mesures n'ont pas été copiées
         WbCumul.Sheets(Produit).Cells(NumCumLigneVide, Col) = wb.Sheets(2).Range(WbCumul.Sheets(Produit).Cells(2, Col) & LignePV).Value
         Col = Col + 1
    Loop
    ...'extraction des informations à lignePV et colonnes suivantes (de Col à Col+11) (présence de données obligatoires)
    J'utilise "Col" (Byte) pour me déplacer dans les tableaux (la ligne 2 de WbCumul.Sheets(Produit) contient les lettres des colonnes à extraire de wb.Sheets(2))
    Les colonnes 1 à 5 et ?? à la fin de WbCumul.Sheets(Produit) ont toujours des valeurs extraites (?? dépendant du produit et jamais identique) (date et nom produit par exemple)
    Comme certaines lignes extraites dans WbCumul.Sheets(Produit) ne contiennent pas toujours des informations (sauf sur les colonnes A à D et ?? à la fin) je souhaite les supprimer
    Comme je ne connais pas ?? je pensais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ColF = Col - 1
    Col = 5 'on remet la valeur de la colonne à "zéro"
    With WbCumul.Sheets(Produit)
            If WorksheetFunction.CountA(.Range("Cells(NumCumLigneVide,Col):Cells(NumCumLigneVide,ColF)")) = 0 Then WbCumul.Sheets(Produit).Cells(NumCumLigneVide, 1).entire.Row.Delete 'effacer la ligne
    End With
    Mais même en fixant les valeur de .Cells (".Cells(5, 2): .Cells(5, 3)") j'ai un run-time error 1004 (application defined or objet defined error) en sur le if
    Comment faire pour supprimer mes lignes dont les cellules sont vides entre les colonnes 5 et ?? (sans convertir les numéros de colonne en lettre) donc en restant en référence absolue

    Merci pour vos propositions (ou correction )

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Bonjour,

    Un conseil, si tu veux que les forumeurs t'aident et prennent le temps de lire ton message, utilise les balises pour ton code, sinon c'est peu lisible et ça ne donne pas trop envie de lire ce gros pavé...

    Si je comprends bien, tu veux copier colonne par colonne les données d'une feuille 1 vers une feuille 2.
    Mais avant de faire ça, tu souhaites supprimer les colonnes qui n'ont aucune données ? (aucune données dans toutes la colonnes, ou juste sur la ligne 2 ?)

    Si c'est bien le cas, je te conseille de faire ta boucle en commençant par la dernière colonne, tout à droite.
    Ainsi, pas besoin d'utiliser un Col-1, que tu supprimer une colonne ou non, tu te décales d'une colonne sur la gauche.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Par défaut
    Citation Envoyé par mat955 Voir le message
    Bonjour,
    Un conseil, si tu veux que les forumeurs t'aident et prennent le temps de lire ton message, utilise les balises pour ton code, sinon c'est peu lisible et ça ne donne pas trop envie de lire ce gros pavé...
    Merci pour ta réponse. Désolée, je viens de corriger

    Si je comprends bien, tu veux copier colonne par colonne les données d'une feuille 1 vers une feuille 2.
    Mais avant de faire ça, tu souhaites supprimer les colonnes qui n'ont aucune données ? (aucune données dans toutes la colonnes, ou juste sur la ligne 2 ?)
    C'est presque ça : je prends toutes les informations dont j'ai besoin dans un fichier (wb) et je les copie dans le 2ème fichier (wbCumul). Les premières et dernières colonnes de wbCumul sont forcément remplies par des informations par défaut. Je veux supprimer la ligne que je viens de créer dans wbCumul si les colonnes de cette ligne sont vides. Le "if countA(...)=0" ne fonctionne pas

    Si c'est bien le cas, je te conseille de faire ta boucle en commençant par la dernière colonne, tout à droite.
    Ainsi, pas besoin d'utiliser un Col-1, que tu supprimer une colonne ou non, tu te décales d'une colonne sur la gauche.
    J'aurais aimé éviter la boucle, d'autant que countA (ou Empty ?) peut le faire

  4. #4
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    La partie de code qui te renvoie une erreur est mal écrite.
    Quand tu utilises Range, il ne faut pas mettre de guillemets, sauf si tu fais appel à une référence Excel. Par exemple : Range("B5")
    Sinon, pour faire appel à une plage de cellule :
    Range(Range1,Range2)
    Dans ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If WorksheetFunction.CountA(.Range(Cells(NumCumLigneVide,Col),Cells(NumCumLigneVide,ColF))) = 0
    Ca ne devrait plus renvoyer d'erreur mais je ne pense pas que ça fera ce que tu souhaites, regarde bien tes deux Cells et à quoi elle font référence, je pense qu'il faut modifier leurs argument Lignes/Colonne pour bien compter les bonnes cellules.

  5. #5
    Membre à l'essai
    Femme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Février 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2018
    Messages : 4
    Par défaut
    OK, donc Range n'interprète pas ce qui est entre " (ce qui est logique). Avec le code ci-dessous il devrait donc vérifier que le contenu des cellules de la ligne 7, colonnes de 5 à 15 sont "vides".
    J'ai toujours une erreur 1004, même en changeant les variables par des valeurs (des fois que...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If WorksheetFunction.CountA(.Range(Cells(7, 5), Cells(7, 15))) = 0 Then
    ou
    If WorksheetFunction.CountA(WbCumul.Sheets(Produit).Range(Cells(7, 5), Cells(7, 15)).Value) = 0 Then
    CountA ou WorksheetFunction nécessitent-ils des addins ou autre pour fonctionner ? Car il ne semble pas que ce soit le code lui même qui lui pose problème mais une définition (error 1004 (application defined or objet defined error))

    Merci

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    385
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 385
    Par défaut
    Citation Envoyé par Mots06 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If WorksheetFunction.CountA(.Range(Cells(7, 5), Cells(7, 15))) = 0 Then
    ou
    If WorksheetFunction.CountA(WbCumul.Sheets(Produit).Range(Cells(7, 5), Cells(7, 15)).Value) = 0 Then
    Dans la première ligne, je vois que tu utilises un bloc With car il y a un point devant le Range. Il faut plutôt mettre les points devant les cells, car ce sont bien eux qui appartiennent à la feuille choisie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If WorksheetFunction.CountA(Range(.Cells(7, 5), .Cells(7, 15))) = 0 Then
    Et dans la deuxième ligne, tu as un .Value en trop.

    CountA ou WorksheetFunction nécessitent-ils des addins ou autre pour fonctionner ? Car il ne semble pas que ce soit le code lui même qui lui pose problème mais une définition (error 1004 (application defined or objet defined error))
    Il ne me semble pas, peux-tu me dire quelles références sont activées dans ton fichier ? (Dans la fenêtre VBA, menu Outils >> Références...)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Calcul sur une plage de cellules
    Par kokoVBA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/08/2009, 10h35
  2. Réponses: 2
    Dernier message: 16/03/2009, 15h06
  3. [DAO] SQL sur une plage de cellules
    Par cafeine dans le forum Contribuez
    Réponses: 8
    Dernier message: 01/03/2008, 22h47
  4. Comment creer un recordset ADO sur une plage de cellules
    Par JYL74 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2007, 09h36
  5. Réponses: 25
    Dernier message: 30/05/2007, 13h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo